@ -20,6 +20,7 @@
#############################################################################
#############################################################################
from odoo import models , fields , api
from odoo import models , fields , api
from datetime import datetime
import io
import io
import json
import json
@ -37,11 +38,16 @@ class PosReportGenerator(models.Model):
date_from = fields . Datetime ( string = " Date From " )
date_from = fields . Datetime ( string = " Date From " )
date_to = fields . Datetime ( string = " Date to " )
date_to = fields . Datetime ( string = " Date to " )
report_type = fields . Selection ( [ ( ' report_by_order ' , ' Report By Order ' ) ,
report_type = fields . Selection ( [ ( ' report_by_order ' , ' Report By Order ' ) ,
( ' report_by_order_detail ' , ' Report By Order Detail ' ) ,
( ' report_by_order_detail ' ,
' Report By Order Detail ' ) ,
( ' report_by_product ' , ' Report By Product ' ) ,
( ' report_by_product ' , ' Report By Product ' ) ,
( ' report_by_categories ' , ' Report By Categories ' ) ,
( ' report_by_categories ' ,
( ' report_by_salesman ' , ' Report By Salesman ' ) ,
' Report By Categories ' ) ,
( ' report_by_payment ' , ' Report By Payment ' ) ] ,
( ' report_by_salesman ' ,
' Report By Salesman ' ) ,
(
' report_by_payment ' ,
' Report By Payment ' ) ] ,
default = ' report_by_order ' )
default = ' report_by_order ' )
@api . model
@api . model
@ -61,7 +67,6 @@ class PosReportGenerator(models.Model):
data . update ( {
data . update ( {
' date_to ' : report_values . date_to ,
' date_to ' : report_values . date_to ,
} )
} )
# print("reports",reports)
filters = self . get_filter ( option )
filters = self . get_filter ( option )
report = self . _get_report_values ( data )
report = self . _get_report_values ( data )
lines = self . _get_report_values ( data ) . get ( ' POS ' )
lines = self . _get_report_values ( data ) . get ( ' POS ' )
@ -101,7 +106,6 @@ class PosReportGenerator(models.Model):
r = self . env [ ' pos.report ' ] . search ( [ ( ' id ' , ' = ' , option [ 0 ] ) ] )
r = self . env [ ' pos.report ' ] . search ( [ ( ' id ' , ' = ' , option [ 0 ] ) ] )
default_filters = { }
default_filters = { }
filter_dict = {
filter_dict = {
' report_type ' : r . report_type ,
' report_type ' : r . report_type ,
}
}
@ -110,14 +114,11 @@ class PosReportGenerator(models.Model):
@api . model
@api . model
def create ( self , vals ) :
def create ( self , vals ) :
print ( " vals " , vals )
res = super ( PosReportGenerator , self ) . create ( vals )
res = super ( PosReportGenerator , self ) . create ( vals )
return res
return res
def write ( self , vals ) :
def write ( self , vals ) :
res = super ( PosReportGenerator , self ) . write ( vals )
res = super ( PosReportGenerator , self ) . write ( vals )
return res
return res
@ -138,10 +139,12 @@ class PosReportGenerator(models.Model):
'''
'''
term = ' Where '
term = ' Where '
if data . get ( ' date_from ' ) :
if data . get ( ' date_from ' ) :
query + = " Where l.date_order >= ' %s ' " % data . get ( ' date_from ' )
query + = " Where (l.date_order >= ' %s ' ) " % data . get (
' date_from ' ) . strftime ( ' % Y- % m- %d 00:00:00 ' )
term = ' AND '
term = ' AND '
if data . get ( ' date_to ' ) :
if data . get ( ' date_to ' ) :
query + = term + " l.date_order <= ' %s ' " % data . get ( ' date_to ' )
query + = term + " (l.date_order <= ' %s ' ) " % data . get (
' date_to ' ) . strftime ( ' % Y- % m- %d 11:59:59 ' )
query + = " group by l.user_id,res_users.partner_id,res_partner.name,l.partner_id,l.date_order,pos_session.name,l.session_id,l.name,l.amount_total,l.note,l.id "
query + = " group by l.user_id,res_users.partner_id,res_partner.name,l.partner_id,l.date_order,pos_session.name,l.session_id,l.name,l.amount_total,l.note,l.id "
self . _cr . execute ( query )
self . _cr . execute ( query )
report_by_order = self . _cr . dictfetchall ( )
report_by_order = self . _cr . dictfetchall ( )
@ -161,11 +164,14 @@ class PosReportGenerator(models.Model):
'''
'''
term = ' Where '
term = ' Where '
if data . get ( ' date_from ' ) :
if data . get ( ' date_from ' ) :
query + = " Where l.date_order >= ' %s ' " % data . get ( ' date_from ' )
query + = " Where l.date_order >= ' %s ' " % data . get (
' date_from ' ) . strftime ( ' % Y- % m- %d ' )
term = ' AND '
term = ' AND '
if data . get ( ' date_to ' ) :
if data . get ( ' date_to ' ) :
query + = term + " l.date_order <= ' %s ' " % data . get ( ' date_to ' )
query + = term + " l.date_order <= ' %s ' " % data . get (
' date_to ' ) . strftime ( ' % Y- % m- %d ' )
query + = " group by l.user_id,res_users.partner_id,res_partner.name,l.partner_id,l.date_order,pos_session.name,l.session_id,l.name,l.amount_total,l.note,pos_order_line.full_product_name,pos_order_line.price_unit,pos_order_line.price_subtotal,pos_order_line.price_subtotal_incl,pos_order_line.product_id,product_product.default_code "
query + = " group by l.user_id,res_users.partner_id,res_partner.name,l.partner_id,l.date_order,pos_session.name,l.session_id,l.name,l.amount_total,l.note,pos_order_line.full_product_name,pos_order_line.price_unit,pos_order_line.price_subtotal,pos_order_line.price_subtotal_incl,pos_order_line.product_id,product_product.default_code "
self . _cr . execute ( query )
self . _cr . execute ( query )
report_by_order_details = self . _cr . dictfetchall ( )
report_by_order_details = self . _cr . dictfetchall ( )
report_sub_lines . append ( report_by_order_details )
report_sub_lines . append ( report_by_order_details )
@ -198,10 +204,12 @@ class PosReportGenerator(models.Model):
'''
'''
term = ' Where '
term = ' Where '
if data . get ( ' date_from ' ) :
if data . get ( ' date_from ' ) :
query + = " Where pos_order.date_order >= ' %s ' " % data . get ( ' date_from ' )
query + = " Where pos_order.date_order >= ' %s ' " % data . get (
' date_from ' )
term = ' AND '
term = ' AND '
if data . get ( ' date_to ' ) :
if data . get ( ' date_to ' ) :
query + = term + " pos_order.date_order <= ' %s ' " % data . get ( ' date_to ' )
query + = term + " pos_order.date_order <= ' %s ' " % data . get (
' date_to ' )
query + = " group by product_category.name "
query + = " group by product_category.name "
self . _cr . execute ( query )
self . _cr . execute ( query )
report_by_categories = self . _cr . dictfetchall ( )
report_by_categories = self . _cr . dictfetchall ( )
@ -294,9 +302,11 @@ class PosReportGenerator(models.Model):
report_res_total = self . _get_report_total_value ( data , report )
report_res_total = self . _get_report_total_value ( data , report )
if data . get ( ' report_type ' ) :
if data . get ( ' report_type ' ) :
report_res = self . _get_report_sub_lines ( data , report , date_from , date_to ) [ 0 ]
report_res = \
self . _get_report_sub_lines ( data , report , date_from , date_to ) [ 0 ]
else :
else :
report_res = self . _get_report_sub_lines ( data , report , date_from , date_to )
report_res = self . _get_report_sub_lines ( data , report , date_from ,
date_to )
if data . get ( ' report_type ' ) == ' report_by_order ' :
if data . get ( ' report_type ' ) == ' report_by_order ' :
report_res_total = self . _get_report_total_value ( data , report ) [ 0 ]
report_res_total = self . _get_report_total_value ( data , report ) [ 0 ]
@ -310,7 +320,6 @@ class PosReportGenerator(models.Model):
}
}
def get_pos_xlsx_report ( self , data , response , report_data , dfr_data ) :
def get_pos_xlsx_report ( self , data , response , report_data , dfr_data ) :
print ( " fhccccccgjk " )
report_data_main = json . loads ( report_data )
report_data_main = json . loads ( report_data )
output = io . BytesIO ( )
output = io . BytesIO ( )
filters = json . loads ( data )
filters = json . loads ( data )
@ -370,7 +379,6 @@ class PosReportGenerator(models.Model):
for rec_data in report_data_main :
for rec_data in report_data_main :
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' shop ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' shop ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )
@ -417,7 +425,6 @@ class PosReportGenerator(models.Model):
for rec_data in report_data_main :
for rec_data in report_data_main :
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' shop ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' shop ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )
@ -429,7 +436,8 @@ class PosReportGenerator(models.Model):
sheet . write ( row , col + 7 , rec_data [ ' price_unit ' ] , txt_l )
sheet . write ( row , col + 7 , rec_data [ ' price_unit ' ] , txt_l )
sheet . write ( row , col + 8 , rec_data [ ' sum ' ] , txt_l )
sheet . write ( row , col + 8 , rec_data [ ' sum ' ] , txt_l )
sheet . write ( row , col + 9 , rec_data [ ' price_subtotal ' ] , txt_l )
sheet . write ( row , col + 9 , rec_data [ ' price_subtotal ' ] , txt_l )
sheet . write ( row , col + 10 , rec_data [ ' price_subtotal_incl ' ] , txt_l )
sheet . write ( row , col + 10 , rec_data [ ' price_subtotal_incl ' ] ,
txt_l )
if filters . get ( ' report_type ' ) == ' report_by_product ' :
if filters . get ( ' report_type ' ) == ' report_by_product ' :
@ -462,7 +470,6 @@ class PosReportGenerator(models.Model):
for rec_data in report_data_main :
for rec_data in report_data_main :
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' default_code ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' default_code ' ] , txt_l )
@ -494,7 +501,6 @@ class PosReportGenerator(models.Model):
for rec_data in report_data_main :
for rec_data in report_data_main :
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' qty ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' qty ' ] , txt_l )
@ -524,7 +530,6 @@ class PosReportGenerator(models.Model):
for rec_data in report_data_main :
for rec_data in report_data_main :
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' name ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' order ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' order ' ] , txt_l )
@ -555,7 +560,6 @@ class PosReportGenerator(models.Model):
name = list ( rec_data [ ' name ' ] . values ( ) ) [ 0 ]
name = list ( rec_data [ ' name ' ] . values ( ) ) [ 0 ]
one_lst = [ ]
one_lst = [ ]
two_lst = [ ]
two_lst = [ ]
print ( " iiii " , rec_data )
row + = 1
row + = 1
sheet . write ( row , col , rec_data [ ' config ' ] , txt_l )
sheet . write ( row , col , rec_data [ ' config ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )
sheet . write ( row , col + 1 , rec_data [ ' session ' ] , txt_l )