deisy před 5 roky
revize
7a37b2ebb3

+ 2 - 0
__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import models

+ 14 - 0
__openerp__.py

@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+{
+    'name': 'Calendario de Cumpleaños',
+    'version': '8.0.0.1',
+    'category': 'CRM',
+    'summary': 'Calendario de Cumpleaños',
+    'author': 'Eiru Software',
+    'depends': ['base','partner_extra_data_basic'],
+    'data': [
+        'template.xml',
+        'views/birthday_calendar.xml'
+        ],
+    'installable':True,
+}

+ 2 - 0
models/__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+import res_partner_birthday

+ 107 - 0
models/res_partner_birthday.py

@@ -0,0 +1,107 @@
+# -*- encoding: utf-8 -*-
+from openerp import models, fields, api, _
+from openerp.exceptions import Warning
+from pytz import timezone
+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
+from datetime import datetime,timedelta
+from dateutil.relativedelta import relativedelta
+from openerp.tools import openerp
+import base64
+
+
+DATE_FORMAT = '%Y-%m-%d'
+
+class res_partner_birthday(models.Model):
+    _name = 'res.partner.birthday'
+
+    partner_id = fields.Many2one('res.partner', string="Socio", ondelete="cascade")
+    partner_name = fields.Char(related='partner_id.name', store=True, string="Nombre")
+    partner_birthday = fields.Date(related='partner_id.fecha_nac',store=True, string="Fecha Nac")
+    partner_picture = fields.Binary(related='partner_id.image_medium')
+    partner_year = fields.Integer(string="Edad")
+    partner_year_string = fields.Char(string="Mensaje")
+    birthday_date = fields.Date('Cumpleaños')
+
+
+    @api.model
+    def _get_default_image2(self):
+        image = open(openerp.modules.get_module_resource('birthday_calendar', 'static/src/img', 'globo1.png'),'rb')
+        return base64.b64encode(image.read())
+
+    photo = fields.Binary(string="Imagen", default=_get_default_image2)
+
+    @api.multi
+    def send_whatsapp_msg(self):
+        company = self.env.user.company_id
+        if self.partner_id.mobile:
+            mensaje = "Feliz cumpleaños.! Que tengas un hermoso día. Te deseamos desde " + str(company.name)
+            mensaje_no_space = "%20".join(mensaje.split())
+            url = "https://api.whatsapp.com/send?phone=" + str(self.partner_id.mobile) + "&text=" + mensaje_no_space
+            return {'type': 'ir.actions.act_url', 'url': url, 'target': 'new'}
+        else:
+            raise Warning(_("No existe teléfono móvil definido"))
+
+
+class res_partner(models.Model):
+    _inherit = 'res.partner'
+
+    birthday_dates = fields.One2many('res.partner.birthday', 'partner_id', string="Fechas")
+
+    @api.model
+    def create(self, vals):
+        ctx = dict(self._context or {})
+        partner_id = super(res_partner, self.with_context(ctx)).create(vals)
+        if partner_id.fecha_nac:
+            fecha_nac2 = datetime.strptime(partner_id.fecha_nac, DATE_FORMAT)
+            for i in range(100):
+                dates = {}
+                birthday_date = fecha_nac2+relativedelta(years=i)
+                dates = {
+                    'partner_id': partner_id.id,
+                    'birthday_date': birthday_date.strftime("%Y-%m-%d"),
+                    'partner_year': i,
+                    'partner_year_string':'Cumple '+str(i)+' años'
+                }
+                self.env['res.partner.birthday'].create(dates)
+        return partner_id
+
+    @api.multi
+    def write(self, vals):
+
+        if vals.get('fecha_nac') and self.fecha_nac and self.fecha_nac != vals.get('fecha_nac'):
+            ids = self.env['res.partner.birthday'].search([('partner_id','=',self.id)])
+            for id in ids:
+                self.env.cr.execute("DELETE FROM res_partner_birthday WHERE id= %s" % (id.id))
+
+            fecha_nac2 = datetime.strptime(vals['fecha_nac'], DATE_FORMAT)
+            for i in range(100):
+                dates = {}
+                birthday_date = fecha_nac2+relativedelta(years=i)
+                dates = {
+                    'partner_id': self.id,
+                    'birthday_date': birthday_date.strftime("%Y-%m-%d"),
+                    'partner_year': i,
+                    'partner_year_string':'Cumple '+str(i)+' años'
+                }
+                self.env['res.partner.birthday'].create(dates)
+
+        if vals.get('fecha_nac') and not self.fecha_nac:
+            fecha_nac2 = datetime.strptime(vals['fecha_nac'], DATE_FORMAT)
+            for i in range(100):
+                dates = {}
+                birthday_date = fecha_nac2+relativedelta(years=i)
+                dates = {
+                    'partner_id': self.id,
+                    'birthday_date': birthday_date.strftime("%Y-%m-%d"),
+                    'partner_year': i,
+                    'partner_year_string':'Cumple '+str(i)+' años'
+                }
+                self.env['res.partner.birthday'].create(dates)
+
+        if self.fecha_nac and vals.get('fecha_nac') == False:
+            ids = self.env['res.partner.birthday'].search([('partner_id','=',self.id)])
+            for id in ids:
+                self.env.cr.execute("DELETE FROM res_partner_birthday WHERE id= %s" % (id.id))
+
+        update = super(res_partner, self).write(vals)
+        return update

