Skip to content

Commit

Permalink
FIX side effects of Aportacions in scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
oriolpiera committed Mar 5, 2020
1 parent 6bbf0d3 commit d6a9052
Show file tree
Hide file tree
Showing 4 changed files with 245 additions and 10 deletions.
30 changes: 22 additions & 8 deletions som_generationkwh/investment.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ def list(self, cursor, uid,
return contracts

def effective_investments_tuple(self, cursor, uid,
member=None, start=None, end=None,
member=None, start=None, end=None, emission_type=None, emission_code=None,
context=None):
"""
List active investments between start and end, both included,
Expand All @@ -198,7 +198,18 @@ def effective_investments_tuple(self, cursor, uid,
If neither start or end are specified all investments are listed
active or not.
"""
filters = []
Emission = self.pool.get('generationkwh.emission')
emission_filters = []
if emission_type is None:
emission_filters = [('type', '=', 'genkwh')]
else:
emission_filters = [('type', '=', emission_type)]
if emission_code:
emission_filters = emission_filters + [('code', '=', emission_code)]
emission_ids = Emission.search(cursor, uid, emission_filters)

filters = [('emission_id', 'in', emission_ids)]

if member: filters.append( ('member_id','=',member) )
if end: filters += [
('first_effective_date','<=',end), # No activation also filtered
Expand Down Expand Up @@ -233,7 +244,7 @@ def membertopartner(member_id):
]

def effective_investments(self, cursor, uid,
member, start, end,
member, start, end, emission_code=None,
context=None):

return [
Expand All @@ -244,15 +255,15 @@ def effective_investments(self, cursor, uid,
shares=shares,
)
for member, first, last, shares
in self.effective_investments_tuple(cursor, uid, member, start, end, context)
in self.effective_investments_tuple(cursor, uid, member, start, end, emission_code, context)
]

def member_has_effective(self, cursor, uid,
member_id, first_date, last_date,
member_id, first_date, last_date, emission_type=None, emission_code=None,
context=None):

return len(self.effective_investments_tuple(cursor, uid,
member_id, first_date, last_date, context))>0
member_id, first_date, last_date, emission_type, emission_code, context))>0

def _effectivePeriod(self, purchaseDate, waitingDays, expirationYears):
if waitingDays is None:
Expand Down Expand Up @@ -601,6 +612,9 @@ def get_dayshares_investmentyear(self, cursor, uid, inv_obj, start_date, end_dat
return dayShares if dayShares > 0 else 0

def get_total_saving_partner(self, cursor, uid, partner_id, start_date, end_date):
"""
:param partner_id: In this function, partner_id is the partner of Investment, not the Parnter of Invoice.
"""
GenerationkwhInvoiceLineOwner = self.pool.get('generationkwh.invoice.line.owner')
total_amount_saving = 0
gffl_added = set()
Expand Down Expand Up @@ -1972,10 +1986,10 @@ def items(self, member=None, start=None, end=None):
return Investment.effective_investments( self.cursor, self.uid,
member, start, end, self.context)

def effectiveForMember(self, member, first_date, last_date):
def effectiveForMember(self, member, first_date, last_date, emission_code=None):
Investment = self.erp.pool.get('generationkwh.investment')
return Investment.member_has_effective(self.cursor, self.uid,
member, first_date, last_date, self.context)
member, first_date, last_date, emission_code, self.context)


GenerationkwhInvestment()
Expand Down
1 change: 1 addition & 0 deletions som_generationkwh/som_generationkwh_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1495,6 +1495,7 @@ ${text_legal}
<field name="amount_emission">0</field>
<field name="state">draft</field>
<field name="type">genkwh</field>
<field name="code">GKWH</field>
<field name="grace_period">2</field>
<field name="expiration_years">25</field>
<field name="waiting_days">365</field>
Expand Down
87 changes: 85 additions & 2 deletions som_generationkwh/tests/generation_data_demo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
search="[('default_code','=','APO_AE')]" />
<field name="investment_payment_mode_id" model="payment.mode"
search="[('name','=','APORTACIONS (Enginyers)')]" />
<field name="bridge_account_payments_id" model="account.account"
search="[('code','=','555000000010')]" />
<field name="bridge_account_payments_id" ref="pgc_555000000011" />
</record>

