Subversion Repositories SmartDukaan

Rev

Rev 8552 | Rev 8599 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6908 rajveer 1
#!/usr/bin/python
2
 
3
from elixir import *
4
from datetime import datetime, timedelta, date 
5
import sys
6
from shop2020.model.v1.order.impl import DataService
7
from shop2020.model.v1.order.impl.DataAccessors import move_orders_to_correct_warehouse
6964 rajveer 8
from shop2020.model.v1.order.impl.DataService import InsuranceDetailForOrder,\
9
    Order
6908 rajveer 10
import xlwt
11
from shop2020.utils import EmailAttachmentSender
12
from shop2020.utils.EmailAttachmentSender import get_attachment_part
6909 rajveer 13
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
6962 rajveer 14
from shop2020.clients.CatalogClient import CatalogClient
8549 kshitij.so 15
from suds.client import Client
16
from xml.dom.minidom import parseString
17
import logging
6908 rajveer 18
 
6964 rajveer 19
def delivered_orders():
6974 rajveer 20
    DataService.initialize(db_hostname="192.168.190.114")
6908 rajveer 21
    todate = datetime.now() 
22
    todate = todate-timedelta(days = 10)
23
    insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.isDeclared == False).filter(InsuranceDetailForOrder.startDate >= todate).all()
24
    if not insurances:
25
        return
26
 
27
    wbk = xlwt.Workbook()
28
    sheet = wbk.add_sheet('main')
29
 
6941 rajveer 30
    date_style = xlwt.XFStyle()
31
    date_style.num_format_str = "D/M/YY"
32
 
6908 rajveer 33
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
34
    sheet.set_panes_frozen(True)
35
    sheet.set_horz_split_pos(1)
36
    sheet.set_remove_splits(True)
37
 
38
    excel_integer_format = '0'
39
    integer_style = xlwt.XFStyle()
40
    integer_style.num_format_str = excel_integer_format
41
 
42
    sheet.write(0, 0, "Riskstartdate", heading_xf)
43
    sheet.write(0, 1, "StoreId", heading_xf)
44
    sheet.write(0, 2, "SystemInvoiceNumber", heading_xf)
45
    sheet.write(0, 3, "CustomerName", heading_xf)
46
    sheet.write(0, 4, "Type", heading_xf)
47
    sheet.write(0, 5, "Make", heading_xf)
48
    sheet.write(0, 6, "Model", heading_xf)
49
    sheet.write(0, 7, "EquipmentIdentificationNumber", heading_xf)
50
    sheet.write(0, 8, "Qty", heading_xf)
51
    sheet.write(0, 9, "Rate", heading_xf)
52
    sheet.write(0, 10, "TaxAmount", heading_xf)
53
    sheet.write(0, 11, "NetSales", heading_xf)
54
    sheet.write(0, 12, "FatherName", heading_xf)
55
    sheet.write(0, 13, "Birthdate", heading_xf)
56
    sheet.write(0, 14, "SystemInvoiceDate.", heading_xf)
57
    sheet.write(0, 15, "OrderId", heading_xf)
58
    sheet.write(0, 16, "OtherDetails3", heading_xf)
59
 
60
    xstr = lambda s: s or ""
61
 
6962 rajveer 62
    declaredAmount= 0.0
6908 rajveer 63
    i = 1
64
    for insurance in insurances:
65
        order = insurance.order
6909 rajveer 66
        if order.status != OrderStatus.DELIVERY_SUCCESS:
67
            continue
6908 rajveer 68
        line = order.lineitems[0]
69
        insurance.isDeclared = True
6962 rajveer 70
        declaredAmount += line.total_price
6908 rajveer 71
 
6941 rajveer 72
        sheet.write(i, 0, insurance.startDate, date_style)
6908 rajveer 73
        sheet.write(i, 1, '')
74
        sheet.write(i, 2, order.invoice_number)
75
        sheet.write(i, 3, order.customer_name)
76
        sheet.write(i, 4, 'Mobile Phones')
77
        sheet.write(i, 5, line.brand)
78
        sheet.write(i, 6, xstr(line.model_name) + " " + xstr(line.model_number))
79
        sheet.write(i, 7, line.serial_number)
80
        sheet.write(i, 8, line.quantity)
81
        sheet.write(i, 9, line.unit_price)
82
        sheet.write(i, 10, "0")
83
        sheet.write(i, 11, line.total_price)
84
        sheet.write(i, 12, insurance.guardianName)
85
        sheet.write(i, 13, insurance.dob)
6941 rajveer 86
        sheet.write(i, 14, order.billing_timestamp, date_style)
6908 rajveer 87
        sheet.write(i, 15, order.id)
88
        sheet.write(i, 16, '')        
89
        i = i + 1
90
 
91
    session.commit()
6962 rajveer 92
    client = CatalogClient().get_client()
93
    client.updateInsuranceDeclaredAmount(1, declaredAmount)
94
 
6908 rajveer 95
    today = date.today()
