Skip to content

Commit

Permalink
Merge pull request #34 from Som-Energia/ADD_archive_soci_mailchimp
Browse files Browse the repository at this point in the history
Arxiva els emails de les sòcies d'una llista de Mailchimp
  • Loading branch information
MarJene committed Aug 26, 2020
2 parents 9cef496 + 0eedbc0 commit 1be3eb7
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 5 deletions.
3 changes: 2 additions & 1 deletion som_generationkwh/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
https://github.com/mailchimp/mailchimp-marketing-python/archive/master.zip
# libfacturacioatr
numpy
yamlns
plantmeter
python-dateutil
freezegun
freezegun
34 changes: 34 additions & 0 deletions som_generationkwh/somenergia_soci.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

from osv import osv, fields
from tools.translate import _
from tools import config
from oorq.decorators import job

from datetime import datetime, date

Expand Down Expand Up @@ -128,6 +130,36 @@ def poweremail_write_callback(self, cursor, uid, ids, vals, context=None):

return True

@job(queue="mailchimp_tasks")
def arxiva_socia_mailchimp_async(self, cursor, uid, ids, context=None):
"""
Archive member async method
"""
return self.arxiva_socia_mailchimp(cursor, uid, ids, context=context)


def arxiva_socia_mailchimp(self, cursor, uid, ids, context=None):
import mailchimp_marketing as MailchimpMarketing
if not isinstance(ids, (list, tuple)):
ids = [ids]
MAILCHIMP_CLIENT = MailchimpMarketing.Client(
dict(api_key=config.options.get('mailchimp_apikey'),
server=config.options.get('mailchimp_server_prefix')
))

conf_obj = self.pool.get('res.config')
res_partner_obj = self.pool.get('res.partner')
res_partner_address_obj = self.pool.get('res.partner.address')

list_name = conf_obj.get(
cursor, uid, 'mailchimp_socis_list', None)

list_id = res_partner_address_obj.get_mailchimp_list_id(list_name, MAILCHIMP_CLIENT)
for partner_id in self.read(cursor, uid, ids,['partner_id']):
address_list = res_partner_obj.read(cursor, uid, partner_id['partner_id'][0], ['address'])['address']
res_partner_address_obj.archieve_mail_in_list(cursor, uid, address_list, list_id, MAILCHIMP_CLIENT)


def verifica_baixa_soci(self, cursor, uid, ids, context=None):
# - Comprovar si té generationkwh: Existeix atribut al model generation que ho indica. Altrament es poden buscar les inversions.
# - Comprovar si té inversions vigents: Buscar inversions vigents.
Expand Down Expand Up @@ -204,6 +236,8 @@ def delete_rel(cursor, uid, categ_id, res_partner_id):
'comment': comment })
delete_rel(cursor, uid, soci_category_id, res_partner_id)

self.arxiva_socia_mailchimp_async(cursor, uid, member_id)

return True


Expand Down
7 changes: 6 additions & 1 deletion som_generationkwh/somenergia_soci_data.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<openerp>
<data>
<data noupdate="1">
<record model="generationkwh.kwh.per.share" id="gkwh_kwh_per_share_20160301">
<field name="version_start_date">2016-03-01</field>
<field name="kwh">170</field>
Expand Down Expand Up @@ -90,5 +90,10 @@ ${text_legal}
]]></field>
</record>

<record model="res.config" id="mailchimp_socis_list">
<field name="name">mailchimp_socis_list</field>
<field name="value">Soci/a de Som Energia</field>
<field name="description">Nom exacte de la llista de mailchimp on es subscriuen o arxiven automàticament les sòcies en donar-se d'alta o baixa respectivament.</field>
</record>
</data>
</openerp>
55 changes: 54 additions & 1 deletion som_generationkwh/tests/somenergia_soci_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
from osv import osv, fields
from osv.orm import ValidateException
from osv.osv import except_osv
import mock
import som_polissa_soci
import mailchimp_marketing

class SomenergiaSociTests(testing.OOTestCase):

Expand All @@ -17,6 +20,7 @@ def setUp(self):
self.Investment = self.openerp.pool.get('generationkwh.investment')
self.IrModelData = self.openerp.pool.get('ir.model.data')
self.ResPartner = self.openerp.pool.get('res.partner')
self.ResPartnerAddress = self.openerp.pool.get('res.partner.address')
self.Invoice = self.openerp.pool.get('account.invoice')
self.Factura = self.openerp.pool.get('giscedata.facturacio.factura')
self.Polissa = self.openerp.pool.get('giscedata.polissa')
Expand Down Expand Up @@ -109,5 +113,54 @@ def test_cancel_member_with_active_contract__notAllowed(self):
"warning -- El soci no pot ser donat de baixa!\n\nEl soci té al menys un contracte actiu.")



@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.archieve_mail_in_list")
@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.get_mailchimp_list_id")
@mock.patch.object(mailchimp_marketing, "Client")
def test__arxiva_socia_mailchimp__withAddress(self, mock_mailchimp_client, mock_get_list_id, mock_archieve):
soci_id = self.IrModelData.get_object_reference(
self.cursor, self.uid, 'som_generationkwh', 'soci_0001'
)[1]
partner_id = self.Soci.read(self.cursor, self.uid, soci_id, ['partner_id'])['partner_id'][0]
address_list = self.ResPartner.read(self.cursor, self.uid, partner_id, ['address'])['address']