<!-- Partner -->
<record id="res_partner_inversor1" model="res.partner">
<field name="name">Gil, Pere</field>
Expand All @@ -73,6 +73,8 @@
<field name="partner_id" ref="res_partner_inversor1"/>
<field name="baixa">False</field>
</record>

<!-- Clienta no sòcia -->
<record id="res_partner_noinversor1" model="res.partner">
<field name="name">Puig, Anna</field>
</record>
Expand All @@ -86,6 +88,8 @@
<field name="type">default</field>
<field name="partner_id" ref="res_partner_noinversor1"/>
</record>

<!-- Sòcia no inversora -->
<record id="res_partner_noinversor2" model="res.partner">
<field name="name">Lovelace, Ada</field>
<field name="ref">S202003</field>
Expand All @@ -105,6 +109,8 @@
<field name="partner_id" ref="res_partner_noinversor2"/>
<field name="baixa">False</field>
</record>

<!-- Sòcia inversora 2 -->
<record id="res_partner_inversor2" model="res.partner">
<field name="name">Associació Morera Montsant</field>
<field name="ref">S202002</field>
Expand All @@ -130,6 +136,58 @@
<field name="baixa">False</field>
</record>

<!-- Sòcia inversora de només aportacions -->
<record id="res_partner_aportacions" model="res.partner">
<field name="name">Alina Aníssimova</field>
<field name="ref">S202003</field>
<field name="vat">ES16405474B</field>
</record>
<record id="res_partner_address_aportacions" model="res.partner.address">
<field name="city">Deltebre</field>
<field name="name">Esperança, 8</field>
<field name="zip">43580</field>
<field name="title">Ms.</field>
<field name="country_id" model="res.country" search="[('name','=','Espanya')]"/>
<field name="street">Esperança, 8</field>
<field name="type">default</field>
<field name="partner_id" ref="res_partner_aportacions"/>
</record>
<record model="res.partner.bank" id="partner_bank_aportacions">
<field name="iban">ES3701517119600211219240</field>
<field name="state">iban</field>
<field name="partner_id" ref="res_partner_aportacions"></field>
</record>
<record id="soci_aportacions" model="somenergia.soci">
<field name="partner_id" ref="res_partner_aportacions"/>
<field name="baixa">False</field>
</record>

<!-- Sòcia inversora de només generationkwh -->
<record id="res_partner_generation" model="res.partner">
<field name="name">Kathleen McNulty Mauchly Antonelli</field>
<field name="ref">S202004</field>
<field name="vat">ES93646384K</field>
</record>
<record id="res_partner_address_generation" model="res.partner.address">
<field name="city">Arbeca</field>
<field name="name">Carrer de Lleida, 32</field>
<field name="zip">25140</field>
<field name="title">Ms.</field>
<field name="country_id" model="res.country" search="[('name','=','Espanya')]"/>
<field name="street">Carrer de Lleida, 32</field>
<field name="type">default</field>
<field name="partner_id" ref="res_partner_generation"/>
</record>
<record model="res.partner.bank" id="partner_bank_generation">
<field name="iban">ES3502243156350965980326</field>
<field name="state">iban</field>
<field name="partner_id" ref="res_partner_aportacions"></field>
</record>
<record id="soci_generation" model="somenergia.soci">
<field name="partner_id" ref="res_partner_generation"/>
<field name="baixa">False</field>
</record>

<!--Inversions-->
<record id="genkwh_0001" model="generationkwh.investment">
<field name="name">GKWH00001</field>
Expand All @@ -153,6 +211,20 @@
<field name="last_effective_date">2044-10-12</field>
<field name="emission_id" ref='emissio_genkwh' />
</record>
<record id="genkwh_0003" model="generationkwh.investment">
<field name="name">GKWH00003</field>
<field name="nshares">5</field>
<field name="member_id" ref="soci_generation"/>
<field name="active">True</field>
<field name="draft">False</field>
<field name="amortized_amount">0</field>
<field name="order_date">2019-11-01</field>
<field name="signed_date">2019-11-02</field>
<field name="purchase_date">2019-11-12</field>
<field name="first_effective_date">2020-11-12</field>
<field name="last_effective_date">2044-11-12</field>
<field name="emission_id" ref='emissio_genkwh' />
</record>
<record id="apo_0001" model="generationkwh.investment">
<field name="name">APO00001</field>
<field name="nshares">10</field>
Expand All @@ -170,6 +242,17 @@
<field name="order_date">2020-06-01</field>
<field name="emission_id" ref='emissio_apo2' />
</record>
<record id="apo_0003" model="generationkwh.investment">
<field name="name">APO00003</field>
<field name="nshares">10</field>
<field name="member_id" ref="soci_aportacions"/>
<field name="active">True</field>
<field name="order_date">2020-03-04</field>
<field name="purchase_date">2020-03-12</field>
<field name="first_effective_date">2020-03-12</field>
<field name="draft">False</field>
<field name="emission_id" ref='emissio_apo' />
</record>
<record id="res_bank_1234" model="res.bank">
<field name="name">TestBank</field>
<field name="lname">TestBank</field>
Expand Down
137 changes: 137 additions & 0 deletions som_generationkwh/tests/investment_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1332,6 +1332,29 @@ def test__get_max_investment__withInvestments_inTemporaLimit(self):
)
self.assertEqual(amount, 0)

