Subversion Repositories SmartDukaan

Rev

Rev 7335 | Rev 8550 | 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,\
212
                                         '0',line.total_price,order.customer_name,insurance.guardianName,dateOfBirth,str(order.id),\
213
                                         order.customer_mobilenumber,'')
214
 
215
                Connected=True
216
            except:
217
                print "Unable to insert sale record.Attempting again...."
218
                Attempt = Attempt+1
219
                if Attempt ==3:
220
                    break
221
        if not Connected:
222
            serverSide.append(order.id)
223
            continue
224
 
225
        dom = parseString("<dom>" + response + "</dom>")
226
        sssResponse = dom.getElementsByTagName('SSSResponse')[0]
227
        status = sssResponse.getElementsByTagName('Status')
228
        statusStr = status[0].childNodes[0].data
229
        if (statusStr == 'Failure'):
230
            error = sssResponse.getElementsByTagName('ErrorCode')
231
            errorCode = int(error[0].childNodes[0].data)
232
            if (errorCode == 999):
233
                duplicateRecord.append(order.id)
234
            elif (errorCode ==9999 or errorCode==99999):
235
                serverSide.append(order.id)
236
            else:
237
                dataFormat.append(order.id)
238
 
239
        elif (statusStr == 'Success'):
240
            insurance.isDeclared = True
241
            declaredAmount += line.total_price
242
            successful.append(order.id)
243
            print "Insurance details successfully inserted.Order Id ",order.id
244
 
245
        else:
246
            serverSide.append(order.id)
247
 
248
    session.commit()
249
    client = CatalogClient().get_client()
250
    client.updateInsuranceDeclaredAmount(1, declaredAmount)
251
    today = date.today()
252
    datestr = str(today.year) + "-" + str(today.month) + "-" + str(today.day)
253
    insurer = client.getInsurer(1)
254
    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), "", [], [], [])
255
    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))
256
    print mail_body
257
    EmailAttachmentSender.mail("cnc.center@shop2020.in", "5h0p2o2o", ["rajveer.singh@shop2020.in","kshitij.sood@shop2020.in"], "Insurance submission result for date " + datestr, mail_body, [], [], [])
258
 
259
 
260
 
261
def getValidDateFormat(dateToFormat):
262
    return str(dateToFormat).replace('-','')
263
 
264
def getDateFormatForDob(dateToFormat):
265
    return str(datetime.strptime(dateToFormat,"%b %d %Y").date()).replace('-','')
266
 
267
def getDateFormatForDob2(dateToFormat):
268
    return str(datetime.strptime(dateToFormat,"%d %b %Y").date()).replace('-','')
6908 rajveer 269
 
6964 rajveer 270
def main():
8549 kshitij.so 271
    submitDeliveredOrdersDetails()
272
    #delivered_orders()
6964 rajveer 273
    returned_orders()
274
 
6908 rajveer 275
if __name__ == '__main__':
276
    main()
277