Subversion Repositories SmartDukaan

Rev

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

Rev 5768 Rev 5944
Line 3... Line 3...
3
 
3
 
4
@author: Chandranshu
4
@author: Chandranshu
5
'''
5
'''
6
from elixir import metadata, setup_all, session
6
from elixir import metadata, setup_all, session
7
from shop2020.clients.CatalogClient import CatalogClient
7
from shop2020.clients.CatalogClient import CatalogClient
-
 
8
from shop2020.clients.InventoryClient import InventoryClient
8
from shop2020.clients.TransactionClient import TransactionClient
9
from shop2020.clients.TransactionClient import TransactionClient
9
from shop2020.purchase.main.model.Invoice import Invoice
10
from shop2020.purchase.main.model.Invoice import Invoice
10
from shop2020.purchase.main.model.LineItem import LineItem
11
from shop2020.purchase.main.model.LineItem import LineItem
11
from shop2020.purchase.main.model.Purchase import Purchase
12
from shop2020.purchase.main.model.Purchase import Purchase
12
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
13
from shop2020.purchase.main.model.PurchaseOrder import PurchaseOrder
13
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
14
from shop2020.purchase.main.model.RevisionedPurchaseOrder import \
14
    RevisionedPurchaseOrder
15
    RevisionedPurchaseOrder
15
from shop2020.purchase.main.model.Supplier import Supplier
16
from shop2020.purchase.main.model.Supplier import Supplier
16
from shop2020.thriftpy.generic.ttypes import ExceptionType
17
from shop2020.thriftpy.generic.ttypes import ExceptionType
17
from shop2020.thriftpy.model.v1.catalog.ttypes import WarehouseType, \
18
from shop2020.thriftpy.model.v1.inventory.ttypes import WarehouseType, \
18
    InventoryType
19
    InventoryType
19
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
20
from shop2020.thriftpy.model.v1.order.ttypes import OrderStatus
20
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
21
from shop2020.thriftpy.purchase.ttypes import PurchaseServiceException, POStatus, \
21
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
22
    PurchaseOrder as TPurchaseOrder, LineItem as TLineItem
22
from shop2020.utils.Utils import to_py_date
23
from shop2020.utils.Utils import to_py_date
Line 179... Line 180...
179
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId)
180
            pending_orders = transactionClient.getOrdersInBatch([OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.ACCEPTED], 0, 0, warehouseId)
180
 
181
 
181
            if not pending_orders:
182
            if not pending_orders:
182
                return purchaseOrders
183
                return purchaseOrders
183
 
184
 
184
            catalog_client = CatalogClient().get_client()
185
            inventory_client = InventoryClient().get_client()
185
            availability = {}
186
            availability = {}
186
            
187
            
187
            warehouses = catalog_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)
188
            ourGoodWarehouseIds = [w.id for w in inventory_client.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, None, warehouseId)]
-
 
189
            itemInventorySnapshot = inventory_client.getInventorySnapshot(0)
188
            for warehouse in warehouses:
190
            for itemId, itemInventory in itemInventorySnapshot.iteritems():
189
                goodWarehouseId = warehouse.id
191
                item = self.__get_item_from_master(itemId)
190
                for item in catalog_client.getAllItemsForWarehouse(goodWarehouseId):
192
                for warehouseId, quantity in itemInventory.availability.iteritems():
191
                    itemInventory = catalog_client.getItemInventoryByItemId(item.id)
193
                    if warehouseId in ourGoodWarehouseIds:
192
                    if availability.has_key(item.id):
194
                        if availability.has_key(item.id):
193
                        availability[item.id] = [availability[item.id][0] + itemInventory.availability[goodWarehouseId], item]
195
                            availability[item.id] = [availability[item.id][0] + quantity, item]
194
                    else:
196
                        else:
195
                        availability[item.id] = [itemInventory.availability[goodWarehouseId], item]
197
                            availability[item.id] = [quantity, item]
196
 
198
 
