Subversion Repositories SmartDukaan

Rev

Rev 8553 | Rev 8605 | 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
 
8599 kshitij.so 173
def submitDeliveredOrdersDetails(args):
8549 kshitij.so 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
    successful= []
180
    duplicateRecord = []
181
    serverSide = []
182
    dataFormat = []
183
    client = Client('http://www.insuregadget.ae/SSSWebService/SSSWebService.asmx?wsdl')
184
    header=client.factory.create('AuthHeader')
185
    header.Username  = 'saholic'
186
    header.Password  = '1Dfgh4@#'
187
    client.set_options(soapheaders=header)
8599 kshitij.so 188
 
189
 
190
    if (len(args)>1):
191
        insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.order_id.in_(args[1:])).all()
192
    else:
193
        insurances = InsuranceDetailForOrder.query.filter(InsuranceDetailForOrder.isDeclared == False).filter(InsuranceDetailForOrder.startDate >= todate).all()
8549 kshitij.so 194
    if not insurances:
195
        return
196
    for insurance in insurances:
197
        order = insurance.order
198
        if order.status != OrderStatus.DELIVERY_SUCCESS:
199
            continue
200
        try:
201
            dateOfBirth = getDateFormatForDob(insurance.dob)
202
        except:
203
            try:
204
                dateOfBirth = getDateFormatForDob2(insurance.dob)
205
            except:
206
                dataFormat.append(order.id)
207
                continue
208
        line = order.lineitems[0]
209
        Connected =False
210
        Attempt = 1
211
        while not Connected:
212
            try:
213
                response = client.service.InsertSalesRecord('SAHOLIC',line.serial_number,getValidDateFormat(order.billing_timestamp.date()),order.invoice_number,\
214
                                         'Mobile Phones',line.brand,xstr(line.model_name) + " " + xstr(line.model_number),line.unit_price,\
8553 kshitij.so 215
                                         0.0,line.total_price,order.customer_name,insurance.guardianName,dateOfBirth,str(order.id),\
8549 kshitij.so 216
                                         order.customer_mobilenumber,'')
8552 kshitij.so 217
                print ('SAHOLIC',line.serial_number,getValidDateFormat(order.billing_timestamp.date()),order.invoice_number,\
218
                                         'Mobile Phones',line.brand,xstr(line.model_name) + " " + xstr(line.model_number),line.unit_price,\
8553 kshitij.so 219
                                         0.0,line.total_price,order.customer_name,insurance.guardianName,dateOfBirth,str(order.id),\
8552 kshitij.so 220
                                         order.customer_mobilenumber,'')
221
                print "Response : ",response
8599 kshitij.so 222
                if response is None:
223
                    print "Unable to insert sale record.Empty Response came.Attempting again...."
224
                    if Attempt == 3:
225
                        break
226
                    Attempt+=1
227
                    continue
8549 kshitij.so 228
                Connected=True
229
            except:
230
                print "Unable to insert sale record.Attempting again...."
231
                Attempt = Attempt+1
8599 kshitij.so 232
                if Attempt == 3:
8549 kshitij.so 233
                    break
234
        if not Connected:
235
            serverSide.append(order.id)
236
            continue
237
 
238
        dom = parseString("<dom>" + response + "</dom>")
239
        sssResponse = dom.getElementsByTagName('SSSResponse')[0]
240
        status = sssResponse.getElementsByTagName('Status')
241
        statusStr = status[0].childNodes[0].data
242
        if (statusStr == 'Failure'):
243
            error = sssResponse.getElementsByTagName('ErrorCode')
244
            errorCode = int(error[0].childNodes[0].data)
245
            if (errorCode == 999):
246
                duplicateRecord.append(order.id)
247
            elif (errorCode ==9999 or errorCode==99999):
248
                serverSide.append(order.id)
249
            else:
250
                dataFormat.append(order.id)
251
 
252
        elif (statusStr == 'Success'):
253
            successful.append(order.id)
254
            print "Insurance details successfully inserted.Order Id ",order.id
255
 
256
        else:
257
            serverSide.append(order.id)
258
 
259
    today = date.today()
260
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
261
    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))
262
    print mail_body
263
    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 264
 
265
    if(len(args)>1):
266
        print "Exiting.Dont want to run delivered_orders() and returned_orders() again."
267
        sys.exit(0)
8549 kshitij.so 268
 
269
 
270
def getValidDateFormat(dateToFormat):
271
    return str(dateToFormat).replace('-','')
272
 
273
def getDateFormatForDob(dateToFormat):
8550 kshitij.so 274
    if (dateToFormat=='Organisation'):
275
        return '19700101'
8549 kshitij.so 276
    return str(datetime.strptime(dateToFormat,"%b %d %Y").date()).replace('-','')
277
 
278
def getDateFormatForDob2(dateToFormat):
279
    return str(datetime.strptime(dateToFormat,"%d %b %Y").date()).replace('-','')
6908 rajveer 280
 
6964 rajveer 281
def main():
8599 kshitij.so 282
    submitDeliveredOrdersDetails(sys.argv)
8550 kshitij.so 283
    delivered_orders()
6964 rajveer 284
    returned_orders()
285
 
6908 rajveer 286
if __name__ == '__main__':
287
    main()
288