96
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
97
    filename = "/tmp/insurance-" + datestr + ".xls"
98
    wbk.save(filename)
6974 rajveer 99
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["ab@universalinsurance.co.in", "urmila.phadke@universalinsurace.co.in"], "Insurance Details for date " + datestr, "Please find attached insurance details for today.", [get_attachment_part(filename)], ["pramit.singh@shop2020.in","rbuniversal@gmail.com","rajveer.singh@shop2020.in","anupam.singh@shop2020.in","rajneesh.arora@shop2020.in"], [])
6964 rajveer 100
 
7177 rajveer 101
    insurer = client.getInsurer(1)
7335 rajveer 102
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["pramit.singh@shop2020.in","rajveer.singh@shop2020.in","anupam.singh@shop2020.in","rajneesh.arora@shop2020.in", "amit.tyagi@spiceretail.co.in", "pardeep.panwar@spiceretail.co.in", "j.p.gupta@shop2020.in"], "Declaration Status for insurer  " + insurer.name + " as on " + datestr + " : (Declared Amount - " +  str(insurer.declaredAmount) + ")  (Total Amount - " + str(insurer.creditedAmount), "", [], [], [])
7177 rajveer 103
 
6964 rajveer 104
def returned_orders():
6974 rajveer 105
    DataService.initialize(db_hostname="192.168.190.114")
6964 rajveer 106
    todate = datetime.now() 
107
    todate = todate-timedelta(days = 2)
108
    orders = Order.query.filter(Order.insurer > 0).filter(Order.received_return_timestamp >= todate).all()
109
 
110
    if not orders:
111
        return
112
 
113
    wbk = xlwt.Workbook()
114
    sheet = wbk.add_sheet('main')
115
 
116
    date_style = xlwt.XFStyle()
117
    date_style.num_format_str = "D/M/YY"
118
 
119
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
120
    sheet.set_panes_frozen(True)
121
    sheet.set_horz_split_pos(1)
122
    sheet.set_remove_splits(True)
123
 
124
    excel_integer_format = '0'
125
    integer_style = xlwt.XFStyle()
126
    integer_style.num_format_str = excel_integer_format
127
 
128
    sheet.write(0, 0, "SalesReturnDate", heading_xf)
129
    sheet.write(0, 1, "SalesReturnNumber", heading_xf)
130
    sheet.write(0, 2, "CustomerName", heading_xf)
131
    sheet.write(0, 3, "EquipmentIdentificationNumber", heading_xf)
132
    sheet.write(0, 4, "SystemInvoiceNumber", heading_xf)
133
    sheet.write(0, 5, "Rate", heading_xf)
134
    sheet.write(0, 6, "Amount", heading_xf)
7154 rajveer 135
    sheet.write(0, 7, "OrderId", heading_xf)
6964 rajveer 136
 
137
    xstr = lambda s: s or ""
138
 
139
    declaredAmount= 0.0
140
    i = 1
141
    for order in orders:
142
        insurance = order.insuranceDetails[0]
7018 rajveer 143
        if not (insurance.startDate or insurance.expiryDate) or insurance.expiryDate < datetime.now():
6964 rajveer 144
            continue
145
 
146
        line = order.lineitems[0]
147
        insurance.expiryDate = order.received_return_timestamp
148
 
149
        insured_days = ((order.received_return_timestamp).date() - ((insurance.startDate).date())).days 
150
 
151
        declaredAmount += line.total_price/365*(365-insured_days)
152
 
153
        sheet.write(i, 0, insurance.startDate, date_style)
154
        sheet.write(i, 1, order.invoice_number)
155
        sheet.write(i, 2, order.customer_name)
156
        sheet.write(i, 3, line.serial_number)
157
        sheet.write(i, 4, order.invoice_number)
158
        sheet.write(i, 5, line.unit_price)
159
        sheet.write(i, 6, line.unit_price)
7154 rajveer 160
        sheet.write(i, 7, order.id)
6964 rajveer 161
        i = i + 1
162
 
163
    session.commit()
164
    client = CatalogClient().get_client()
165
    client.updateInsuranceDeclaredAmount(1, -declaredAmount)
166
 
167
    today = date.today()
168
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
169
    filename = "/tmp/insurance-return-" + datestr + ".xls"
170
    wbk.save(filename)
7018 rajveer 171
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["ab@universalinsurance.co.in", "urmila.phadke@universalinsurace.co.in"], "Cancelled Insurance Policy Details for date " + datestr, "Please find attached orders which insurance need to be cancelled for today.", [get_attachment_part(filename)], ["pramit.singh@shop2020.in","rbuniversal@gmail.com","rajveer.singh@shop2020.in","anupam.singh@shop2020.in","rajneesh.arora@shop2020.in"], [])
8549 kshitij.so 172
 
173
def submitDeliveredOrdersDetails():
174
    DataService.initialize(db_hostname="192.168.190.114")
175
    todate = datetime.now() 