197
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
199
            unfulfilledPurchaseOrders = PurchaseOrder.query.filter(or_(PurchaseOrder.status == POStatus.PARTIALLY_FULFILLED, PurchaseOrder.status == POStatus.READY)).all()
198
            for purchaseOrder in unfulfilledPurchaseOrders:
200
            for purchaseOrder in unfulfilledPurchaseOrders:
199
                for lineitem in purchaseOrder.lineitems:
201
                for lineitem in purchaseOrder.lineitems:
200
                    if availability.has_key(lineitem.itemId):
202
                    if availability.has_key(lineitem.itemId):
201
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
203
                        availability[lineitem.itemId] = [availability[lineitem.itemId][0] + lineitem.unfulfilledQuantity, availability[lineitem.itemId][1]]
202
                    else:
204
                    else:
203
                        item = catalog_client.getItem(lineitem.itemId)
205
                        item = self.__get_item_from_master(lineitem.itemId)
204
                        availability[item.id] = [lineitem.unfulfilledQuantity, item]
206
                        availability[item.id] = [lineitem.unfulfilledQuantity, item]
205
 
207
 
206
            codRequirements = {}
208
            codRequirements = {}
207
            requirements = {}
209
            requirements = {}
208
            for order in pending_orders:
210
            for order in pending_orders:
Line 232... Line 234...
232
                        if (netRequirements.has_key(item.preferredVendor)):
234
                        if (netRequirements.has_key(item.preferredVendor)):
233
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
235
                            netRequirements[item.preferredVendor].append([item, requirementsCount - availabilityCount])
234
                        else:
236
                        else:
235
                            netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
237
                            netRequirements[item.preferredVendor] = [[item, requirementsCount - availabilityCount]];
236
                else:
238
                else:
237
                    item = catalog_client.getItem(itemId);
239
                    item = self.__get_item_from_master(itemId)
238
                    if item.preferredVendor is None:
240
                    if item.preferredVendor is None:
239
                        raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
241
                        raise PurchaseServiceException(101, 'Preferred Vendor missing for ' + " ".join([str(item.brand), str(item.modelName), str(item.modelNumber), str(item.color)]))
240
                    if (netRequirements.has_key(item.preferredVendor)):
242
                    if (netRequirements.has_key(item.preferredVendor)):
241
                        netRequirements[item.preferredVendor].append([item, requirementsCount])
243
                        netRequirements[item.preferredVendor].append([item, requirementsCount])
242
                    else:
244
                    else:
Line 262... Line 264...
262
                    t_po_lineitem.itemId = item.id
264
                    t_po_lineitem.itemId = item.id
263
                    t_po_lineitem.quantity = quantity
265
                    t_po_lineitem.quantity = quantity
264
                    if codRequirements.has_key(item.id):
266
                    if codRequirements.has_key(item.id):
265
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
267
                        t_po_lineitem.codCount = min(codRequirements[item.id], quantity)
266
                    try:
268
                    try:
267
                        item_pricing = catalog_client.getItemPricing(item.id, vendorId)
269
                        item_pricing = inventory_client.getItemPricing(item.id, vendorId)
268
                    except Exception as e:
270
                    except Exception as e:
269
                        vendor = self.getSupplier(vendorId)
271
                        vendor = self.getSupplier(vendorId)
270
                        print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
272
                        print 'Could not find transfer price for Item id: ' + str(item.id) + ' and vendor id: ' + str(vendorId)
271
                        print e
273
                        print e
272
                        raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
274
                        raise PurchaseServiceException(101, 'Transfer price missing for ' + vendor.name + ' and ' + " ".join([item.brand, item.modelName, item.modelNumber, item.color]))
Line 487... Line 489...
487
            return True
489
            return True
488
        except:
490
        except:
489
            return False
491
            return False
490
        finally:
492
        finally:
491
            self.close_session()
493
            self.close_session()
-
 
494
 
-
 
495
    def __get_item_from_master(self, item_id):
-
 
496
        client = CatalogClient("catalog_service_server_host_master", "catalog_service_server_port").get_client()
-
 
497
        return client.getItem(item_id)
492
498