from mod_python import apache,psp,util
from sqlobject import sqlbuilder
from include.siteSQL import DB, Accounts, Loads, UnqLatLong
from sqlobject.sqlbuilder import AND,OR,NOT,IN,LIKE

def index(req):
#  try:
    PSDefaults = apache.import_module("include.PSDefaults")
    
    req.content_type = "text/html"
    psdef = PSDefaults.Template(req)
    session = psdef.sessionCheck(page="/login?location=/load_entry.py")

    accountid = int(session["accountid"])
    status = session["status"]
        
    db = DB()
    db.connect()
    account = list(Accounts.select(Accounts.q.id == accountid))[0]
    db.close()
    
    import time
    import datetime
    today = datetime.date.today()
    todaysDate = time.strftime("%Y/%m/%d",time.localtime())
    #todayShortDate = time.strftime("%m/%d",time.localtime())
    todayShortDate = today.strftime("%m/%d")
    daysToShow = 12
    pickupDates = ""
    for addDays in range(0,daysToShow): 
      today = datetime.date.today()
      difference = datetime.timedelta(days=addDays)
      shortDate = today+difference
      formatedShortDate = shortDate.strftime("%m/%d")
      formatedLongDate = shortDate.strftime("%Y/%m/%d")
      pickupDates += '<option value="%s">%s</option>' % (formatedLongDate, formatedShortDate)
    
    psdef.addVars({'FullOrPartial':PSDefaults.fullOrPartial(), 'ContactName':account.contName, 'ContactPhone':account.contPhone, \
                   'CompanyName':account.company, 'TruckTypeOptions':PSDefaults.truckTypeOptions(req), 'TodaysDate':todaysDate, \
                   'StateAbbrVerboseOptions':PSDefaults.stateAbbrVerboseOptions(req), 'TodayShortDate':todayShortDate, \
                   'PickupDateOptions':PSDefaults.pickupDateOptions("short"), \
                   'PostLoad':'/loadpost', 'loadEntryFeedback':'', 'status':status, 'pickupdates':pickupDates })
    psdef.compileTemplate("./templates/load_entry.tpl")
    psdef.runTemplate()
  
    return
#  except:
#    import sys
#    feedback = str(sys.exc_info()[0])
#    req.content_type = "text/html"
#    psdef.addVars({'ErrorMessage':feedback, 'success':False, 'status':None})
#    psdef.compileTemplate("./templates/error.tpl")
#    psdef.runTemplate()
#    return

def postLoad(req, e_contactName="", e_contactPhone="", e_company="", \
             e_originCity="", e_originState="", e_destCity="", \
             e_destState="", e_pickupDate="", e_truckType="", e_fullOrPartial="", \
             e_length=48, e_weight=0, e_quantity=1, e_comment=""):
#  try:
    PSDefaults = apache.import_module("include.PSDefaults")
    
    import sys
    feedback, heading = '', '' 
    psdef = PSDefaults.Template(req)
    session = psdef.sessionCheck()
    accountid = int(session["accountid"])
    status = session["status"]
    req.content_type = "text/html"
    
    if not e_length:
      e_length=48
    if not e_weight:
      e_weight=0
    if not e_quantity:
      e_quantity=1
    if not e_comment:
      e_comment=""
  
#    try:
    fieldList = "accountid, creationTS, originCity, originState, destCity, destState, truckType, length, weight, quantity, fullOrPartial, comment, pickupDate"
    # code to perform Lat/Long lookup based off O/D city/state #
    oLatitude, oLongitude = None, None
    dLatitude, dLongitude = None, None
    db = DB("freightterminal")
    db.connect()
    searchLLQuery = UnqLatLong.select(AND(UnqLatLong.q.city==e_originCity, UnqLatLong.q.state==e_originState))
    totalLL = searchLLQuery.count()
    if totalLL>0:
      oLatitude = float(searchLLQuery[0].latitude)
      oLongitude = float(searchLLQuery[0].longitude)
    searchLLQuery = UnqLatLong.select(AND(UnqLatLong.q.city==e_destCity, UnqLatLong.q.state==e_destState))
    totalLL = searchLLQuery.count()
    if totalLL>0:
      dLatitude = float(searchLLQuery[0].latitude)
      dLongitude = float(searchLLQuery[0].longitude)
    # code to perform Lat/Long lookup ...
    db.setdb("freightterminal")
    account = list(Accounts.select(Accounts.q.id == accountid))[0]
    prefered = 'No'
    if account.accountType=='Pay' or account.status=='Pay':
      prefered = 'Yes'
    load = Loads(creationTS=sqlbuilder.func.NOW(),modificationTS=None, peTrackingId=None, accountid=accountid, \
                   originCity=e_originCity.title(),originState=e_originState.upper(), originLatitude=oLatitude, originLongitude=oLongitude, \
                   destCity=e_destCity.title(),destState=e_destState.upper(), destLatitude=dLatitude,destLongitude=dLongitude, weight=int(e_weight), \
                   pickupDate=e_pickupDate, fullOrPartial=e_fullOrPartial,length=int(e_length),quantity=int(e_quantity), comment=e_comment, \
                   truckType=e_truckType, deliveryDate=None, deliveryTime=None, miles=None, rate=None, stops=None, pickupTime=None, \
                   cont_name=e_contactName, cont_phone=e_contactPhone, company_name=e_company, preferedCustomer=prefered)
    db.close()
    heading = "Success"
    feedback = "Load was successfully posted."
#    except:
#      heading = "Error"
#      feedback = str(sys.exc_info()[0])
    
    feedbackHtml = "<div id=\"message\">"
    feedbackHtml += "<h2>%s</h2>\n" % (heading)
    feedbackHtml += "<p><span>&gt;&gt;</span> %s</p>\n" % (feedback)
    feedbackHtml += "</div>"
    
    import time
    import datetime
    today = datetime.date.today()
    todaysDate = time.strftime("%Y/%m/%d",time.localtime())
    #todayShortDate = time.strftime("%m/%d",time.localtime())
    todayShortDate = today.strftime("%m/%d")
    daysToShow = 12
    pickupDates = ""
    for addDays in range(0,daysToShow):
      today = datetime.date.today()
      difference = datetime.timedelta(days=addDays)
      shortDate = today+difference
      formatedShortDate = shortDate.strftime("%m/%d")
      formatedLongDate = shortDate.strftime("%Y/%m/%d")
      pickupDates += '<option value="%s">%s</option>' % (formatedLongDate, formatedShortDate)
   
    psdef.addVars({'FullOrPartial':PSDefaults.fullOrPartial(), 'ContactName':account.contName, 'ContactPhone':account.contPhone, 'CompanyName':account.company, \
                   'TruckTypeOptions':PSDefaults.truckTypeOptions(req), 'TodaysDate':todaysDate, \
                   'StateAbbrVerboseOptions':PSDefaults.stateAbbrVerboseOptions(req), 'TodayShortDate':todayShortDate, \
                   'PickupDateOptions':PSDefaults.pickupDateOptions("short"), \
                   'PostLoad':'/loadpost', 'loadEntryFeedback':feedbackHtml, 'status':status, 'pickupdates':pickupDates })
    psdef.compileTemplate("./templates/load_entry.tpl")
    psdef.runTemplate() 
#  except:
#    import sys
#    feedback = str(sys.exc_info()[0])
#    req.content_type = "text/html"
#    psdef.addVars({'ErrorMessage':feedback, 'success':False, 'status':None})
#    psdef.compileTemplate("./templates/error.tpl")
#    psdef.runTemplate()
#    return
