Launchpad automatic translations update.
[odoo/odoo.git] / addons / point_of_sale / report / pos_details.py
index cb3adcf..d13c127 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
-#    
+#
 #    OpenERP, Open Source Management Solution
 #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
 #
 #    GNU Affero General Public License for more details.
 #
 #    You should have received a copy of the GNU Affero General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 ##############################################################################
 
 import time
 from report import report_sxw
 
-
 class pos_details(report_sxw.rml_parse):
 
-    def _get_invoice(self,inv_id,user):
+    def _get_invoice(self,inv_id):
         res={}
-        self.cr.execute("select name from account_invoice as ac where id = %d" %(inv_id))
-        res = self.cr.fetchone()
-        if res:
-            return res[0]
+        if inv_id:
+            self.cr.execute("select number from account_invoice as ac where id = %s", (inv_id,))
+            res = self.cr.fetchone()
+            return res[0] or 'Draft'
         else:
             return  ''
 
-    def _pos_sales_details(self,form,user):
-        data={}
-        self.cr.execute ("select po.name as pos_name,po.date_order,pt.name ,pol.qty,pol.price_unit,pol.discount,po.invoice_id,sum((pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))) as Total " \
-                         "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,res_users as ru,res_company as rc " \
-                         "where  pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state  IN ('done','paid','invoiced') " \
-                         "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  <= %s " \
-                         "and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
-                         "group by po.name,pol.qty,po.date_order,pt.name,pol.price_unit,pol.discount,po.invoice_id " \
-                             ,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
-        data=self.cr.dictfetchall()
+    def _get_all_users(self):
+        user_obj = self.pool.get('res.users')
+        return user_obj.search(self.cr, self.uid, [])
+
+    def _pos_sales_details(self,form):
+        pos_obj = self.pool.get('pos.order')
+        user_obj = self.pool.get('res.users')
+        data = []
+        result = {}
+        user_ids = form['user_ids'] or self._get_all_users()
+        company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
+        pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('state','in',['done','paid','invoiced']),('company_id','=',company_id)])
+        for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
+            for pol in pos.lines:
+                result = {
+                    'code': pol.product_id.default_code,
+                    'name': pol.product_id.name,
+                    'invoice_id': pos.invoice_id.id, 
+                    'price_unit': pol.price_unit, 
+                    'qty': pol.qty, 
+                    'discount': pol.discount, 
+                    'total': (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)), 
+                    'date_order': pos.date_order, 
+                    'pos_name': pos.name, 
+                    'uom': pol.product_id.uom_id.name
+                }
+                data.append(result)
+                self.total += result['total']
+                self.qty += result['qty']
+                self.discount += result['discount']
         if data:
-            for d in data:
-                self.total += d['total']
-                self.qty += d['qty']
-                return data
+            return data
         else:
             return {}
 
