Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
412 ashish 1
'''
2
Created on 05-Aug-2010
3
 
4
@author: ashish
5
'''
483 rajveer 6
from shop2020.thriftpy.logistics.ttypes import Shipment, LogisticsInfo
442 rajveer 7
from shop2020.logistics.service.impl.DataAccessor import add_empty_AWBs, get_empty_AWB,\
8
    get_provider, get_shipment_info, get_shipments, get_todays_shipments, initialize,\
477 rajveer 9
    get_providers, create_shipment, update_shipment_status, get_logistics_estimation, add_delivery_estimate,\
483 rajveer 10
    add_pincode_warehouse_mapping, get_logistics_info
442 rajveer 11
from shop2020.logistics.service.impl.Converters import to_t_provider,\
472 rajveer 12
    to_t_shipment, to_t_shipmentstatusinfo, to_t_shipmentupdate, to_t_itemLogistics
494 rajveer 13
from shop2020.clients.InventoryClient import InventoryClient
14
from shop2020.config.client.ConfigClient import ConfigClient
442 rajveer 15
from shop2020.utils.Utils import log_entry, to_py_date
494 rajveer 16
import datetime
17
import time
472 rajveer 18
 
494 rajveer 19
 
412 ashish 20
class LogisticsServiceHandler:
21
 
442 rajveer 22
    def __init__(self):
23
        initialize()
483 rajveer 24
 
576 chandransh 25
    #FIXME: This method currently ignores sku_id. The implementation should make use of the functionality present in getLogisticsEstimation.
483 rajveer 26
    def getLogisticsInfo(self, destination_pincode, sku_id):
27
        """
28
        Parameters:
29
         - destination_pincode
30
         - sku_id
31
        """
32
        warehouse_id, provider_id, airway_billno, delivery_time = get_logistics_info(destination_pincode, sku_id)
33
        logistics_info = LogisticsInfo()
34
        logistics_info.airway_billno = airway_billno
35
        logistics_info.warehouse_id = warehouse_id
36
        logistics_info.delivery_estimate = delivery_time
37
        logistics_info.provider_id = provider_id
38
        return logistics_info
39
 
412 ashish 40
    def addEmptyAWBs(self, numbers, provider_id):
41
        """
42
        Parameters:
43
         - numbers
44
         - provider_id
45
        """
442 rajveer 46
        add_empty_AWBs(numbers, provider_id)
412 ashish 47
 
48
    def getEmptyAWB(self, provider_id):
49
        """
50
        Parameters:
51
         - provider_id
52
        """
442 rajveer 53
        return get_empty_AWB(provider_id)
412 ashish 54
 
442 rajveer 55
    def getProviders(self):
56
        """
57
        Parameters:
58
        """
59
        log_entry(self, "all providers requested")
60
 
61
        providers = get_providers()
62
        ret_providers = []
63
        for provider in providers:
64
            if provider:
65
                ret_providers.append(to_t_provider(provider))
66
        return ret_providers
67
 
412 ashish 68
 
69
    def getProvider(self, provider_id):
70
        """
71
        Parameters:
72
         - provider_id
73
        """
442 rajveer 74
        return to_t_provider(get_provider(provider_id))
412 ashish 75
 
442 rajveer 76
    def createShipment(self, shipment):
77
        """
78
        Parameters:
79
         - shipment
80
        """
81
        return create_shipment(shipment)
82
 
83
 
84
    def updateShipmentStatus(self, awb, shipment_update):
85
        """
86
        Parameters:
87
         - awb
88
         - shipment_update
89
        """
90
        return update_shipment_status(awb, shipment_update)
91
 
92
 
412 ashish 93
    def getShipmentInfo(self, awb):
94
        """
95
        Parameters:
96
         - awb
97
        """
442 rajveer 98
        return to_t_shipmentstatusinfo(get_shipment_info(awb))
412 ashish 99
 
100
    def getShipments(self, warehouse_id, from_date, to_date, provider_id):