@freeze_time("2020-06-11")
def test__get_max_investment__withInvestments_overEmissionLimit(self):
with self.assertRaises(InvestmentException) as ctx:
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
partner_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'res_partner_inversor1'
)[1]
emission_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'emissio_apo2'
)[1]
self.Emission.write(cursor, uid, emission_id,
{'limited_period_amount': 1000,
'amount_emission': 4900,
'limited_period_end_date': '2020-06-10'})

amount = self.Investment.get_max_investment(cursor, uid,
partner_id, 'APO_202006'
)

self.assertEqual(str(ctx.exception),'Emission completed')

@freeze_time("2020-06-13")
def test__get_max_investment__withInvestments_outOfTemporaLimit(self):
with Transaction().start(self.database) as txn:
Expand Down Expand Up @@ -1559,4 +1582,118 @@ def test_mark_as_paid__allOk_GKWH(self):
'amortized_amount': 0.0,
'name': u'GKWH00001'
})

def test__effective_investments_tuple__allGKWH(self):
"""
Check effective investments tuple, only Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
inv_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'genkwh_0001'
)[1]

inv_tuple = self.Investment.effective_investments_tuple(cursor, uid)

self.assertEquals(inv_tuple, [(1, False, False, 10), (1, '2020-10-12', '2044-10-12', 10), (5, '2020-11-12', '2044-11-12', 5)])

def test__effective_investments_tuple__allAPO(self):
"""
Check effective investments tuple, only Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
inv_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'genkwh_0001'
)[1]

inv_tuple = self.Investment.effective_investments_tuple(cursor, uid, emission_type='apo')

self.assertEquals(set(inv_tuple), set([(1, False, False, 50), (1, False, False, 10), (4, '2020-03-12', False, 10)]))

def test__effective_investments_tuple__oneAPO(self):
"""
Check effective investments tuple, only Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
inv_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'genkwh_0001'
)[1]

inv_tuple = self.Investment.effective_investments_tuple(cursor, uid, emission_type='apo', emission_code='APO_202006')

self.assertEquals(inv_tuple, [(1, False, False, 50)])

def test__member_has_effective__onlyGKWH(self):
"""
Check if member has Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
member_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'soci_generation'
)[1]

has_effectives = self.Investment.member_has_effective(cursor, uid, member_id, '2010-01-01','2022-01-01')

self.assertTrue(has_effectives)

def test__member_has_effective__onlyAPO(self):
"""
Check if member has Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
member_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'soci_aportacions'
)[1]

has_effectives = self.Investment.member_has_effective(cursor, uid, member_id, '2010-01-01','2022-01-01', emission_type='apo')

self.assertTrue(has_effectives)

def test__member_has_effective__noGKWH(self):
"""
Check if member has Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
member_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'soci_aportacions'
)[1]

has_effectives = self.Investment.member_has_effective(cursor, uid, member_id, '2010-01-01','2022-01-01')

self.assertFalse(has_effectives)

def test__member_has_effective__noAPO(self):
"""
Check if member has Generation
:return:
"""
with Transaction().start(self.database) as txn:
cursor = txn.cursor
uid = txn.user
member_id = self.IrModelData.get_object_reference(
cursor, uid, 'som_generationkwh', 'soci_generation'
)[1]

has_effectives = self.Investment.member_has_effective(cursor, uid, member_id, '2010-01-01','2022-01-01', emission_type='apo')

self.assertFalse(has_effectives)


# vim: et ts=4 sw=4

0 comments on commit d6a9052

Please sign in to comment.