self.Soci.arxiva_socia_mailchimp(self.cursor, self.uid, soci_id)

mock_get_list_id.return_value.get_mailchimp_list_id.return_value = 'id'
mock_mailchimp_client.return_value = 'MAILCHIMP_CLIENT'
mock_archieve.assert_called_with(self.cursor, self.uid, address_list, mock.ANY, mock.ANY)

@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.archieve_mail_in_list")
@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.get_mailchimp_list_id")
@mock.patch.object(mailchimp_marketing, "Client")
def test__arxiva_socia_mailchimp__withManyAddress(self, mock_mailchimp_client, mock_get_list_id, mock_archieve):
soci_id = self.IrModelData.get_object_reference(
self.cursor, self.uid, 'som_generationkwh', 'soci_0001'
)[1]
partner_id = self.Soci.read(self.cursor, self.uid, soci_id, ['partner_id'])['partner_id'][0]
address_list = self.ResPartner.read(self.cursor, self.uid, partner_id, ['address'])['address']
other_address_id = self.ResPartnerAddress.search(self.cursor, self.uid, [('partner_id', '!=', partner_id)])[0]
self.ResPartnerAddress.write(self.cursor, self.uid, other_address_id, {'partner_id': partner_id, 'email':'other@mail.com'})
self.Soci.arxiva_socia_mailchimp(self.cursor, self.uid, soci_id)

mock_get_list_id.return_value.get_mailchimp_list_id.return_value = 'id'
mock_mailchimp_client.return_value = 'MAILCHIMP_CLIENT'
address_list.append(other_address_id)
mock_archieve.assert_called_with(self.cursor, self.uid, sorted(address_list), mock.ANY, mock.ANY)

@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.archieve_mail_in_list")
@mock.patch("som_polissa_soci.res_partner_address.ResPartnerAddress.get_mailchimp_list_id")
@mock.patch.object(mailchimp_marketing, "Client")
def test__arxiva_socia_mailchimp__withoutMail(self, mock_mailchimp_client, mock_get_list_id, mock_archieve):
#agafem un soci que no té email
soci_id = self.IrModelData.get_object_reference(
self.cursor, self.uid, 'som_generationkwh', 'soci_0003'
)[1]
partner_id = self.Soci.read(self.cursor, self.uid, soci_id, ['partner_id'])['partner_id'][0]
address_list = self.ResPartner.read(self.cursor, self.uid, partner_id, ['address'])['address']

self.Soci.arxiva_socia_mailchimp(self.cursor, self.uid, soci_id)

mock_get_list_id.return_value.get_mailchimp_list_id.return_value = 'id'
mock_mailchimp_client.return_value = 'MAILCHIMP_CLIENT'
mock_archieve.assert_called_with(self.cursor, self.uid, address_list, mock.ANY, mock.ANY)

8 changes: 6 additions & 2 deletions som_generationkwh/tests/test_wizard_baixa_soci.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ def setUp(self):
def tearDown(self):
self.txn.stop()

def test__baixa_soci__allowed(self):
@mock.patch("som_generationkwh.somenergia_soci.SomenergiaSoci.arxiva_socia_mailchimp_async")
def test__baixa_soci__allowed(self, mailchimp_mock):
member_id = self.IrModelData.get_object_reference(
self.cursor, self.uid, 'som_generationkwh', 'soci_0003'
)[1]
Expand All @@ -33,6 +34,7 @@ def test__baixa_soci__allowed(self):

baixa = self.Soci.read(self.cursor, self.uid, member_id, ['baixa'])['baixa']
self.assertTrue(baixa)
mailchimp_mock.assert_called_with(self.cursor, self.uid, member_id)

def test__baixa_soci__notAllowed(self):
member_id = self.IrModelData.get_object_reference(
Expand All @@ -47,8 +49,9 @@ def test__baixa_soci__notAllowed(self):
baixa = self.Soci.read(self.cursor, self.uid, member_id, ['baixa'])['baixa']
self.assertFalse(baixa)

@mock.patch("som_generationkwh.somenergia_soci.SomenergiaSoci.arxiva_socia_mailchimp_async")
@mock.patch("poweremail.poweremail_send_wizard.poweremail_send_wizard.send_mail")
def test__baixa_soci_and_send_mail__allowed(self, mocked_send_mail):
def test__baixa_soci_and_send_mail__allowed(self, mocked_send_mail, mailchimp_mock):
member_id = self.IrModelData.get_object_reference(
self.cursor, self.uid, 'som_generationkwh', 'soci_0003'
)[1]
Expand Down Expand Up @@ -79,6 +82,7 @@ def test__baixa_soci_and_send_mail__allowed(self, mocked_send_mail):
}

mocked_send_mail.assert_called_with(self.cursor, self.uid, mock.ANY, expected_ctx)
mailchimp_mock.assert_called_with(self.cursor, self.uid, member_id)

@mock.patch("poweremail.poweremail_send_wizard.poweremail_send_wizard.send_mail")
def test__baixa_soci_and_send_mail__notAllowed(self, mocked_send_mail):
Expand Down

0 comments on commit 1be3eb7

Please sign in to comment.