-    def _get_qty_total_2(self, form,user):
-        qty=[]
-        self.cr.execute("select sum(pol.qty) as qty " \
-                        "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt,res_users as ru,res_company as rc " \
-                        "where  pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state  IN ('done','paid','invoiced') " \
-                        " and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  <= %s " \
-                        "and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
-                         ,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
-        qty = self.cr.fetchone()
-        return qty[0] or 0.00
-
-    def _get_sales_total_2(self, form,user):
-        self.cr.execute("select sum((pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))) as Total " \
-                        "from  pos_order_line as pol , pos_order po, product_product as pp,product_template as pt " \
-                        " where po.company_id='%s' and po.id=pol.order_id and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  >= '%s' " \
-                        " and  to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  <= '%s' and po.state IN ('paid','invoiced','done') " \
-                        " and pt.id=pp.product_tmpl_id and pol.product_id=pp.id"% (str(user.company_id.id),form['date_start'],form['date_end']))
-        res2=self.cr.fetchone()
-        return res2 and res2[0] or 0.0
-
-    def _get_sum_invoice_2(self,form,user):
-        res2=[]
-        self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))" \
-                         "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt ,res_users as ru,res_company as rc " \
-                         "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state  in('invoiced')  " \
-                         "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  <= %s " \
-                         "and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
-                         ,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
-        res2=self.cr.fetchone()
-        self.total_invoiced=res2[0]
-        return res2[0] or False
-
-    def _paid_total_2(self,form,user):
-        res3=[]
-        self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))" \
-                         "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt, res_users as ru,res_company as rc " \
-                         "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state  in('paid','invoiced','done')  " \
-                         "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date  <= %s " \
-                         "and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
-                         ,(form['date_start'],form['date_end'],str(user.company_id.id),str(self.uid)))
-        res3=self.cr.fetchone()
-        self.total_paid=res3[0]
-        return res3[0] or False
-
-#    def _get_qty_total(self, objects):
-#        #code for the sum of qty_total
-#        return reduce(lambda acc, object:
-#                                        acc + reduce(
-#                                                lambda sum_qty, line:
-#                                                        sum_qty + line.qty,
-#                                                object.lines,
-#                                                0),
-#                                    objects,
-#                                    0)
+    def _get_qty_total_2(self):
+        return self.qty
+
+    def _get_sales_total_2(self):
+        return self.total
+
+    def _get_sum_invoice_2(self,form):
+        pos_obj = self.pool.get('pos.order')
+        user_obj = self.pool.get('res.users')
+        user_ids = form['user_ids'] or self._get_all_users()
+        company_id = user_obj.browse(self.cr, self.uid, self.uid).company_id.id
+        pos_ids = pos_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('user_id','in',user_ids),('company_id','=',company_id),('invoice_id','<>',False)])
+        for pos in pos_obj.browse(self.cr, self.uid, pos_ids):
+            for pol in pos.lines:
+                self.total_invoiced += (pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))
+        return self.total_invoiced or False
+
+    def _paid_total_2(self):
+        return self.total or 0.0
+
+    def _get_sum_dis_2(self):
+        return self.discount or 0.0
 
     def _get_sum_discount(self, objects):
         #code for the sum of discount value
@@ -118,50 +102,34 @@ class pos_details(report_sxw.rml_parse):
                                     objects,
                                     0.0)
 
-    def _get_payments(self, form,user, ignore_gift=False):
-#        gift_journal_id = None
-#        if ignore_gift:
-#            config_journal_ids = self.pool.get("pos.config.journal").search(self.cr, self.uid, [('code', '=', 'GIFT')])
-#            if len(config_journal_ids):
-#                config_journal = self.pool.get("pos.config.journal").browse(self.cr, self.uid, config_journal_ids, {})[0]
-#                gift_journal_id = config_journal.journal_id.id
-#
-#        result = {}
-#        for obj in objects:
-#            for payment in obj.statement_ids:
-#                result[payment.journal_id] = result.get(payment.journal_id, 0.0) + payment.amount
-#        return result
+    def _get_payments(self, form):
         statement_line_obj = self.pool.get("account.bank.statement.line")
-        gift_journal_id = None
-        if ignore_gift:
-            config_journal_ids = self.pool.get("pos.config.journal").search(self.cr, self.uid, [('code', '=', 'GIFT')])
-            if len(config_journal_ids):
-                config_journal = self.pool.get("pos.config.journal").browse(self.cr, self.uid, config_journal_ids, {})[0]
-                gift_journal_id = config_journal.journal_id.id
-        pos_ids=self.pool.get("pos.order").search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','=',self.uid)])
+        pos_order_obj = self.pool.get("pos.order")
+        user_ids = form['user_ids'] or self._get_all_users()
+        pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids)])
         data={}
         if pos_ids:
             st_line_ids = statement_line_obj.search(self.cr, self.uid, [('pos_statement_id', 'in', pos_ids)])
             if st_line_ids:
                 st_id = statement_line_obj.browse(self.cr, self.uid, st_line_ids)
                 a_l=[]
-                for r in st_id :
+                for r in st_id:
                     a_l.append(r['id'])
                 self.cr.execute("select aj.name,sum(amount) from account_bank_statement_line as absl,account_bank_statement as abs,account_journal as aj " \
                                 "where absl.statement_id = abs.id and abs.journal_id = aj.id  and absl.id IN %s " \
                                 "group by aj.name ",(tuple(a_l),))
 
-                data=self.cr.dictfetchall()
+                data = self.cr.dictfetchall()
                 return data
         else:
             return {}
 
     def _total_of_the_day(self, objects):
