| 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()
|