[VIEW] -hide procurement buttons on membership products. This feature is added to...
[burette/remembership.git] / remembership.py
index 9a5f6c2..e424e03 100644 (file)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    Remembership module for OpenERP, Overload membership module
-#    Copyright (C) 2012-2013 L'Heureux Cyclage (<http://www.heureux-cyclage.org>)
+#    Remembership module for OpenERP, Membership module enhancement and bug fixes
+#    Copyright (C) 2012-2018 L'Heureux Cyclage (<http://www.heureux-cyclage.org>)
 #
 #    This file is a part of Remembership
 #
@@ -28,10 +28,9 @@ from datetime import datetime, date
 from dateutil.relativedelta import relativedelta
 from openerp.tools.translate import _
 
-
 class Partner(osv.osv):
     _inherit = 'res.partner'
-    
+
     # XXX: copied from openerp/addons/membership/membership.py
     def _membership_date(self, cr, uid, ids, name, args, context=None):
         """Return  date of membership"""
@@ -52,7 +51,7 @@ class Partner(osv.osv):
                  'membership_cancel': False
             }
             if name == 'membership_start':
-                line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('date_cancel','=',False)],
+                line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('state','!=','canceled')],
                             limit=1, order='date_from', context=context)
                 if line_id:
                     res[partner.id]['membership_start'] = member_line_obj.read(cr, uid, line_id[0],
@@ -61,9 +60,9 @@ class Partner(osv.osv):
                         print ("DEV: [_membership_date] [associate] date_from: %s" % str(res[partner.id]['membership_start']))
                     else:
                         print ("DEV: [_membership_date] date_from: %s" % str(res[partner.id]['membership_start']))
-            
+
             if name == 'membership_stop':
-                line_id1 = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('date_cancel','=',False)],
+                line_id1 = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('state','!=','canceled')],
                             limit=1, order='date_to desc', context=context)
                 if line_id1:
                     res[partner.id]['membership_stop'] = member_line_obj.read(cr, uid, line_id1[0],
@@ -72,7 +71,7 @@ class Partner(osv.osv):
                         print ("DEV: [_membership_date] [associate] date_to: %s" % str(res[partner.id]['membership_stop']))
                     else:
                         print ("DEV: [_membership_date] date_to: %s" % str(res[partner.id]['membership_stop']))
-            
+
             if name == 'membership_cancel':
                 if partner.membership_state == 'canceled':
                     line_id2 = member_line_obj.search(cr, uid, [('partner', '=', partner.id)], limit=1, order='date_cancel', context=context)
@@ -105,7 +104,7 @@ class Partner(osv.osv):
             ids2 = res_obj.search(cr, uid, [('associate_member', 'in', ids2)], context=context)
             list_partner += ids2
         return list_partner
-    
+
     _columns = {
         'member_ident': fields.char('Member identifier', size=64),
         'associate_members': fields.one2many('res.partner', 'associate_member', 'Associate members', help='Members who are associated to this partner.'),
@@ -137,11 +136,11 @@ class Partner(osv.osv):
                         'res.partner': (lambda self, cr, uid, ids, c={}: ids, ['free_member'], 10)
                     }, help="Date on which membership has been cancelled"),
     }
-    
+
     _sql_constraints = [
         ('member_ident_uniq', 'unique(member_ident, company_id)', 'The member identifier must be unique !'),
     ]
-    
+
     def create_membership_invoice(self, cr, uid, ids, product_id=None, datas=None, context=None):
         # NOTE: use context to supply date_from to account_invoice_line.create
         context = context and context.copy() or {}
@@ -171,7 +170,7 @@ class Partner(osv.osv):
             line_value =  {
                 'product_id': product_id,
             }
-            
+
             print ("DEV: [remembership] [partner] [create_membership_invoice] ids=%s partner=%s [invoice_line_obj] [product_id_change]" % (str(ids),str(partner.id)))
             line_dict = invoice_line_obj.product_id_change(cr, uid, {},
                             product_id, False, quantity, '', 'out_invoice', partner.id, fpos_id, price_unit=amount, context=context)
