Subversion Repositories SmartDukaan

Rev

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

'''
Created on 29-Mar-2010

@author: ashish
'''

from elixir import *
from elixir.entity import Entity
from elixir.fields import Field
from sqlalchemy.types import Integer
from elixir.relationships import OneToMany, ManyToOne
import datetime



#===============================================================================
# Different entities in the model
#===============================================================================

class Transaction(Entity):
    
    id = Field(Integer, primary_key=True, autoincrement=True)
    createdOn = Field(DateTime)
    expected_delivery_time = Field(DateTime)
    status = Field(Integer)
    status_message = Field(String(100))
    customer_id = Field(Integer)
    shopping_cart_id = Field(Integer)
    payments = OneToMany("Payment")
    shipments = OneToMany("Shipment")
    lineitems = OneToMany("LineItem")
    trails = OneToMany("TransactionTrail")
    


class Payment(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    payment_id = Field(Integer)
    merchant_tx_id = Field(String(30))
    bank_tx_id = Field(String(30))
    mode = Field(String(30))
    amount = Field(Float)
    status = Field(Integer)
    status_message = Field(String(100))
    start_time = Field(DateTime)
    finish_time = Field(DateTime)
    transaction = ManyToOne("Transaction")
    
    def __repr__(self):
        return "Payment: id %d"%(self.id)
    

class Shipment(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    address = Field(String(100))
    tracking_id = Field(String(100))
    status = Field(Integer)
    status_message = Field(String(100))
    shipment_time = Field(DateTime)
    delivery_time = Field(DateTime)
    declared_value = Field(Float)
    insurance_value = Field(Float)
    weight = Field(Float)
    airway_bill_no = Field(String(30))
    provider = Field(String(30))
    transaction = ManyToOne("Transaction")
    lineitems = OneToMany("LineItem")
    
    def __repr__(self):
        return "Shipment: id %d"%(self.id)
    

class LineItem(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    added_on = Field(DateTime)
    item_id = Field(Integer)
    additional_info = OneToMany("AdditionalInfo")
    transaction = ManyToOne("Transaction")
    billing = ManyToOne("Billing")
    shipment = ManyToOne("Shipment")
    item_info = OneToOne("ItemInfo")
    def __repr__(self):
        return "id %d item_id %d"%(self.id, self.item_id)
    
class ItemInfo(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    price = Field(Float)
    weight = Field(Float)
    line_item = ManyToOne("LineItem")

class AdditionalInfo(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    key = Field(String(30))
    value = Field(String(100))
    line_item = ManyToOne("LineItem")
    
    def __repr__(self):
        return "Additonal info id %d key %s value %s" %(self.id, self.key, self.value)
    

class Billing(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    bill_number = Field(String(30))
    created_on = Field(DateTime)
    generated_by = Field(String(30))
    line_item = OneToMany("LineItem")
    
    
    def __repr__(self):
        return "Billing: billing id %d billno %s " % (self.id, self.bill_number)
    
class TransactionTrail(Entity):
    #using_options(auto_primarykey=False)
    id = Field(Integer, primary_key=True, autoincrement=True)
    field_changed = Field(String(30))
    old_value = Field(String(30))
    new_value = Field(String(30))
    description = Field(String(100))
    timestamp = Field(DateTime)
    transaction = ManyToOne("Transaction")
    

def initialize():
    metadata.bind = "sqlite:///Transactionsnew-elite.sqlite"
    metadata.bind.echo = True
    setup_all(True)


if __name__=="__main__":
    initialize()