Subversion Repositories SmartDukaan

Rev

Rev 8605 | Rev 9237 | 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
8605 kshitij.so 18
import re
6908 rajveer 19
 
6964 rajveer 20
def delivered_orders():
6974 rajveer 21
    DataService.initialize(db_hostname="192.168.190.114")
6908 rajveer 22
    todate = datetime.now() 
23
    todate = todate-timedelta(days = 10)
24
    insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.isDeclared == False).filter(InsuranceDetailForOrder.startDate >= todate).all()
25
    if not insurances:
26
        return
27
 
28
    wbk = xlwt.Workbook()
29
    sheet = wbk.add_sheet('main')
30
 
6941 rajveer 31
    date_style = xlwt.XFStyle()
32
    date_style.num_format_str = "D/M/YY"
33
 
6908 rajveer 34
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
35
    sheet.set_panes_frozen(True)
36
    sheet.set_horz_split_pos(1)
37
    sheet.set_remove_splits(True)
38
 
39
    excel_integer_format = '0'
40
    integer_style = xlwt.XFStyle()
41
    integer_style.num_format_str = excel_integer_format
42
 
43
    sheet.write(0, 0, "Riskstartdate", heading_xf)
44
    sheet.write(0, 1, "StoreId", heading_xf)
45
    sheet.write(0, 2, "SystemInvoiceNumber", heading_xf)
46
    sheet.write(0, 3, "CustomerName", heading_xf)
47
    sheet.write(0, 4, "Type", heading_xf)
48
    sheet.write(0, 5, "Make", heading_xf)
49
    sheet.write(0, 6, "Model", heading_xf)
50
    sheet.write(0, 7, "EquipmentIdentificationNumber", heading_xf)
51
    sheet.write(0, 8, "Qty", heading_xf)
52
    sheet.write(0, 9, "Rate", heading_xf)
53
    sheet.write(0, 10, "TaxAmount", heading_xf)
54
    sheet.write(0, 11, "NetSales", heading_xf)
55
    sheet.write(0, 12, "FatherName", heading_xf)
56
    sheet.write(0, 13, "Birthdate", heading_xf)
57
    sheet.write(0, 14, "SystemInvoiceDate.", heading_xf)
58
    sheet.write(0, 15, "OrderId", heading_xf)
59
    sheet.write(0, 16, "OtherDetails3", heading_xf)
60
 
61
    xstr = lambda s: s or ""
62
 
6962 rajveer 63
    declaredAmount= 0.0
6908 rajveer 64
    i = 1
65
    for insurance in insurances:
66
        order = insurance.order
6909 rajveer 67
        if order.status != OrderStatus.DELIVERY_SUCCESS:
68
            continue
6908 rajveer 69
        line = order.lineitems[0]
70
        insurance.isDeclared = True
6962 rajveer 71
        declaredAmount += line.total_price
6908 rajveer 72
 
6941 rajveer 73
        sheet.write(i, 0, insurance.startDate, date_style)
6908 rajveer 74
        sheet.write(i, 1, '')
75
        sheet.write(i, 2, order.invoice_number)
76
        sheet.write(i, 3, order.customer_name)
77
        sheet.write(i, 4, 'Mobile Phones')
78
        sheet.write(i, 5, line.brand)
79
        sheet.write(i, 6, xstr(line.model_name) + " " + xstr(line.model_number))
80
        sheet.write(i, 7, line.serial_number)
81
        sheet.write(i, 8, line.quantity)
82
        sheet.write(i, 9, line.unit_price)
83
        sheet.write(i, 10, "0")
84
        sheet.write(i, 11, line.total_price)
85
        sheet.write(i, 12, insurance.guardianName)
86
        sheet.write(i, 13, insurance.dob)
6941 rajveer 87
        sheet.write(i, 14, order.billing_timestamp, date_style)
6908 rajveer 88
        sheet.write(i, 15, order.id)
89
        sheet.write(i, 16, '')        
90
        i = i + 1
91
 
92
    session.commit()
6962 rajveer 93
    client = CatalogClient().get_client()
94
    client.updateInsuranceDeclaredAmount(1, declaredAmount)
95
 
6908 rajveer 96
    today = date.today()
97
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
98
    filename = "/tmp/insurance-" + datestr + ".xls"
99
    wbk.save(filename)