@@ -180,7 +179,7 @@ class Partner(osv.osv):
             if line_value.get('invoice_line_tax_id', False):
                 tax_tab = [(6, 0, line_value['invoice_line_tax_id'])]
                 line_value['invoice_line_tax_id'] = tax_tab
-            
+
             print ("DEV: [remembership] [partner] [create_membership_invoice] ids=%s partner=%s [invoice_obj] [create] account=%s" % (str(ids),str(partner.id),str(account_id)))
             # NOTE: let account_invoice_obj.create() call account_invoice_line.create()
             #       to have a correct membership_state: becauce now fields.function 'store' watchdogs
@@ -209,12 +208,19 @@ class Partner(osv.osv):
         print ("DEV: [remembership] [partner] [create_membership_invoice] return=%s" % str(invoice_list))
         return invoice_list
 
+    def update_membership_status(self, cr, uid):
+        """Action for updating old members status with scheduled cron job"""
+        partner_obj = self.pool.get('res.partner')
+        today = date.today()
+        ids = partner_obj.search(cr, uid, [('membership_state', '=', 'paid'), ('membership_stop', '<', today)], context=None)
+        self.write(cr, uid, ids, {'membership_state': 'old'}, context=None)
+
 Partner()
 
 
 class Product(osv.osv):
     _inherit = 'product.product'
-    
+
     _columns = {
         'membership_grouped': fields.boolean('Grouped membership product', help='Check if it\'s a grouped membership product.'),
         'membership_date2date': fields.boolean('Date to date membership product', required=False, help='Check if it\'s a date to date membership product.'),
@@ -225,7 +231,7 @@ Product()
 
 class account_invoice_line(osv.osv):
     _inherit = 'account.invoice.line'
-    
+
     def write(self, cr, uid, ids, vals, context=None):
         member_line_obj = self.pool.get('membership.membership_line')
         res = super(account_invoice_line, self).write(cr, uid, ids, vals, context=context)
@@ -247,7 +253,7 @@ class account_invoice_line(osv.osv):
                               and context.get('date_from')
                               and datetime.strptime(context('date_from'), "%Y-%m-%d")
                               or date.today())
-                            date_to   = date_from + relativedelta(months = +12) # TODO: parameterize this delta?
+                            date_to   = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta?
                             date_from = date_from.strftime("%Y-%m-%d")
                             date_to   = date_to  .strftime("%Y-%m-%d")
                         print ("DEV: [remembership] [account_invoice_line] [write] date_from: %s" % str(date_from))
@@ -297,13 +303,13 @@ class account_invoice_line(osv.osv):
                     member_line_obj.unlink(cr, uid, ml_ids, context=context)
         print ("DEV: [remembership] [account_invoice_line] [write] : return=%s" % str(res))
         return res
-    
+
     def create(self, cr, uid, vals, context=None):
         member_line_obj = self.pool.get('membership.membership_line')
         res = super(account_invoice_line, self).create(cr, uid, vals, context=context)
         print ("DEV: [remembership] [account_invoice_line] [create] : begin res=%s" % str(res))
         line = self.browse(cr, uid, res, context=context)
-    
+
         if line.invoice_id.type == 'out_invoice' and line.product_id and line.product_id.membership:
             member_line_id = member_line_obj.search(cr, uid
               , [('partner'             , '=', line.invoice_id.partner_id.id)
@@ -319,7 +325,8 @@ class account_invoice_line(osv.osv):
                       and context.get('date_from')
                       and datetime.strptime(context.get('date_from'), "%Y-%m-%d")
                       or date.today())
-                    date_to   = date_from + relativedelta(days = +364) # TODO: parameterize this delta?
+                    print("#DEBUG: Date de début - %s" % str(date_from))
+                    date_to   = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta?
                     date_from = date_from.strftime("%Y-%m-%d")
                     date_to   = date_to  .strftime("%Y-%m-%d")
                 print ("DEV: [remembership] [account_invoice_line] [create] date_from: %s" % str(date_from))