Subversion Repositories SmartDukaan

Rev

Rev 103 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

'''
Created on 23-Mar-2010

@author: ashish
'''
from elixir import *
from shop2020.model.v1.catalog.impl import DataService
from shop2020.model.v1.catalog.impl.DataService import Category, Item, Vendor,\
    Warehouse, ItemInventoryHistory, CurrentInventorySnapshot
from shop2020.thriftpy.model.v1.catalog.ttypes import Category as TCategory,\
    CatalogServiceException
from shop2020.thriftpy.model.v1.catalog.ttypes import Item as TItem
from shop2020.thriftpy.model.v1.catalog.ttypes import Vendor as TVendor
from shop2020.thriftpy.model.v1.catalog.ttypes import Warehouse as TWarehouse
import datetime


def initialize():
    DataService.initialize()
    
def is_category_present(id_key):
    category = Category.get_by(id=id_key)
    if category:
        return True    
    return False

def get_category(id_key):
    category = Category.get_by(id=id_key)
    return category

def get_all_categories():
    return Category.query.all()

def get_all_items_for_category(category_id):
    category = Category.get_by(id=category_id)
    if not category:
        raise CatalogServiceException(108, "Some unforeseen error while obtaining")
    return category.items

def get_Item(item_id):
    return Item.get_by(id=item_id)

def get_Vendor(vendor_id):
    return Vendor.get_by(id=vendor_id)

def get_Warehouse(warehouse_id):
    return Warehouse.get_by(id=warehouse_id)

def get_all_warehouses_for_item(item_id):
    item = get_Item(item_id)
    if not item:
        raise CatalogServiceException(108, "Some unforeseen error while obtaining item")
    return item.get_all_warehouses

def add_warehouse(warehouse):
    warehouse = TWarehouse()
    ds_warehouse = Warehouse()
    ds_warehouse.id = warehouse.id
    ds_warehouse.location = warehouse.location
    session.commit()

def add_vendor(vendor):
    ds_vendor = Vendor()
    if not vendor:
        raise CatalogServiceException(108, "Bad vendor in request")
    ds_vendor.id = vendor.id
    ds_vendor.name = vendor.name
    session.commit()

def add_category(category):
    try: 
        ds_category = Category()
        
        ds_category.id = category.id
        ds_category.name = category.name
        ds_category.addedOn = datetime.datetime.now()
        ds_category.isRoot = category.isTopLevel
        if category.parent_id:
            ds_category.parent= Category.get_by(id=category.parent_id)
        
        if category.childCategories:
            for child in category.childCategories:
                ds_category.children.append(get_category(child))
        #save the category now
        session.commit()
        return True
    except:
        return False

def add_item_to_category(id, item):
    category = get_category(id)
    if not category:
        raise CatalogServiceException(101, "no such category exists")
    if not item:
        raise CatalogServiceException(104, "bad item")
    try:
        ds_item = Item()
        ds_item.category = category
        ds_item.id = item.id
        ds_item.name = item.name
        session.commit()
        return True
    except:
        return False
    
def update_inventory(item_id, warehouse_id, quantity, timestamp):
    item = get_Item(item_id)
    warehouse = get_Warehouse(warehouse_id) 
    time = datetime.datetime.fromtimestamp(timestamp)
    
    if not item:
        raise CatalogServiceException(106, "Item not found, how did you get this?")
    if not warehouse:
        raise CatalogServiceException(107, "Warehouse? Where?")
    try:
        item_inventory_history = ItemInventoryHistory()
        item_inventory_history.warehouse = warehouse
        item_inventory_history.item = item
        item_inventory_history.timestamp = time
        item_inventory_history.availability = quantity
        
        current_inventory_snapshot = CurrentInventorySnapshot.get_by(item=item, warehouse=warehouse)
        current_inventory_snapshot.availibility = quantity
        current_inventory_snapshot.checkedOn = time
        session.commit()
    except:
        raise CatalogServiceException(108, "Some unforeseen error while updating inventory")
    
def get_item_inventoy(item_id):
    
    inventory = Item.get_by(id=item_id).currentInventory
    if not inventory:
        raise CatalogServiceException(108, "Some unforeseen error while updating inventory")
    return inventory

def get_item_attributes(item_id):
    pass