176
    todate = todate-timedelta(days = 10)
177
    xstr = lambda s: s or "" 
178
 
179
    declaredAmount= 0.0
180
    successful= []
181
    duplicateRecord = []
182
    serverSide = []
183
    dataFormat = []
184
    client = Client('http://www.insuregadget.ae/SSSWebService/SSSWebService.asmx?wsdl')
185
    header=client.factory.create('AuthHeader')
186
    header.Username  = 'saholic'
187
    header.Password  = '1Dfgh4@#'
188
    client.set_options(soapheaders=header)
189
 
190
    insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.isDeclared == False).filter(InsuranceDetailForOrder.startDate >= todate).all()
191
    if not insurances:
192
        return
193
    for insurance in insurances:
194
        order = insurance.order
195
        if order.status != OrderStatus.DELIVERY_SUCCESS:
196
            continue
197
        try:
198
            dateOfBirth = getDateFormatForDob(insurance.dob)
199
        except:
200
            try:
201
                dateOfBirth = getDateFormatForDob2(insurance.dob)
202
            except:
203
                dataFormat.append(order.id)
204
                continue
205
        line = order.lineitems[0]
206
        Connected =False
207
        Attempt = 1
208
        while not Connected:
209
            try:
210
                response = client.service.InsertSalesRecord('SAHOLIC',line.serial_number,getValidDateFormat(order.billing_timestamp.date()),order.invoice_number,\
211
                                         'Mobile Phones',line.brand,xstr(line.model_name) + " " + xstr(line.model_number),line.unit_price,\
8553 kshitij.so 212
                                         0.0,line.total_price,order.customer_name,insurance.guardianName,dateOfBirth,str(order.id),\
8549 kshitij.so 213
                                         order.customer_mobilenumber,'')
8552 kshitij.so 214
                print ('SAHOLIC',line.serial_number,getValidDateFormat(order.billing_timestamp.date()),order.invoice_number,\
215
                                         'Mobile Phones',line.brand,xstr(line.model_name) + " " + xstr(line.model_number),line.unit_price,\
8553 kshitij.so 216
                                         0.0,line.total_price,order.customer_name,insurance.guardianName,dateOfBirth,str(order.id),\
8552 kshitij.so 217
                                         order.customer_mobilenumber,'')
218
                print "Response : ",response
8549 kshitij.so 219
                Connected=True
220
            except:
221
                print "Unable to insert sale record.Attempting again...."
222
                Attempt = Attempt+1
223
                if Attempt ==3:
224
                    break
225
        if not Connected:
226
            serverSide.append(order.id)
227
            continue
228
 
229
        dom = parseString("<dom>" + response + "</dom>")
230
        sssResponse = dom.getElementsByTagName('SSSResponse')[0]
231
        status = sssResponse.getElementsByTagName('Status')
232
        statusStr = status[0].childNodes[0].data
233
        if (statusStr == 'Failure'):
234
            error = sssResponse.getElementsByTagName('ErrorCode')
235
            errorCode = int(error[0].childNodes[0].data)
236
            if (errorCode == 999):
237
                duplicateRecord.append(order.id)
238
            elif (errorCode ==9999 or errorCode==99999):
239
                serverSide.append(order.id)
240
            else:
241
                dataFormat.append(order.id)
242
 
243
        elif (statusStr == 'Success'):
244
            successful.append(order.id)
245
            print "Insurance details successfully inserted.Order Id ",order.id
246
 
247
        else:
248
            serverSide.append(order.id)
249
 
250
    today = date.today()
251
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
252
    mail_body = "Number of records successfully inserted :"+str(len(successful))+"\nFollowing order id's were not processed because\nServer Side Error: "+', '.join(map(str, serverSide))+"\n"+"Data Format Error: "+', '.join(map(str, dataFormat))+"\n"+"Duplicate entry IMEI: "+', '.join(map(str, duplicateRecord))
253
    print mail_body
254
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["rajveer.singh@shop2020.in","kshitij.sood@shop2020.in"], "Insurance submission result for date " + datestr, mail_body, [], [], [])
255
 
256
 
257
 
258
def getValidDateFormat(dateToFormat):
259
    return str(dateToFormat).replace('-','')
260
 
261
def getDateFormatForDob(dateToFormat):
8550 kshitij.so 262
    if (dateToFormat=='Organisation'):
263
        return '19700101'
8549 kshitij.so 264
    return str(datetime.strptime(dateToFormat,"%b %d %Y").date()).replace('-','')
265
 
266
def getDateFormatForDob2(dateToFormat):
267
    return str(datetime.strptime(dateToFormat,"%d %b %Y").date()).replace('-','')
6908 rajveer 268
 
6964 rajveer 269
def main():
8549 kshitij.so 270
    submitDeliveredOrdersDetails()
8550 kshitij.so 271
    delivered_orders()
6964 rajveer 272
    returned_orders()
273
 
6908 rajveer 274
if __name__ == '__main__':
275
    main()
276