Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Romain Courteaud
slapos.core
Commits
6b9e956c
Commit
6b9e956c
authored
Oct 13, 2023
by
Romain Courteaud
🐙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos_accounting: wip: create from multiple invoices
using Entity_getOutstandingAmountList
parent
bf0ad382
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
62 deletions
+69
-62
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_createPaymentTransaction.py
...kins/slapos_accounting/Entity_createPaymentTransaction.py
+68
-61
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_createPaymentTransaction.xml
...ins/slapos_accounting/Entity_createPaymentTransaction.xml
+1
-1
No files found.
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_createPaymentTransaction.py
View file @
6b9e956c
from
Products.ERP5Type.Message
import
translateString
from
zExceptions
import
Unauthorized
if
REQUEST
is
not
None
:
raise
Unauthorized
...
...
@@ -7,72 +6,80 @@ portal = context.getPortalObject()
if
not
invoice_list
:
raise
ValueError
(
'You need to provide at least one Invoice transaction'
)
# For now consider a single value is passed, in future we intend to create
# a single payment per invoice.
current_invoice
=
invoice_list
[
0
]
payment_tag
=
"sale_invoice_transaction_create_payment_%s"
%
current_invoice
.
getUid
()
if
context
.
REQUEST
.
get
(
payment_tag
,
None
)
is
not
None
:
raise
ValueError
(
'This script was already called twice on the same transaction '
)
activate_kw
=
{
'tag'
:
'Entity_createPaymentTransaction_%s'
%
context
.
getUid
()
}
if
current_invoice
.
SaleInvoiceTransaction_isLettered
():
raise
ValueError
(
'This invoice is already lettered'
)
# Ensure all invoice use the same arrow and resource
first_invoice
=
invoice_list
[
0
]
identical_dict
=
{
'getSource'
:
first_invoice
.
getSource
(),
'getSourceSection'
:
first_invoice
.
getSourceSection
(),
'getSourcePayment'
:
first_invoice
.
getSourcePayment
(),
'getDestination'
:
first_invoice
.
getDestination
(),
'getDestinationSection'
:
first_invoice
.
getDestinationSection
(),
'getPriceCurrency'
:
first_invoice
.
getPriceCurrency
(),
'getLedger'
:
first_invoice
.
getLedger
(),
}
context
.
serialize
()
quantity
=
0
for
movement
in
current_invoice
.
searchFolder
(
portal_type
=
'Sale Invoice Transaction Line'
,
default_source_uid
=
[
i
.
uid
for
i
in
context
.
Base_getReceivableAccountList
()]):
quantity
+=
movement
.
getQuantity
()
price
=
0
causality_uid_list
=
[]
# Check that all invoice matches
for
invoice
in
invoice_list
:
for
method_id
,
method_value
in
identical_dict
.
items
():
if
getattr
(
invoice
,
method_id
)()
!=
method_value
:
raise
ValueError
(
'Invoices do not match on method: %s'
%
method_id
)
if
invoice
.
total_price
:
price
+=
invoice
.
total_price
causality_uid_list
.
append
(
invoice
.
payment_request_uid
)
if
invoice
.
SaleInvoiceTransaction_isLettered
():
raise
ValueError
(
'This invoice is already lettered'
)
if
quantity
>=
0
:
raise
ValueError
(
'You cannot generate Payment Transaction for zero or negative amounts.'
)
if
not
price
:
raise
ValueError
(
'No total_price to pay'
)
if
first_invoice
.
getDestinationSection
()
!=
context
.
getRelativeUrl
():
raise
ValueError
(
'Invoice not related to the context'
)
current_payment
=
portal
.
accounting_module
.
newContent
(
portal_type
=
"Payment Transaction"
,
causality
=
current_invoice
.
getRelativeUrl
(),
source_section
=
current_invoice
.
getSourceSection
(),
source_project
=
current_invoice
.
getSourceProject
(),
destination_section
=
current_invoice
.
getDestinationSection
(),
destination_project
=
current_invoice
.
getDestinationProject
(),
resource
=
current_invoice
.
getResource
(),
price_currency
=
current_invoice
.
getResource
(),
specialise
=
current_invoice
.
getSpecialise
(),
payment_mode
=
current_invoice
.
getPaymentMode
(),
ledger
=
current_invoice
.
getLedger
(),
start_date
=
current_invoice
.
getStartDate
(),
stop_date
=
current_invoice
.
getStopDate
(),
source_payment
=
current_invoice
.
getSourcePayment
(),
# Workarround to not create default lines.
created_by_builder
=
1
# create the payment transaction
payment_transaction
=
portal
.
accounting_module
.
newContent
(
portal_type
=
'Payment Transaction'
,
created_by_builder
=
True
,
causality_uid_set
=
causality_uid_list
,
source_section
=
first_invoice
.
getSourceSection
(),
source_payment
=
first_invoice
.
getSourcePayment
(),
destination_section
=
first_invoice
.
getDestinationSection
(),
destination_section_value
=
context
,
start_date
=
DateTime
(),
#payment_mode=,
#specialise
ledger
=
first_invoice
.
getLedger
(),
resource
=
first_invoice
.
getResource
(),
destination_administration
=
destination_administration
,
activate_kw
=
activate_kw
)
current_payment
.
newContent
(
portal_type
=
"Accounting Transaction Line"
,
quantity
=-
1
*
quantity
,
source
=
'account_module/receivable'
,
destination
=
'account_module/payable'
,
start_date
=
current_invoice
.
getStartDate
(),
stop_date
=
current_invoice
.
getStopDate
())
getAccountForUse
=
context
.
Base_getAccountForUse
current_payment
.
newContent
(
portal_type
=
"Accounting Transaction Line"
,
quantity
=
1
*
quantity
,
source
=
'account_module/payment_to_encash'
,
destination
=
'account_module/payment_to_encash'
,
start_date
=
current_invoice
.
getStartDate
(),
stop_date
=
current_invoice
.
getStopDate
())
comment
=
translateString
(
"Initialised by Entity_createPaymentTransaction."
)
# Reindex with a tag to ensure that there will be no generation while the object isn't
# reindexed.
payment_tag
=
"sale_invoice_transaction_create_payment_%s"
%
current_invoice
.
getUid
()
current_payment
.
activate
(
tag
=
payment_tag
).
immediateReindexObject
()
comment
=
translateString
(
"Initialised by Entity_createPaymentTransaction."
)
current_payment
.
PaymentTransaction_start
(
comment
=
comment
)
collection_account
=
getAccountForUse
(
'collection'
)
payment_transaction
.
newContent
(
id
=
'bank'
,
portal_type
=
'Accounting Transaction Line'
,
source_value
=
collection_account
,
destination_value
=
collection_account
,
quantity
=-
price
,
activate_kw
=
activate_kw
,
)
# Set a flag on the request for prevent 2 calls on the same transaction
context
.
REQUEST
.
set
(
payment_tag
,
1
)
for
index
,
line
in
enumerate
(
invoice_list
):
if
line
.
total_price
:
payment_transaction
.
newContent
(
id
=
"receivable%s"
%
index
,
portal_type
=
'Accounting Transaction Line'
,
source
=
line
.
node_relative_url
,
destination_value
=
getAccountForUse
(
'payable'
),
quantity
=
line
.
total_price
,
activate_kw
=
activate_kw
,
)
return
current_payment
payment_transaction
.
stop
()
return
payment_transaction
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_createPaymentTransaction.xml
View file @
6b9e956c
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
invoice_list, REQUEST=None
</string>
</value>
<value>
<string>
invoice_list,
destination_administration=None,
REQUEST=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment