Subversion Repositories SmartDukaan

Rev

Rev 5005 | Rev 5052 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5005 Rev 5047
Line 30... Line 30...
30
from urllib2 import HTTPBasicAuthHandler
30
from urllib2 import HTTPBasicAuthHandler
31
import datetime
31
import datetime
32
import sys
32
import sys
33
import urllib2
33
import urllib2
34
import calendar
34
import calendar
-
 
35
from functools import partial
-
 
36
 
-
 
37
import threading
-
 
38
 
-
 
39
to_addresses = ["cnc.center@shop2020.in", "ashutosh.saxena@shop2020.in"]
-
 
40
from_user = "cnc.center@shop2020.in"
-
 
41
from_pwd = "5h0p2o2o"
35
 
42
 
36
def initialize():
43
def initialize():
37
    DataService.initialize()
44
    DataService.initialize()
38
 
45
 
39
def get_all_items_by_status(status, offset=0, limit=None):
46
def get_all_items_by_status(status, offset=0, limit=None):
Line 152... Line 159...
152
        raise InventoryServiceException(101, "Missing id for update")
159
        raise InventoryServiceException(101, "Missing id for update")
153
    
160
    
154
    validate_item_prices(item)
161
    validate_item_prices(item)
155
    
162
    
156
    ds_item = get_item(item.id)
163
    ds_item = get_item(item.id)
157
    
164
    message = ""
158
    if not ds_item:
165
    if not ds_item:
159
        raise InventoryServiceException(101, "Item missing in our database")
166
        raise InventoryServiceException(101, "Item missing in our database")
160
    
167
    
161
    if item.productGroup:
168
    if item.productGroup:
162
        ds_item.product_group = item.productGroup 
169
        ds_item.product_group = item.productGroup 
Line 170... Line 177...
170
    ds_item.comments = item.comments
177
    ds_item.comments = item.comments
171
    
178
    
172
    ds_item.catalog_item_id = item.catalogItemId
179
    ds_item.catalog_item_id = item.catalogItemId
173
 
180
 
174
    ds_item.mrp = item.mrp
181
    ds_item.mrp = item.mrp
-
 
182
    if ds_item.sellingPrice or item.sellingPrice:
-
 
183
        if ds_item.sellingPrice != item.sellingPrice:
-
 
184
            message += "Selling Price is changed from {0} to {1}.\n".format(ds_item.sellingPrice, item.sellingPrice)
-
 
185
        
175
    ds_item.sellingPrice = item.sellingPrice
186
    ds_item.sellingPrice = item.sellingPrice
176
 
187
 
177
    ds_item.weight = item.weight
188
    ds_item.weight = item.weight
178
    
189
    
179
    if ds_item.status != item.itemStatus:
190
    if ds_item.status != item.itemStatus:
180
        add_status_change_log(ds_item, item.itemStatus)
191
        add_status_change_log(ds_item, item.itemStatus)
-
 
192
        if item.itemStatus == status.PHASED_OUT:
-
 
193
            message += "Item is phased out."
181
        ds_item.status = item.itemStatus
194
        ds_item.status = item.itemStatus
182
    if item.status_description:
195
    if item.status_description:
183
        ds_item.status_description = item.status_description
196
        ds_item.status_description = item.status_description
184
    
197
    
185
    if item.startDate:
198
    if item.startDate:
Line 192... Line 205...
192
        ds_item.retireDate = None
205
        ds_item.retireDate = None
193
    
206
    
194
    ds_item.feature_id = item.featureId
207
    ds_item.feature_id = item.featureId
195
    ds_item.feature_description = item.featureDescription
208
    ds_item.feature_description = item.featureDescription
196
    
209
    
-
 
210
    if ds_item.bestDealText or item.bestDealText:
-
 
211
        if item.bestDealText != ds_item.bestDealText:
-
 
212
            message += "Promotion text is changed from '{0}' to '{1}\n".format(ds_item.bestDealText, item.bestDealText)
197
    ds_item.bestDealText = item.bestDealText
213
    ds_item.bestDealText = item.bestDealText
198
    ds_item.bestDealValue = item.bestDealValue
214
    ds_item.bestDealValue = item.bestDealValue
199
    ds_item.bestSellingRank = item.bestSellingRank
215
    ds_item.bestSellingRank = item.bestSellingRank
200
    
216
    
201
    ds_item.defaultForEntity = item.defaultForEntity
217
    ds_item.defaultForEntity = item.defaultForEntity
-
 
218
    
-
 
219
    if ds_item.risky or item.risky:
-
 
220
        if ds_item.risky != item.risky:
-
 
221
            message += "Risky flag is changed to {0}\n".format(set)
-
 
222
    
202
    ds_item.risky = item.risky
223
    ds_item.risky = item.risky
203
    
224
    
204
    if item.expectedDelay is not None:
225
    if item.expectedDelay is not None:
205
        ds_item.expectedDelay = item.expectedDelay
226
        ds_item.expectedDelay = item.expectedDelay
206
        
227
        
Line 216... Line 237...
216
    ds_item.isWarehousePreferenceSticky = item.isWarehousePreferenceSticky
237
    ds_item.isWarehousePreferenceSticky = item.isWarehousePreferenceSticky
217
    
238
    
218
    ds_item.updatedOn = datetime.datetime.now()
239
    ds_item.updatedOn = datetime.datetime.now()
219
    
240
    
220
    session.commit();
241
    session.commit();
-
 
242
    subject = "Item '{0}' is updated in Catalog. Id is {1}".format(__get_product_name(ds_item),ds_item.id)
-
 
243
    if message:
-
 
244
        __send_mail(subject, message)
221
    return ds_item.id
245
    return ds_item.id
222
 
246
 
223
def add_item(item):
247
def add_item(item):
224
    if not item:
248
    if not item:
225
        raise InventoryServiceException(108, "Bad item in request")
249
        raise InventoryServiceException(108, "Bad item in request")
Line 316... Line 340...
316
        ds_item.product_group = similar_item.product_group
340
        ds_item.product_group = similar_item.product_group
317
        ds_item.status = similar_item.status
341
        ds_item.status = similar_item.status
318
        ds_item.status_description = similar_item.status_description
342
        ds_item.status_description = similar_item.status_description
319
    
343
    
320
    session.commit();
344
    session.commit();
-
 
345
    subject = "New item is added. Id is " + ds_item.id
-
 
346
    message = "Category : {6}, Brand : {0}, Model : {1}, Model Number : {2}\nColor : {3}, Selling Price : {4}, Mrp : {5}, \nPromotion Text : {7}".format(item.brand, item.modelNumber, item.modelName, item.color, item.sellingPrice, item.mrp, item.category, item.bestDealText)
-
 
347
    __send_mail(subject, message)
321
    return ds_item.id
348
    return ds_item.id
322
 
349
 
323
def update_inventory_history(warehouse_id, timestamp, availability):
350
def update_inventory_history(warehouse_id, timestamp, availability):
324
    warehouse = get_Warehouse(warehouse_id)
351
    warehouse = get_Warehouse(warehouse_id)
325
    if not warehouse:
352
    if not warehouse:
Line 521... Line 548...
521
        raise InventoryServiceException(108, "item id not present")
548
        raise InventoryServiceException(108, "item id not present")
522
    add_status_change_log(item, new_status)
549
    add_status_change_log(item, new_status)
523
    item.status = new_status
550
    item.status = new_status
524
    if item.status == status.PHASED_OUT:
551
    if item.status == status.PHASED_OUT:
525
        item.status_description = "This item has been phased out"
552
        item.status_description = "This item has been phased out"
-
 
553
        __send_mail("Item '{0}' is Phased-Out. Item id is {1}".format(__get_product_name(item), item_id), "")
526
    elif item.status == status.DELETED:
554
    elif item.status == status.DELETED:
527
        item.status_description = "This item has been deleted"
555
        item.status_description = "This item has been deleted"
528
    elif item.status == status.PAUSED:
556
    elif item.status == status.PAUSED:
529
        item.status_description = "This item is currently out of stock"      
557
        item.status_description = "This item is currently out of stock"      
530
    elif item.status == status.PAUSED_BY_RISK:
558
    elif item.status == status.PAUSED_BY_RISK:
531
        item.status_description = "This item is currently out of stock"
559
        item.status_description = "This item is currently out of stock"
532
        #This will clear cache from tomcat
560
        #This will clear cache from tomcat
533
        __clear_homepage_cache()  
561
        __clear_homepage_cache()  
534
    elif item.status == status.ACTIVE:
562
    elif item.status == status.ACTIVE:
535
        item.status_description = "This item is active"
563
        item.status_description = "This item is active"
-
 
564
        __send_mail("Item '{0}' is Active. Item id is {1}".format(__get_product_name(item), item_id), "")
536
    elif item.status == status.IN_PROCESS:
565
    elif item.status == status.IN_PROCESS:
537
        item.status_description = "This item is in process"
566
        item.status_description = "This item is in process"
538
    elif item.status == status.CONTENT_COMPLETE:
567
    elif item.status == status.CONTENT_COMPLETE:
539
        item.status_description = "This item is in process"
568
        item.status_description = "This item is in process"
540
    session.commit()
569
    session.commit()
Line 1152... Line 1181...
1152
        raise InventoryServiceException(101, "Vendor not found for vendorId " + str(vendorId))
1181
        raise InventoryServiceException(101, "Vendor not found for vendorId " + str(vendorId))
1153
    
1182
    
1154
    try:
1183
    try:
1155
        item = Item.query.filter_by(id=itemId).one()
1184
        item = Item.query.filter_by(id=itemId).one()
1156
    except:
1185
    except:
1157
        raise InventoryServiceException(101, "Item not found for vendorId " + str(itemId))
1186
        raise InventoryServiceException(101, "Item not found for itemId " + str(itemId))
1158
    
1187
    
1159
    validate_vendor_prices(to_t_item(item), vendorItemPricing)
1188
    validate_vendor_prices(to_t_item(item), vendorItemPricing)
1160
    
1189
    
1161
    try:
1190
    try:
1162
        ds_vendorItemPricing = VendorItemPricing.query.filter(and_(VendorItemPricing.vendor==vendor, VendorItemPricing.item==item)).one()
1191
        ds_vendorItemPricing = VendorItemPricing.query.filter(and_(VendorItemPricing.vendor==vendor, VendorItemPricing.item==item)).one()
1163
    except:
1192
    except:
1164
        ds_vendorItemPricing = VendorItemPricing()
1193
        ds_vendorItemPricing = VendorItemPricing()
1165
        ds_vendorItemPricing.vendor = vendor
1194
        ds_vendorItemPricing.vendor = vendor
1166
        ds_vendorItemPricing.item = item
1195
        ds_vendorItemPricing.item = item
1167
    
1196
    
-
 
1197
    subject = ""
-
 
1198
    message = ""
1168
    if vendorItemPricing.mop:
1199
    if vendorItemPricing.mop:
1169
        ds_vendorItemPricing.mop = vendorItemPricing.mop
1200
        ds_vendorItemPricing.mop = vendorItemPricing.mop
1170
    if vendorItemPricing.dealerPrice:
1201
    if vendorItemPricing.dealerPrice:
1171
        ds_vendorItemPricing.dealerPrice = vendorItemPricing.dealerPrice
1202
        ds_vendorItemPricing.dealerPrice = vendorItemPricing.dealerPrice
1172
    if vendorItemPricing.transferPrice:
1203
    if vendorItemPricing.transferPrice:
-
 
1204
        if vendorItemPricing.transferPrice != ds_vendorItemPricing.transfer_price:
-
 
1205
            message = "Transfer price for Item '{0}' \nand Vendor:{1} is changed from {2} to {3}.".format(__get_product_name(item), vendor.name, ds_vendorItemPricing.transfer_price, vendorItemPricing.transferPrice)
-
 
1206
            subject = "Alert:Change in Transfer Price"
1173
        ds_vendorItemPricing.transfer_price = vendorItemPricing.transferPrice
1207
        ds_vendorItemPricing.transfer_price = vendorItemPricing.transferPrice
1174
    
1208
    
1175
    session.commit()
1209
    session.commit()
-
 
1210
    if subject:
-
 
1211
        __send_mail(subject, message)
1176
    return
1212
    return
1177
 
1213
 
1178
def add_vendor_item_mapping(key, vendorItemMapping):
1214
def add_vendor_item_mapping(key, vendorItemMapping):
1179
    if not vendorItemMapping:
1215
    if not vendorItemMapping:
1180
        raise InventoryServiceException(108, "Bad vendorItemMapping in request")
1216
        raise InventoryServiceException(108, "Bad vendorItemMapping in request")
Line 1291... Line 1327...
1291
        print "Not able to log risky flag change"
1327
        print "Not able to log risky flag change"
1292
    item.risky = risky
1328
    item.risky = risky
1293
    if not risky and item.status == status.PAUSED_BY_RISK:
1329
    if not risky and item.status == status.PAUSED_BY_RISK:
1294
        change_item_status(item.id, status.ACTIVE)
1330
        change_item_status(item.id, status.ACTIVE)
1295
    session.commit()
1331
    session.commit()
-
 
1332
    flag = "ON" if risky else "OFF"
-
 
1333
    subject = "Risky flag is {0} for Item {1}.".format(flag, __get_product_name(item))
-
 
1334
    __send_mail(subject,"")
1296
    
1335
    
1297
def get_items_for_mastersheet(categoryName, brand):
1336
def get_items_for_mastersheet(categoryName, brand):
1298
    if not categoryName or not brand:
1337
    if not categoryName or not brand:
1299
        raise InventoryServiceException(101, "Invalid category or brand in request")
1338
        raise InventoryServiceException(101, "Invalid category or brand in request")
1300
    
1339
    
Line 1718... Line 1757...
1718
        else:
1757
        else:
1719
            add_inventory(itemId, warehouseId, quantity)
1758
            add_inventory(itemId, warehouseId, quantity)
1720
    else:
1759
    else:
1721
        raise InventoryServiceException(101, 'VendorMapping not found for: ' + itemKey)
1760
        raise InventoryServiceException(101, 'VendorMapping not found for: ' + itemKey)
1722
    session.commit()
1761
    session.commit()
-
 
1762
 
-
 
1763
def __send_mail(subject, message):
-
 
1764
    thread = threading.Thread(target=partial(mail, from_user, from_pwd, to_addresses, subject, message))
-
 
1765
    thread.start()