8769 kshitij.so 100
    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","gguniversal@gmail.com","rajveer.singh@shop2020.in","anupam.singh@shop2020.in","rajneesh.arora@shop2020.in"], [])
6964 rajveer 101
 
7177 rajveer 102
    insurer = client.getInsurer(1)
7335 rajveer 103
    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 104
 
6964 rajveer 105
def returned_orders():
6974 rajveer 106
    DataService.initialize(db_hostname="192.168.190.114")
6964 rajveer 107
    todate = datetime.now() 
108
    todate = todate-timedelta(days = 2)
109
    orders = Order.query.filter(Order.insurer > 0).filter(Order.received_return_timestamp >= todate).all()
110
 
111
    if not orders:
112
        return
113
 
114
    wbk = xlwt.Workbook()
115
    sheet = wbk.add_sheet('main')
116
 
117
    date_style = xlwt.XFStyle()
118
    date_style.num_format_str = "D/M/YY"
119
 
120
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
121
    sheet.set_panes_frozen(True)
122
    sheet.set_horz_split_pos(1)
123
    sheet.set_remove_splits(True)
124
 
125
    excel_integer_format = '0'
126
    integer_style = xlwt.XFStyle()
127
    integer_style.num_format_str = excel_integer_format
128
 
129
    sheet.write(0, 0, "SalesReturnDate", heading_xf)
130
    sheet.write(0, 1, "SalesReturnNumber", heading_xf)
131
    sheet.write(0, 2, "CustomerName", heading_xf)
132
    sheet.write(0, 3, "EquipmentIdentificationNumber", heading_xf)
133
    sheet.write(0, 4, "SystemInvoiceNumber", heading_xf)
134
    sheet.write(0, 5, "Rate", heading_xf)
135
    sheet.write(0, 6, "Amount", heading_xf)
7154 rajveer 136
    sheet.write(0, 7, "OrderId", heading_xf)
6964 rajveer 137
 
138
    xstr = lambda s: s or ""
139
 
140
    declaredAmount= 0.0
141
    i = 1
142
    for order in orders:
143
        insurance = order.insuranceDetails[0]
7018 rajveer 144
        if not (insurance.startDate or insurance.expiryDate) or insurance.expiryDate < datetime.now():
6964 rajveer 145
            continue
146
 
147
        line = order.lineitems[0]
148
        insurance.expiryDate = order.received_return_timestamp
149
 
150
        insured_days = ((order.received_return_timestamp).date() - ((insurance.startDate).date())).days 
151
 
152
        declaredAmount += line.total_price/365*(365-insured_days)
153
 
154
        sheet.write(i, 0, insurance.startDate, date_style)
155
        sheet.write(i, 1, order.invoice_number)
156
        sheet.write(i, 2, order.customer_name)
157
        sheet.write(i, 3, line.serial_number)
158
        sheet.write(i, 4, order.invoice_number)
159
        sheet.write(i, 5, line.unit_price)
160
        sheet.write(i, 6, line.unit_price)
7154 rajveer 161
        sheet.write(i, 7, order.id)
6964 rajveer 162
        i = i + 1
163
 
164
    session.commit()
165
    client = CatalogClient().get_client()
166
    client.updateInsuranceDeclaredAmount(1, -declaredAmount)
167
 
168
    today = date.today()
169
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
170
    filename = "/tmp/insurance-return-" + datestr + ".xls"
171
    wbk.save(filename)
8769 kshitij.so 172
    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","gguniversal@gmail.com","rajveer.singh@shop2020.in","anupam.singh@shop2020.in","rajneesh.arora@shop2020.in"], [])
8549 kshitij.so 173
 
8599 kshitij.so 174
def submitDeliveredOrdersDetails(args):
8549 kshitij.so 175
    DataService.initialize(db_hostname="192.168.190.114")
176
    todate = datetime.now() 
177
    todate = todate-timedelta(days = 10)
178
    xstr = lambda s: s or "" 
179
 
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)
8599 kshitij.so 189
 
190
 
191
    if (len(args)>1):
192
        insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.order_id.in_(args[1:])).all()
193
    else:
194
        insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.isDeclared == False).filter(InsuranceDetailForOrder.startDate >= todate).all()
8549 kshitij.so 195
    if not insurances:
196
        return
197
    for insurance in insurances:
198
        order = insurance.order
