Subversion Repositories SmartDukaan

Rev

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

'''
Created on 29-Jul-2011

@author: Chandranshu
'''
from elixir.entity import Entity
from elixir.fields import Field
from elixir.options import using_options, using_table_options
from elixir.relationships import ManyToOne
from shop2020.thriftpy.purchase.ttypes import LineItem as TLineItem
from shop2020.utils.Utils import to_java_date
from sqlalchemy.types import Integer, String, Float, DateTime, Boolean
import datetime


class LineItem(Entity):
    '''
    classdocs
    '''
    purchaseOrder = ManyToOne("PurchaseOrder", primary_key=True)
    itemId = Field(Integer, primary_key=True, autoincrement=False)
    productGroup = Field(String(100))
    brand = Field(String(100))
    modelNumber = Field(String(50))
    modelName = Field(String(50))
    color = Field(String(20))
    itemNumber = Field(String(20))
    quantity = Field(Float)
    unfulfilledQuantity = Field(Float)
    createdAt = Field(DateTime)
    unitPrice = Field(Float)
    nlc = Field(Float)
    fulfilled = Field(Boolean)
    availableQuantity = Field(Integer) 
    reservedQuantity = Field(Integer)
    avgSales = Field(Float)
    minStockLevel = Field(Integer)
    numberOfDaysStock = Field(Integer)
    suggestedQuantity = Field(Integer)
    numberOfDaysInStock = Field(Integer)
    rtoOrders = Field(Integer)
    lastXdaysSale = Field(String(50))
    previouslyOrderedQty = Field(Integer)
    mrp = Field(Float)
    nlcP = Field(Float)
    vatDiff = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

    def __init__(self, purchase_order, t_line_item):
        '''
        Constructor
        '''
        self.purchaseOrder = purchase_order
        self.itemId = t_line_item.itemId
        self.productGroup = t_line_item.productGroup
        self.brand = t_line_item.brand
        self.modelNumber = t_line_item.modelNumber
        self.modelName = t_line_item.modelName
        self.color = t_line_item.color
        self.itemNumber = t_line_item.itemNumber
        self.quantity = t_line_item.quantity
        self.unfulfilledQuantity = t_line_item.unfulfilledQuantity
        self.createdAt = datetime.datetime.now()
        self.unitPrice = t_line_item.unitPrice
        self.nlc = t_line_item.nlc
        self.fulfilled = False
        if t_line_item.availableQuantity:
            self.availableQuantity = t_line_item.availableQuantity
        if t_line_item.reservedQuantity:
            self.reservedQuantity = t_line_item.reservedQuantity
        if t_line_item.avgSales:
            self.avgSales = t_line_item.avgSales
        if t_line_item.minStockLevel:
            self.minStockLevel = t_line_item.minStockLevel
        if t_line_item.numberOfDaysStock:
            self.numberOfDaysStock = t_line_item.numberOfDaysStock
        if t_line_item.rtoOrders:
            self.rtoOrders = t_line_item.rtoOrders
        if t_line_item.suggestedQuantity:
            self.suggestedQuantity = t_line_item.suggestedQuantity
        if t_line_item.numberOfDaysInStock:
            self.numberOfDaysInStock = t_line_item.numberOfDaysInStock
        if t_line_item.lastXdaysSale:
            self.lastXdaysSale = t_line_item.lastXdaysSale
        if t_line_item.previouslyOrderedQty:
            self.previouslyOrderedQty = t_line_item.previouslyOrderedQty
        if t_line_item.mrp:
            self.mrp = t_line_item.mrp
        self.nlcP = t_line_item.nlcP
        self.vatDiff = t_line_item.vatDiff
        
    def to_thrift_object(self):
        t_line_item = TLineItem()
        t_line_item.orderId = self.purchaseOrder.id
        t_line_item.itemId = self.itemId
        #TODO: Fetch the next 5 items from the catalog service
        t_line_item.productGroup = self.productGroup
        t_line_item.brand = self.brand
        t_line_item.modelNumber = self.modelNumber
        t_line_item.modelName = self.modelName
        t_line_item.color = self.color
        t_line_item.itemNumber = self.itemNumber
        t_line_item.quantity = self.quantity
        if t_line_item.quantity < 0:
            t_line_item.quantity = 0
        t_line_item.unfulfilledQuantity = self.unfulfilledQuantity
        t_line_item.createdAt = to_java_date(self.createdAt)
        t_line_item.unitPrice = self.unitPrice
        t_line_item.nlc = self.nlc
        t_line_item.fulfilled = self.fulfilled
        t_line_item.availableQuantity = self.availableQuantity
        t_line_item.reservedQuantity = self.reservedQuantity
        t_line_item.avgSales = self.avgSales
        t_line_item.minStockLevel = self.minStockLevel
        t_line_item.numberOfDaysStock = self.numberOfDaysStock
        t_line_item.suggestedQuantity = self.suggestedQuantity
        t_line_item.numberOfDaysInStock = self.numberOfDaysInStock
        t_line_item.rtoOrders = self.rtoOrders
        t_line_item.lastXdaysSale = self.lastXdaysSale
        t_line_item.previouslyOrderedQty = self.previouslyOrderedQty
        t_line_item.mrp = self.mrp
        t_line_item.nlcP = self.nlcP
        t_line_item.vatDiff = self.vatDiff
        return t_line_item