-        if self.total_paid:
-             if self.total_paid == self.total_invoiced :
-                 return self.total_paid
+        if self.total:
+             if self.total == self.total_invoiced:
+                 return self.total
              else:
-                 return ((self.total_paid or 0.00) - (self.total_invoiced or 0.00))
+                 return ((self.total or 0.00) - (self.total_invoiced or 0.00))
         else:
             return False
 
@@ -181,63 +149,52 @@ class pos_details(report_sxw.rml_parse):
     def _strip_name(self, name, maxlen=50):
         return self._ellipsis(name, maxlen, ' ...')
 
-    def _get_tax_amount(self, form,user):
+    def _get_tax_amount(self, form):
         res = {}
-        temp={}
+        temp = {}
         list_ids = []
-        c=[]
         temp2 = 0.0
-        pos_ids=self.pool.get("pos.order").search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','=',self.uid)])
-        temp.update({'name':''})
-        for order in self.pool.get("pos.order").browse(self.cr, self.uid, pos_ids):
-            temp2 +=order.amount_tax
+        user_ids = form['user_ids'] or self._get_all_users()
+        pos_order_obj = self.pool.get('pos.order')
+        pos_ids = pos_order_obj.search(self.cr, self.uid, [('date_order','>=',form['date_start'] + ' 00:00:00'),('date_order','<=',form['date_end'] + ' 23:59:59'),('state','in',['paid','invoiced','done']),('user_id','in',user_ids)])
+        temp.update({'name': ''})
+        for order in pos_order_obj.browse(self.cr, self.uid, pos_ids):
+            temp2 += order.amount_tax
             for line in order.lines:
                 if len(line.product_id.taxes_id):
                     tax = line.product_id.taxes_id[0]
                     res[tax.name] = (line.price_unit * line.qty * (1-(line.discount or 0.0) / 100.0)) + (tax.id in list_ids and res[tax.name] or 0)
                     list_ids.append(tax.id)
-                    temp.update({'name':tax.name})
-        temp.update({'amount':temp2})
+                    temp.update({'name': tax.name})
+        temp.update({'amount': temp2})
         return [temp] or False
 
-#    def _get_period(self, form):
-#        min_date = form['date_start']
-#        max_date = form['date_end']
-#        if min_date == max_date:
-#            return '%s' % min_date
-#        else:
-#            return '%s - %s' % (min_date, max_date)
-    def _get_period(self, form):
-        return form['date_start']
-
-    def _get_period2(self,form):
-        return form['date_end']
+    def _get_user_names(self, user_ids):
+        user_obj = self.pool.get('res.users')
+        return ', '.join(map(lambda x: x.name, user_obj.browse(self.cr, self.uid, user_ids)))
 
     def __init__(self, cr, uid, name, context):
-        super(pos_details, self).__init__(cr, uid, name, context)
+        super(pos_details, self).__init__(cr, uid, name, context=context)
         self.total = 0.0
         self.qty = 0.0
-        self.invoice_id = ''
-        self.total_paid = 0.0
         self.total_invoiced = 0.0
+        self.discount = 0.0
         self.localcontext.update({
             'time': time,
             'strip_name': self._strip_name,
             'getpayments': self._get_payments,
-            'getsumdisc': self._get_sum_discount,
+            'getsumdisc': self._get_sum_dis_2,
             'gettotalofthaday': self._total_of_the_day,
             'gettaxamount': self._get_tax_amount,
-            'getperiod': self._get_period,
-            'getperiod2':self._get_period2,
             'pos_sales_details':self._pos_sales_details,
             'getqtytotal2': self._get_qty_total_2,
             'getsalestotal2': self._get_sales_total_2,
             'getsuminvoice2':self._get_sum_invoice_2,
             'getpaidtotal2': self._paid_total_2,
             'getinvoice':self._get_invoice,
+            'get_user_names': self._get_user_names,
         })
 
-report_sxw.report_sxw('report.pos.details', 'pos.order', 'addons/point_of_sale_singer/report/pos_details.rml', parser=pos_details, header=None)
+report_sxw.report_sxw('report.pos.details', 'pos.order', 'addons/point_of_sale_singer/report/pos_details.rml', parser=pos_details, header='internal')
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-