Subversion Repositories SmartDukaan

Rev

Rev 635 | Rev 724 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
94 ashish 1
'''
2
Created on 22-Mar-2010
3
 
4
@author: ashish
5
'''
6
from elixir import *
7
from elixir.entity import Entity
8
from elixir.fields import Field
635 rajveer 9
from sqlalchemy.types import Integer, Binary
94 ashish 10
from elixir.relationships import OneToMany, ManyToOne
11
import datetime
12
 
501 rajveer 13
class BestSellers(Entity):
621 chandransh 14
    manufacturer_name = Field(String(100), primary_key=True)
15
    model_number = Field(String(50), primary_key=True)
16
    color = Field(String(20), primary_key=True)
17
    rank = Field(Integer)
18
    using_options(shortnames=True)
501 rajveer 19
 
94 ashish 20
class Warehouse(Entity):
122 ashish 21
    id = Field(Integer, primary_key=True, autoincrement=True)
483 rajveer 22
    location = Field(String(200))
103 ashish 23
    status = Field(Integer)
122 ashish 24
    addedOn = Field(DateTime)
483 rajveer 25
    lastCheckedOn = Field(DateTime)
26
    tinNumber = Field(String(50))
27
    pincode = Field(String(10))
28
    vendorString = Field(String(50))
94 ashish 29
    inventory = OneToMany('CurrentInventorySnapshot')
30
    inventoryHistory = OneToMany('ItemInventoryHistory')
643 chandransh 31
    logisticsLocation = Field(Integer)
94 ashish 32
 
33
    def __repr__(self):
34
        return "<warehouse>%s</warehouse>" %(self.location)
35
 
122 ashish 36
    @property
37
    def all_items(self):
38
        items = []
39
        for ci in self.inventory:
40
            items.append(ci.item)
41
        return items 
626 chandransh 42
 
43
class EntityIDGenerator(Entity):
44
    id=Field(Integer, primary_key=True)
45
    using_options(shortnames=True)
122 ashish 46
 
94 ashish 47
class Item(Entity):
122 ashish 48
    id = Field(Integer, primary_key=True, autoincrement=True)
483 rajveer 49
    manufacturer_name = Field(String(100))
50
    model_number = Field(String(50))
51
    model_name = Field(String(50))
609 chandransh 52
    color = Field(String(20))
626 chandransh 53
    category = Field(Integer)
483 rajveer 54
    comments = Field(String(200))
122 ashish 55
    catalog_item_id = Field(Integer)
483 rajveer 56
    vendor_item_id = Field(String(50))
122 ashish 57
    feature_id = Field(Integer)
58
    feature_description = Field(String(200))
483 rajveer 59
    mrp = Field(Float)
60
    mop = Field(Float)
61
    sellingPrice = Field(Float)
609 chandransh 62
    dealerPrice = Field(Float)
483 rajveer 63
    weight = Field(Float)
122 ashish 64
    addedOn = Field(DateTime)
609 chandransh 65
    updatedOn = Field(DateTime)
122 ashish 66
    startDate = Field(DateTime)
67
    retireDate = Field(DateTime)
483 rajveer 68
    status = Field(Integer)
609 chandransh 69
    bestDealText = Field(String(100))
630 chandransh 70
    bestDealValue = Field(Float)
621 chandransh 71
    bestSellingRank = Field(Integer)
94 ashish 72
    currentInventory = OneToMany('CurrentInventorySnapshot')
73
    inventoryHistory = OneToMany('ItemInventoryHistory')
103 ashish 74
    iteminfo = OneToMany("ItemInfo")
75
    statusChangeLog = OneToMany("ItemChangeLog")
76
 
94 ashish 77
    def __repr__(self):
122 ashish 78
        return "<Item>%d</item>" % (self.id)
94 ashish 79
 
122 ashish 80
    @property
94 ashish 81
    def get_total_inventory(self):
82
        if self.currentInventory:
83
            i = 0
84
            for entry in self.currentInventory:
85
                i += entry.availability
86
            return i
87
 
88
        else:
89
            return 0;
103 ashish 90
 
122 ashish 91
    @property
94 ashish 92
    def get_all_warehouses(self):
93
        warehouses = []
122 ashish 94
        for ci in self.currentInventory:
95
            warehouses.append(ci.warehouse)
94 ashish 96
        return warehouses
609 chandransh 97
 
103 ashish 98
class ItemInfo(Entity):
122 ashish 99
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 100
    key = Field(String(30))
101
    value = Field(String(100))
102
    item = ManyToOne("Item")
103
 
104
    def __repr__(self):
105
        return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)
115 ashish 106
 
94 ashish 107
 
108
class CurrentInventorySnapshot(Entity):
115 ashish 109
    #id = Field(Integer, primary_key=True)
483 rajveer 110
    #checkedOn = Field(DateTime, default=datetime.datetime.now())
94 ashish 111
    availibility = Field(Integer)
112
    item = ManyToOne("Item")
113
    warehouse = ManyToOne("Warehouse")
114
 
115
    def __repr__(self):
116
        return "<current inventory><availability> %s </availability><time>%s</time><item>%s</item><warehouse>%s</warehouse></current inventory>" %(self.availibility, self.checkedOn, self.item, self.warehouse)
117
 
118
class ItemInventoryHistory(Entity):
122 ashish 119
    id = Field(Integer, primary_key=True, autoincrement = True)    
94 ashish 120
    timestamp = Field(DateTime, default=datetime.datetime.now())
121
    availibility = Field(Integer)
122
    item = ManyToOne("Item")
123
    warehouse = ManyToOne("Warehouse")
124
 
125
    def __repr__(self):
126
        pass
103 ashish 127
 
128
class ItemChangeLog(Entity):
122 ashish 129
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 130
    old_status = Field(Integer)
131
    new_status = Field(Integer)
122 ashish 132
    timestamp = Field(DateTime, default=datetime.datetime.now())
103 ashish 133
    item = ManyToOne("Item")
94 ashish 134
 
103 ashish 135
    def __repr__(self):
136
        return "<Log><id>%d</id><item>%d</item><old_status>%d</old_status><new_status>%d</new_status></Log>" %(self.id,self.item.id, self.old_status, self.new_status)    
94 ashish 137
 
635 rajveer 138
class Category(Entity):
139
    id = Field(Integer, primary_key=True, autoincrement=True)
140
    object = Field(Binary)
103 ashish 141
 
94 ashish 142
def initialize():
384 ashish 143
    metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
94 ashish 144
    metadata.bind.echo = True
145
    setup_all(True)
115 ashish 146
 
147
if __name__=="__main__":
148
    initialize()