binární
static/description/icon.png


binární
static/src/img/globo1.png


+ 18 - 0
static/src/js/birthday_calendar.js

@@ -0,0 +1,18 @@
+openerp.birthday_calendar = function (instance) {
+
+"use strict";
+
+instance.widgetInstance = null;
+instance.parentInstance = {};
+var QWeb = openerp.web.qweb;
+
+instance.web_calendar.CalendarView = instance.web_calendar.CalendarView.extend({
+  open_quick_create: function (data_template) {
+    var self = this;
+
+    if (self.dataset.model != 'res.partner.birthday') {
+      self._super.apply(self, arguments);
+    }
+  },
+ });
+};

+ 9 - 0
template.xml

@@ -0,0 +1,9 @@
+<openerp>
+    <data>
+        <template id="birthday_calendar.eiru_assets" name="birthday_calendar_eiru_assets" inherit_id="eiru_assets.assets">
+            <xpath expr="." position="inside">
+                <script type="text/javascript" src="/birthday_calendar/static/src/js/birthday_calendar.js"/>
+            </xpath>
+        </template>
+    </data>
+</openerp>

+ 114 - 0
views/birthday_calendar.xml

@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+    <record id="calendar_birthday_search_view" model="ir.ui.view">
+      <field name="name">calendar_birthday_search_view</field>
+      <field name="model">res.partner.birthday</field>
+      <field name="arch" type="xml">
+        <search>
+          <field name="partner_id" string="Socio"/>
+          <field name="birthday_date" string="Fecha"/>
+          <filter string="Mes pasado" domain="[('birthday_date','&gt;=',(context_today()-relativedelta(months=1)).strftime('%%Y-%%m-01')),('birthday_date','&lt;',time.strftime('%%Y-%%m-01'))]"/>
+          <filter string="Mes actual" domain="[('birthday_date','&lt;',(context_today()+relativedelta(months=1)).strftime('%%Y-%%m-01')), ('birthday_date','&gt;=',time.strftime('%%Y-%%m-01'))]"/>
+          <filter string="Mes siguiente" domain="[('birthday_date','&gt;=', (context_today()+relativedelta(months=1)).strftime('%%Y-%%m-01')),('birthday_date','&lt;=',(context_today()+relativedelta(months=2)).strftime('%%Y-%%m-01'))]"/>
+          <filter string="Este año" name="this_year" domain="[('birthday_date','&lt;',(context_today()+relativedelta(years=1)).strftime('%%Y-01-01')), ('birthday_date','&gt;=',time.strftime('%%Y-01-01'))]"/>
+          <group expand="0" string="Agrupar por:">
+            <filter name="group_by_customer" string="Socio" context="{'group_by':'partner_id'}"/>
+            <filter string="Mes" context="{'group_by':'birthday_date:month'}" help="Mes Creado"/>
+            <filter string="Dia" context="{'group_by':'birthday_date:day'}" help="Dia Creado"/>
+          </group>
+        </search>
+      </field>
+    </record>
+
+    <record id="birthday_calendar_form_view" model="ir.ui.view">
+        <field name="name">birthday_calendar_form_view</field>
+        <field name="model">res.partner.birthday</field>
+        <field name="type">form</field>
+        <field name="target">inline</field>
+        <field name="flags">{'form': {'action_buttons': False}}</field>
+        <field name="arch" type="xml">
+            <form create="false" edit="false" delete="false">
+              <script>
+                  $(document).ready(function(){
+                    $(".modal-footer").hide();
+                  });
+              </script>
+              <div class="row" style="margin-bottom:20px;">
+                <div class="col-md-3" style="text-align:center;">
+                  <field name="partner_picture" widget="image"/>
+                </div>
+                <div class="col-md-6" style="text-align:center; font-size:large">
+                  <group>
+                    <field name="partner_id"/>
+                    <field name="partner_birthday" string="Fecha de nacimiento"/>
+                    <field name="partner_year_string"/>
+                    <button name="send_whatsapp_msg" type="object" class="oe_highlight" string="Enviar whatsapp"/>
+                  </group>
+                </div>
+                <div class="col-md-3" style="text-align:center;">
+                  <field name="photo" widget="image"/>
+                </div>
+              </div>
+            </form>
+        </field>
+    </record>
+
+
+    <record id="birthday_calendar" model="ir.ui.view">
+      <field name="name">Calendario de Cumpleaños</field>
+      <field name="model">res.partner.birthday</field>
+      <field name="type">calendar</field>
+      <field name="arch" type="xml">
+
+        <calendar  color="partner_id" quick_add="false" date_start="birthday_date" date_stop="birthday_date" string="Cumpleaños" avatar_model="res.partner" event_open_popup="%(birthday_calendar.birthday_calendar_form_view)s">
+          <field name="partner_id"/>
+          <field name="partner_year_string"/>
+        </calendar>
+
+      </field>
+    </record>
+
+
+  <record id="birthday_calendar_tree_view" model="ir.ui.view">
+        <field name="name">birthday_calendar_tree_view</field>
+        <field name="model">res.partner.birthday</field>
+        <field name="type">tree</field>
+        <field name="arch" type="xml">
+            <tree create="false">
+              <field name="partner_id"/>
+              <field name="birthday_date"/>
+              <field name="partner_year_string"/>
+            </tree>
+        </field>
+    </record>
+
+   <record id="action_birthday_calendar" model="ir.actions.act_window">
+     <field name="name">Calendario de Cumpleaños</field>
+     <field name="res_model">res.partner.birthday</field>
+     <field name="view_mode">calendar</field>
+     <field name="context">{'search_default_this_year':1}</field>
+     <field name="help" type="html">
+       <p class="oe_view_nocontent_create">
+       </p>
+     </field>
+   </record>
+
+   <record model="ir.actions.act_window.view" id="action_view_birthday_calendar">
+     <field name="sequence" eval="2"/>
+     <field name="view_mode">calendar</field>
+     <field name="view_id" ref="birthday_calendar"/>
+     <field name="act_window_id" ref="action_birthday_calendar"/>
+   </record>
+
+   <record model="ir.actions.act_window.view" id="action_view_birthday_tree">
+     <field name="sequence" eval="3"/>
+     <field name="view_mode">tree</field>
+     <field name="view_id" ref="birthday_calendar_tree_view"/>
+     <field name="act_window_id" ref="action_birthday_calendar"/>
+   </record>
+
+   <menuitem name="Calendario de Cumpleaños" id="menu_birthday_calendar" parent="base.menu_sales" action="birthday_calendar.action_birthday_calendar"/>
+
+  </data>
+</openerp>