Subversion Repositories SmartDukaan

Rev

Rev 5944 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/usr/bin/python
'''
It processes the Hotspot procurement Report containing the response of the procurement 
      report sent to hotspot. It reads the response and populates the database.

@author: Rajveer
'''
import time
import datetime
import optparse
import sys
import xlrd
import traceback

if __name__ == '__main__' and __package__ is None:
    import os
    sys.path.insert(0, os.getcwd())

from shop2020.clients.LogisticsClient import LogisticsClient
from shop2020.clients.TransactionClient import TransactionClient
from shop2020.thriftpy.model.v1.order.ttypes import TransactionServiceException
from shop2020.utils.EmailAttachmentDownloader import download_attachment
from shop2020.utils.EmailAttachmentSender import get_attachment_part, mail
from shop2020.utils.Utils import to_py_date

from_user = 'cnc.center@shop2020.in'
from_pwd = '5h0p2o2o'
to = ['cnc.center@shop2020.in', "amit.sirohi@shop2020.in", "sandeep.sachdeva@shop2020.in", "parmod.kumar@shop2020.in"]

def process_procurement_report(vendor):
    try:
        #filename = "./hotspot-procurement-report-2012-1-10.xls"
        filename = fetch_report('UPDATED')
        print "Reading procurement report from:" + filename
        workbook = xlrd.open_workbook(filename)
        sheet = workbook.sheet_by_index(0)
        num_rows = sheet.nrows
        txnClient = TransactionClient().get_client()
        for rownum in range(1, num_rows):
            item_id = sheet.row_values(rownum)[0]
            po_raised = sheet.row_values(rownum)[15]
            po_estimate = sheet.row_values(rownum)[16]
            reversal = sheet.row_values(rownum)[17]
            reversal_estimate = sheet.row_values(rownum)[18]
            not_available = sheet.row_values(rownum)[19]
            
            #item_id, category, brand, model_name, model_number, color, total_requirement, po_raised, po_estimate, reversal, reversal_estimate, not_available, deficit, remarks = sheet.row_values(rownum)[0:13]
            
            if po_raised > 0:
                try:
                    txnClient.markOrdersAsPORaised(vendor, item_id, po_raised, po_estimate, False)
                except TransactionServiceException as tex:
                    print tex.message
        
            if reversal > 0:
                try:
                    txnClient.markOrdersAsReversalInitiated(vendor, item_id, reversal, reversal_estimate, False)
                except TransactionServiceException as tex:
                    print tex.message

            if not_available > 0:
                try:
                    txnClient.markOrdersAsNotAvailabke(vendor, item_id, not_available, 0, False)
                except TransactionServiceException as tex:
                    print tex.message
                                
        
        sheet = workbook.sheet_by_index(1)
        num_rows = sheet.nrows
        
        for rownum in range(1, num_rows):
            item_id = sheet.row_values(rownum)[0]
            po_raised = sheet.row_values(rownum)[10]
            po_estimate = sheet.row_values(rownum)[11]
            reversal = sheet.row_values(rownum)[12]
            reversal_estimate = sheet.row_values(rownum)[13]
            not_available = sheet.row_values(rownum)[14]

            if po_raised > 0:
                try:
                    txnClient.markOrdersAsPORaised(vendor, item_id, po_raised, po_estimate, True)
                except TransactionServiceException as tex:
                    print tex.message
        
            if reversal > 0:
                try:
                    txnClient.markOrdersAsReversalInitiated(vendor, item_id, reversal, reversal_estimate, True)
                except TransactionServiceException as tex:
                    print tex.message

            if not_available > 0:
                try:
                    txnClient.markOrdersAsNotAvailabke(vendor, item_id, not_available, 0, True)
                except TransactionServiceException as tex:
                    print tex.message
            
            
    finally:
        #print filename
        os.remove(filename)
        
def fetch_report(type):
    filename = download_attachment(type, todays_date_string())
    if filename is None:
        sys.exit("The " + type + " report is not yet available.")
    return filename


def todays_date_string():
    today_date = time.strftime("%d-%b-%Y")
    return '"' + today_date + '"'

def get_py_datetime(date, timeval):
    # This should be a command line argument.
    # Refer http://docs.python.org/library/time.html#time.strftime to
    # get a complete list of format specifiers available for date time.
    time_format = "%d-%b-%y %H%M"
    if timeval is None or timeval == '--':
        timeval='0000'
    time_string = date + " " + timeval
    mytime = time.strptime(time_string, time_format)
    return datetime.datetime(*mytime[:6])

def main():
    parser = optparse.OptionParser()
    parser.add_option("-V", "--vendor", dest="vendor",
                   default=1, type="int",
                   help="The VENDOR is ",
                   metavar="PROVIDER")
    (options, args) = parser.parse_args()
    if len(args) != 0:
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
    
    if options.vendor:
        process_procurement_report(options.vendor)
    

if __name__ == '__main__':
    main()