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
7c4188b1
Commit
7c4188b1
authored
Oct 11, 2023
by
Romain Courteaud
🐙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos_accounting: wip Entity_hasOutstandingAmount
parent
6c186bf4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
118 additions
and
6 deletions
+118
-6
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_getOutstandingAmountList.py
...kins/slapos_accounting/Entity_getOutstandingAmountList.py
+38
-5
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_getOutstandingAmountList.xml
...ins/slapos_accounting/Entity_getOutstandingAmountList.xml
+1
-1
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_hasOutstandingAmount.py
...al_skins/slapos_accounting/Entity_hasOutstandingAmount.py
+1
-0
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_hasOutstandingAmount.xml
...l_skins/slapos_accounting/Entity_hasOutstandingAmount.xml
+62
-0
master/bt5/slapos_accounting/TestTemplateItem/portal_components/test.erp5.testSlapOSERP5AccountingScenario.py
..._components/test.erp5.testSlapOSERP5AccountingScenario.py
+16
-0
No files found.
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_getOutstandingAmountList.py
View file @
7c4188b1
"""return a list of invoices with the following attributes:
- payment_request_uid: the uid of the invoice, we consider that payment request is the invoice.
- payment_request_uid: the uid of the invoice
- node_relative_url : the url of the account ( if group_by_node=True is passed ).
- total_price: the amount left to pay for this invoice
- getTotalPrice: the original amount of this invoice.
Arguments:
- group_by_node (default True)
If you pass group_by_node=False you have a list of all invoices,
without the breakdown by account but if you pass group_by_node=True,
you have on line for each account.
To display to the user the list of invoices he has to pay, pass group_by_node=False,
to create a list to pass to Entity_createPaymentTransaction, use group_by_node=True.
- at_date (default None)
- include_planned (default True)
In current configuration, planned transactions, are used only in Payment Transactions for invoices of non-debitable customers.
If you pass include_planned=True, you will get only unpaid invoices for which payment deadline is past
If you pass include_planned=False, you will get all unpaid invoices, also those for which payment deadline is not past
"""
from
Products.ZSQLCatalog.SQLCatalog
import
SimpleQuery
,
ComplexQuery
portal
=
context
.
getPortalObject
()
params
=
dict
()
if
at_date
:
params
[
'at_date'
]
=
at_date
params
[
'grouping_reference'
]
=
None
params
[
'grouping_query'
]
=
ComplexQuery
(
SimpleQuery
(
grouping_reference
=
None
),
SimpleQuery
(
grouping_date
=
at_date
,
comparison_operator
=
">"
),
logical_operator
=
"OR"
)
else
:
params
[
'grouping_reference'
]
=
None
object_list
=
[]
if
include_planned
:
simulation_state_tuple
=
(
'stopped'
,
'delivered'
,
'planned'
,
'confirmed'
,
'started'
)
else
:
simulation_state_tuple
=
(
'stopped'
,
'delivered'
)
if
section_uid
is
None
:
params
[
'group_by_mirror_section'
]
=
True
else
:
params
[
'section_uid'
]
=
section_uid
if
resource_uid
is
None
:
params
[
'group_by_resource'
]
=
True
else
:
params
[
'resource_uid'
]
=
resource_uid
for
(
idx
,
brain
)
in
enumerate
(
portal
.
portal_simulation
.
getInventoryList
(
mirror_section_uid
=
context
.
getUid
(),
simulation_state
=
(
'stopped'
,
'delivered'
),
simulation_state
=
simulation_state_tuple
,
group_by_payment_request
=
True
,
group_by_node
=
group_by_node
,
node_uid
=
[
x
.
uid
for
x
in
context
.
Base_getReceivableAccountList
()]
or
-
1
,
**
params
)):
...
...
@@ -26,7 +60,6 @@ for (idx, brain) in enumerate(portal.portal_simulation.getInventoryList(
# directly in listbox. We should probably add support for this in getInventoryList instead
# of this hack
# XXX In our case, this hould be always None.
payment_request_uid
=
brain
.
payment_request_uid
if
not
payment_request_uid
:
payment_request_uid
=
brain
.
getObject
().
getExplanationUid
()
...
...
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_getOutstandingAmountList.xml
View file @
7c4188b1
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
at_date=Non
e, **kw
</string>
</value>
<value>
<string>
resource_uid=None, section_uid=None, group_by_node=True, at_date=None, include_planned=Tru
e, **kw
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
...
...
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_hasOutstandingAmount.py
0 → 100644
View file @
7c4188b1
return
len
(
context
.
Entity_getOutstandingAmountList
(
*
args
,
**
kw
))
!=
0
master/bt5/slapos_accounting/SkinTemplateItem/portal_skins/slapos_accounting/Entity_hasOutstandingAmount.xml
0 → 100644
View file @
7c4188b1
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"_reconstructor"
module=
"copy_reg"
/>
</klass>
<tuple>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
<global
name=
"object"
module=
"__builtin__"
/>
<none/>
</tuple>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
*args, **kw
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Entity_hasOutstandingAmount
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
master/bt5/slapos_accounting/TestTemplateItem/portal_components/test.erp5.testSlapOSERP5AccountingScenario.py
View file @
7c4188b1
...
...
@@ -97,6 +97,8 @@ class TestSlapOSAccountingScenario(TestSlapOSVirtualMasterScenarioMixin):
# 1 subscription requests
self
.
assertRelatedObjectCount
(
project
,
5
)
self
.
assertFalse
(
owner_person
.
Entity_hasOutstandingAmount
())
self
.
assertFalse
(
owner_person
.
Entity_hasOutstandingAmount
(
include_planned
=
False
))
self
.
assertEqual
(
project
.
getValidationState
(),
"validated"
)
subscription_request
=
self
.
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
"Subscription Request"
,
...
...
@@ -109,6 +111,11 @@ class TestSlapOSAccountingScenario(TestSlapOSVirtualMasterScenarioMixin):
payment_transaction
.
PaymentTransaction_acceptDepositPayment
()
self
.
tic
()
self
.
assertTrue
(
owner_person
.
Entity_hasOutstandingAmount
())
amount_list
=
owner_person
.
Entity_getOutstandingAmountList
()
self
.
assertEquals
(
len
(
amount_list
),
1
)
self
.
assertEquals
(
amount_list
[
0
].
total_price
,
24.384
)
self
.
assertFalse
(
owner_person
.
Entity_hasOutstandingAmount
(
include_planned
=
False
))
self
.
assertEqual
(
subscription_request
.
getSimulationState
(),
"invalidated"
)
open_sale_order
=
self
.
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
"Open Sale Order Line"
,
...
...
@@ -124,6 +131,7 @@ class TestSlapOSAccountingScenario(TestSlapOSVirtualMasterScenarioMixin):
portal_type
=
"Invoice Line"
,
aggregate__uid
=
project
.
getUid
()
).
getParentValue
()
self
.
assertEqual
(
first_invoice
.
getUid
(),
amount_list
[
0
].
payment_request_uid
)
self
.
assertEqual
(
first_invoice
.
getSimulationState
(),
"confirmed"
)
self
.
assertEqual
(
first_invoice
.
getStartDate
(),
DateTime
(
'2021/03/19'
))
self
.
assertEqual
(
first_invoice
.
getStopDate
(),
DateTime
(
'2021/04/19'
))
...
...
@@ -139,6 +147,14 @@ class TestSlapOSAccountingScenario(TestSlapOSVirtualMasterScenarioMixin):
self
.
portal
.
portal_alarms
.
update_open_order_simulation
.
activeSense
()
self
.
tic
()
self
.
assertTrue
(
owner_person
.
Entity_hasOutstandingAmount
())
amount_list
=
owner_person
.
Entity_getOutstandingAmountList
()
self
.
assertEquals
(
len
(
amount_list
),
1
)
self
.
assertEquals
(
amount_list
[
0
].
total_price
,
175.584
)
self
.
assertTrue
(
owner_person
.
Entity_hasOutstandingAmount
(
include_planned
=
False
))
amount_list
=
owner_person
.
Entity_getOutstandingAmountList
(
include_planned
=
False
)
self
.
assertEquals
(
len
(
amount_list
),
1
)
self
.
assertEquals
(
amount_list
[
0
].
total_price
,
125.184
)
self
.
assertEqual
(
first_invoice
.
getSimulationState
(),
"stopped"
)
# Ensure no unexpected object has been created
# 1 open order
...
...
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