| Line 18... |
Line 18... |
| 18 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
18 |
from shop2020.thriftpy.generic.ttypes import ExceptionType
|
| 19 |
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
|
19 |
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
|
| 20 |
InventoryType
|
20 |
InventoryType
|
| 21 |
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
|
21 |
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
|
| 22 |
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
|
22 |
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
|
| 23 |
PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
|
23 |
PurchaseOrder as TPurchaseOrder, LineItem as TLineItem, POType,\
|
| - |
|
24 |
PurchaseReturnType
|
| 24 |
from shop2020.utils.Utils import to_py_date
|
25 |
from shop2020.utils.Utils import to_py_date
|
| 25 |
from sqlalchemy import create_engine
|
26 |
from sqlalchemy import create_engine
|
| 26 |
from sqlalchemy.sql.expression import or_
|
27 |
from sqlalchemy.sql.expression import or_
|
| 27 |
import datetime
|
28 |
import datetime
|
| 28 |
import logging
|
29 |
import logging
|
| Line 46... |
Line 47... |
| 46 |
setup_all(True)
|
47 |
setup_all(True)
|
| 47 |
|
48 |
|
| 48 |
def getPOforOurExternalBilling(self):
|
49 |
def getPOforOurExternalBilling(self):
|
| 49 |
todayDate = datetime.datetime.now()
|
50 |
todayDate = datetime.datetime.now()
|
| 50 |
todayDate = todayDate.replace(hour=0)
|
51 |
todayDate = todayDate.replace(hour=0)
|
| 51 |
purchaseOrder = PurchaseOrder.query.filter(PurchaseOrder.supplierId == 1).filter(PurchaseOrder.createdAt > todayDate).first()
|
52 |
purchaseOrder = PurchaseOrder.query.filter(PurchaseOrder.supplierId == 1).filter(PurchaseOrder.createdAt > todayDate).filter(PurchaseOrder.type == POType.VIRTUAL).first()
|
| 52 |
if purchaseOrder is None:
|
53 |
if purchaseOrder is None:
|
| 53 |
t_purchaseOrder = TPurchaseOrder()
|
54 |
t_purchaseOrder = TPurchaseOrder()
|
| 54 |
t_purchaseOrder.supplierId = 1
|
55 |
t_purchaseOrder.supplierId = 1
|
| 55 |
t_purchaseOrder.createdAt = datetime.datetime.now()
|
56 |
t_purchaseOrder.createdAt = datetime.datetime.now()
|
| 56 |
t_purchaseOrder.status = 0
|
57 |
t_purchaseOrder.status = 0
|
| 57 |
t_purchaseOrder.totalCost = 0
|
58 |
t_purchaseOrder.totalCost = 0
|
| 58 |
t_purchaseOrder.poNumber = 'Ours-Ext-' + str(todayDate.year) + "-" + str(todayDate.month) + "-" + str(todayDate.day)
|
59 |
t_purchaseOrder.poNumber = 'Ours-Ext-' + str(todayDate.year) + "-" + str(todayDate.month) + "-" + str(todayDate.day)
|
| - |
|
60 |
t_purchaseOrder.type = POType.VIRTUAL
|
| 59 |
purchaseOrder = PurchaseOrder(t_purchaseOrder)
|
61 |
purchaseOrder = PurchaseOrder(t_purchaseOrder)
|
| 60 |
session.commit()
|
62 |
session.commit()
|
| 61 |
return purchaseOrder.id
|
63 |
return purchaseOrder.id
|
| 62 |
|
64 |
|
| 63 |
def updatelineItemforOursExternalBilling(self, poId, itemId, unitPrice):
|
65 |
def updatelineItemforOursExternalBilling(self, poId, itemId, unitPrice):
|
| Line 116... |
Line 118... |
| 116 |
|
118 |
|
| 117 |
Parameters:
|
119 |
Parameters:
|
| 118 |
- status
|
120 |
- status
|
| 119 |
"""
|
121 |
"""
|
| 120 |
try:
|
122 |
try:
|
| 121 |
pos = PurchaseOrder.query.filter_by(status=status).all()
|
123 |
pos = PurchaseOrder.query.filter_by(status=status, type=POType.REAL).all()
|
| 122 |
return [po.to_thrift_object() for po in pos ]
|
124 |
return [po.to_thrift_object() for po in pos ]
|
| 123 |
finally:
|
125 |
finally:
|
| 124 |
self.close_session()
|
126 |
self.close_session()
|
| 125 |
|
127 |
|
| 126 |
def getPurchaseOrder(self, id):
|
128 |
def getPurchaseOrder(self, id):
|
| Line 258... |
Line 260... |
| 258 |
if availability.has_key(item.id):
|
260 |
if availability.has_key(item.id):
|
| 259 |
availability[item.id] = [availability[item.id][0] + quantity, item]
|
261 |
availability[item.id] = [availability[item.id][0] + quantity, item]
|
| 260 |
else:
|
262 |
else:
|
| 261 |
availability[item.id] = [quantity, item]
|
263 |
availability[item.id] = [quantity, item]
|
| 262 |
|
264 |
|
| 263 |
unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
|
265 |
unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).filter(PurchaseOrder.type == POType.REAL).all()
|
| 264 |
for purchaseOrder in unfulfilledPurchaseOrders:
|
266 |
for purchaseOrder in unfulfilledPurchaseOrders:
|
| 265 |
for lineitem in purchaseOrder.lineitems:
|
267 |
for lineitem in purchaseOrder.lineitems:
|
| 266 |
if availability.has_key(lineitem.itemId):
|
268 |
if availability.has_key(lineitem.itemId):
|
| 267 |
availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
|
269 |
availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
|
| 268 |
else:
|
270 |
else:
|
| Line 283... |
Line 285... |
| 283 |
if order.cod:
|
285 |
if order.cod:
|
| 284 |
if (codRequirements.has_key(lineitem.item_id)):
|
286 |
if (codRequirements.has_key(lineitem.item_id)):
|
| 285 |
codRequirements[lineitem.item_id] += lineitem.quantity
|
287 |
codRequirements[lineitem.item_id] += lineitem.quantity
|
| 286 |
else:
|
288 |
else:
|
| 287 |
codRequirements[lineitem.item_id] = lineitem.quantity
|
289 |
codRequirements[lineitem.item_id] = lineitem.quantity
|
| 288 |
|
290 |
|
| - |
|
291 |
advancedPOParameters = {}
|
| - |
|
292 |
for key in requirements:
|
| - |
|
293 |
inventory_client = InventoryClient().get_client()
|
| - |
|
294 |
oosStatuses = inventory_client.getOosStatusesForXDaysForItem(key,5)
|
| - |
|
295 |
salesCount = 0
|
| - |
|
296 |
numDaysInStock = 0
|
| - |
|
297 |
for oosStatus in oosStatuses:
|
| - |
|
298 |
if oosStatus.status == False:
|
| - |
|
299 |
salesCount = salesCount + oosStatus.num_orders
|
| - |
|
300 |
numDaysInStock = numDaysInStock + 1
|
| - |
|
301 |
avgSales = salesCount/numDaysInStock
|
| - |
|
302 |
if avgSales>1:
|
| - |
|
303 |
itemStockPurchaseParam = inventory_client.getItemStockPurchaseParams(key)
|
| - |
|
304 |
advancedPOParameters[key] = [avgSales * itemStockPurchaseParam.numOfDaysStock, avgSales, numDaysInStock, itemStockPurchaseParam.minStockLevel, itemStockPurchaseParam.numOfDaysStock]
|
| - |
|
305 |
|
| 289 |
netRequirements = {}
|
306 |
netRequirements = {}
|
| 290 |
for itemId in requirements.keys():
|
307 |
for itemId in requirements.keys():
|
| 291 |
requirementsCount = requirements.get(itemId)
|
308 |
requirementsCount = requirements.get(itemId)
|
| 292 |
if availability.has_key(itemId):
|
309 |
if availability.has_key(itemId):
|
| 293 |
availabilityCount = availability.get(itemId)[0]
|
310 |
availabilityCount = availability.get(itemId)[0]
|
| Line 325... |
Line 342... |
| 325 |
t_po_lineitem.modelNumber = item.modelNumber
|
342 |
t_po_lineitem.modelNumber = item.modelNumber
|
| 326 |
t_po_lineitem.modelName = item.modelName
|
343 |
t_po_lineitem.modelName = item.modelName
|
| 327 |
t_po_lineitem.color = item.color
|
344 |
t_po_lineitem.color = item.color
|
| 328 |
t_po_lineitem.itemId = item.id
|
345 |
t_po_lineitem.itemId = item.id
|
| 329 |
t_po_lineitem.quantity = quantity
|
346 |
t_po_lineitem.quantity = quantity
|
| - |
|
347 |
|
| - |
|
348 |
t_po_lineitem.availableQuantity = availability[item.id][0]
|
| - |
|
349 |
t_po_lineitem.reservedQuantity = requirements[lineitem.item_id]
|
| - |
|
350 |
t_po_lineitem.suggestedQuantity = advancedPOParameters[item.id][0]
|
| - |
|
351 |
t_po_lineitem.avgSales = advancedPOParameters[item.id][1]
|
| - |
|
352 |
t_po_lineitem.numberOfDaysInStock = advancedPOParameters[item.id][2]
|
| - |
|
353 |
t_po_lineitem.minStockLevel = advancedPOParameters[item.id][3]
|
| - |
|
354 |
t_po_lineitem.numberOfDaysStock = advancedPOParameters[item.id][2]
|
| 330 |
if codRequirements.has_key(item.id):
|
355 |
if codRequirements.has_key(item.id):
|
| 331 |
t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
|
356 |
t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
|
| 332 |
try:
|
357 |
try:
|
| 333 |
item_pricing = inventory_client.getItemPricing(item.id, vendorId)
|
358 |
item_pricing = inventory_client.getItemPricing(item.id, vendorId)
|
| 334 |
except Exception as e:
|
359 |
except Exception as e:
|
| Line 582... |
Line 607... |
| 582 |
purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId, t_purchaseReturn.amount)
|
607 |
purchaseReturn = PurchaseReturn(t_purchaseReturn.vendorId, t_purchaseReturn.amount)
|
| 583 |
purchaseReturn.vendorId = t_purchaseReturn.vendorId
|
608 |
purchaseReturn.vendorId = t_purchaseReturn.vendorId
|
| 584 |
purchaseReturn.amount = t_purchaseReturn.amount
|
609 |
purchaseReturn.amount = t_purchaseReturn.amount
|
| 585 |
purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
|
610 |
purchaseReturn.returnTimestamp = to_py_date(t_purchaseReturn.returnTimestamp)
|
| 586 |
purchaseReturn.isSettled = False
|
611 |
purchaseReturn.isSettled = False
|
| - |
|
612 |
purchaseReturn.type = t_purchaseReturn.type
|
| 587 |
session.commit()
|
613 |
session.commit()
|
| 588 |
return purchaseReturn.id
|
614 |
return purchaseReturn.id
|
| 589 |
except Exception as e:
|
615 |
except Exception as e:
|
| 590 |
print e
|
616 |
print e
|
| 591 |
raise PurchaseServiceException(101, 'Exception while creating Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
|
617 |
raise PurchaseServiceException(101, 'Exception while creating Purchase Return for ' + purchaseReturn.vendorId + ' for Rs' + purchaseReturn.amount)
|
| Line 595... |
Line 621... |
| 595 |
def getUnsettledPurchaseReturns(self):
|
621 |
def getUnsettledPurchaseReturns(self):
|
| 596 |
'''
|
622 |
'''
|
| 597 |
For getting all unsettled Purchase Returns
|
623 |
For getting all unsettled Purchase Returns
|
| 598 |
'''
|
624 |
'''
|
| 599 |
try:
|
625 |
try:
|
| 600 |
purchaseReturns = PurchaseReturn.query.filter_by(isSettled=False).all()
|
626 |
purchaseReturns = PurchaseReturn.query.filter_by(isSettled=False).filter_by(type=PurchaseReturnType.REAL).all()
|
| 601 |
return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
|
627 |
return [purchasereturn.to_thrift_object() for purchasereturn in purchaseReturns]
|
| 602 |
except Exception as e:
|
628 |
except Exception as e:
|
| 603 |
print e
|
629 |
print e
|
| 604 |
raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
|
630 |
raise PurchaseServiceException(101, 'Exception while fetching all Unsettled Purchase Returns')
|
| 605 |
finally:
|
631 |
finally:
|