199
        if order.status != OrderStatus.DELIVERY_SUCCESS:
200
            continue
201
        try:
202
            dateOfBirth = getDateFormatForDob(insurance.dob)
203
        except:
204
            try:
205
                dateOfBirth = getDateFormatForDob2(insurance.dob)
206
            except:
207
                dataFormat.append(order.id)
208
                continue
209
        line = order.lineitems[0]
210
        Connected =False
211
        Attempt = 1
212
        while not Connected:
213
            try:
214
                response = client.service.InsertSalesRecord('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,\
8605 kshitij.so 216
                                         0.0,line.total_price,getValidName(order.customer_name),getValidName(insurance.guardianName),dateOfBirth,str(order.id),\
8549 kshitij.so 217
                                         order.customer_mobilenumber,'')
8552 kshitij.so 218
                print ('SAHOLIC',line.serial_number,getValidDateFormat(order.billing_timestamp.date()),order.invoice_number,\
219
                                         'Mobile Phones',line.brand,xstr(line.model_name) + " " + xstr(line.model_number),line.unit_price,\
8605 kshitij.so 220
                                         0.0,line.total_price,getValidName(order.customer_name),getValidName(insurance.guardianName),dateOfBirth,str(order.id),\
8552 kshitij.so 221
                                         order.customer_mobilenumber,'')
222
                print "Response : ",response
8599 kshitij.so 223
                if response is None:
224
                    print "Unable to insert sale record.Empty Response came.Attempting again...."
225
                    if Attempt == 3:
226
                        break
227
                    Attempt+=1
228
                    continue
8549 kshitij.so 229
                Connected=True
230
            except:
231
                print "Unable to insert sale record.Attempting again...."
232
                Attempt = Attempt+1
8599 kshitij.so 233
                if Attempt == 3:
8549 kshitij.so 234
                    break
235
        if not Connected:
236
            serverSide.append(order.id)
237
            continue
238
 
239
        dom = parseString("<dom>" + response + "</dom>")
240
        sssResponse = dom.getElementsByTagName('SSSResponse')[0]
241
        status = sssResponse.getElementsByTagName('Status')
242
        statusStr = status[0].childNodes[0].data
243
        if (statusStr == 'Failure'):
244
            error = sssResponse.getElementsByTagName('ErrorCode')
245
            errorCode = int(error[0].childNodes[0].data)
246
            if (errorCode == 999):
247
                duplicateRecord.append(order.id)
248
            elif (errorCode ==9999 or errorCode==99999):
249
                serverSide.append(order.id)
250
            else:
251
                dataFormat.append(order.id)
252
 
253
        elif (statusStr == 'Success'):
254
            successful.append(order.id)
255
            print "Insurance details successfully inserted.Order Id ",order.id
256
 
257
        else:
258
            serverSide.append(order.id)
259
 
260
    today = date.today()
261
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
262
    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))
263
    print mail_body
264
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["rajveer.singh@shop2020.in","kshitij.sood@shop2020.in"], "Insurance submission result for date " + datestr, mail_body, [], [], [])
8599 kshitij.so 265
 
266
    if(len(args)>1):
267
        print "Exiting.Dont want to run delivered_orders() and returned_orders() again."
268
        sys.exit(0)
8549 kshitij.so 269
 
270
 
271
def getValidDateFormat(dateToFormat):
272
    return str(dateToFormat).replace('-','')
273
 
274
def getDateFormatForDob(dateToFormat):
8550 kshitij.so 275
    if (dateToFormat=='Organisation'):
276
        return '19700101'
8549 kshitij.so 277
    return str(datetime.strptime(dateToFormat,"%b %d %Y").date()).replace('-','')
278
 
279
def getDateFormatForDob2(dateToFormat):
280
    return str(datetime.strptime(dateToFormat,"%d %b %Y").date()).replace('-','')
8605 kshitij.so 281
 
282
def getValidName(nameToFormat):
283
    pattern = r'[^\.a-zA-Z\ \']'
284
    return re.sub(pattern,"",nameToFormat)
6908 rajveer 285
 
6964 rajveer 286
def main():
8599 kshitij.so 287
    submitDeliveredOrdersDetails(sys.argv)
8550 kshitij.so 288
    delivered_orders()
6964 rajveer 289
    returned_orders()
290
 
6908 rajveer 291
if __name__ == '__main__':
292
    main()
293