101
        """
102
        Parameters:
103
         - warehouse_id
104
         - from_date
105
         - to_date
106
         - provider_id
107
        """
442 rajveer 108
        log_entry(self, "all shipments requested")
109
 
110
        from_datetime = to_py_date(from_date)
111
        to_datetime = to_py_date(to_date)
112
 
113
        shipments = get_shipments(warehouse_id, from_datetime, to_datetime, provider_id)
114
        ret_shipments = []
115
        for shipment in shipments:
116
            if shipment:
117
                ret_shipments.append(to_t_shipment(shipment))
118
        return ret_shipments
412 ashish 119
 
472 rajveer 120
    def getLogisticsEstimation(self, itemId, destination_pin, provider_id):
121
        """
122
        Parameters:
123
         - itemId
124
         - destination_pin
125
        """
126
 
576 chandransh 127
        client = InventoryClient().get_client()
494 rajveer 128
        config_client = ConfigClient()
129
 
130
        cutoff_time = int(config_client.get_property('delivery_cutoff_time'))
131
        stock_threshold = int(config_client.get_property('inventory_stock_threshold'))
132
 
133
 
477 rajveer 134
        delivery_estimate, warehouse_id = get_logistics_estimation(itemId, destination_pin, provider_id)
494 rajveer 135
        delivery_time = delivery_estimate.delivery_time
136
 
137
        items_in_inventory = client.getItemAvailibilityAtWarehouse(warehouse_id, itemId)
138
        now = datetime.datetime.now()
139
        print now.hour
140
        if cutoff_time < now.hour:
141
            delivery_time = delivery_time + 24
142
        if items_in_inventory < stock_threshold :
143
            time_to_procure = int(config_client.get_property('inventory_time_to_procure'))
144
            delivery_time = delivery_time + time_to_procure
442 rajveer 145
 
494 rajveer 146
        return to_t_itemLogistics(delivery_time, items_in_inventory, warehouse_id)
147
 
477 rajveer 148
    def addDeliveryEstimate(self, warahouse_id, destination_pin, provider_id, delivery_time, reliability):
472 rajveer 149
        """
150
        Parameters:
151
         - warahouse_id
152
         - destination_pin
153
         - provider_id
154
         - delivery_time
155
        """
477 rajveer 156
        add_delivery_estimate(warahouse_id, destination_pin, provider_id, delivery_time, reliability)
472 rajveer 157
 
477 rajveer 158
    def addPincodeWarehouseMapping(self, pincode, warehouse_id, warehouse_pin):
159
        """
160
        Parameters:
161
         - pincode
162
         - warehouse_id
163
         - warehouse_name
164
        """
165
        add_pincode_warehouse_mapping(pincode, warehouse_id, warehouse_pin)
166
 
412 ashish 167
    def getTodaysShipments(self, warehouse_id, provider_id):
168
        """
169
        Parameters:
170
         - warehouse_id
171
         - provider_id
172
        """
442 rajveer 173
 
174
        log_entry(self, "all shipments requested for today")
175
 
176
        shipments = get_todays_shipments(warehouse_id, provider_id)
177
        ret_shipments = []
178
        for shipment in shipments:
179
            if shipment:
180
                ret_shipments.append(to_t_shipment(shipment))
181
        return ret_shipments
182
 
183
'''
412 ashish 184
        shipments = []
185
        i = 0
186
        while i < 100:
187
            shipment = Shipment()
188
            shipment.warehouse_name = "Seattle"
189
            shipment.awb="1234"+str(i)
190
            shipment.destination="JP"
191
            shipment.origin = "US"
192
            shipment.recepient_address = "1, Microsoft Way, Redmond"
193
            shipment.recepient_name = "Steve Balmer"
194
            shipment.recepient_phone = "+14356368790"
195
            shipment.recepient_pincode = "110001"
196
            shipment.shipment_contents = "iPhone 4G"
197
            shipment.shipment_weight = "300 gms"
198
            shipments.append(shipment)
199
            i = i+1
200
        return shipments
472 rajveer 201
        '''
202
 
442 rajveer 203