from mod_python import apache,psp,util
from sqlobject import sqlbuilder
from include.siteSQL import DB, Accounts, Trucks, 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=/truck_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
    availDates = ""
    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")
      availDates += '<option value="%s">%s</option>' % (formatedLongDate, formatedShortDate)
    import time
    todaysDate = time.strftime("%Y/%m/%d",time.localtime())
    todayShortDate = time.strftime("%m/%d",time.localtime())
    
    psdef.addVars({'FullOrPartial':PSDefaults.fullOrPartial(), 'ContactName':account.contName, 'ContactPhone':account.contPhone, 'CompanyName':account.company, \
                   'TruckTypeOptions':PSDefaults.truckTypeOptionsTrucks(req), 'TodaysDate':todaysDate, \
                   'StateAbbrVerboseOptions':PSDefaults.stateAbbrVerboseOptions(req), 'TodayShortDate':todayShortDate, \
                   'PostTruck':'/truckpost', 'truckEntryFeedback':'', 'status': status, 'availDates':availDates }) 
    psdef.compileTemplate("./templates/truck_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 postTruck(req, e_contactName="", e_contactPhone="", e_company="", \
             e_originCity="", e_originState="", e_destCity="", \
             e_destState="", e_availDate="", e_truckType="", e_fullOrPartial="", \
             e_length=48, 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"]
    
#    try:    
      #code to fetch lat/long
      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'
      truck = Trucks(accountid=accountid, creationTS=sqlbuilder.func.NOW(), modificationTS=None, peTrackingId=None, \
                     originCity=e_originCity.title(), originState=e_originState.upper(), destCity=e_destCity.title(), destState=e_destState.upper(), \
                     truckType=e_truckType, length=int(e_length), quantity=int(e_quantity), fullOrPartial=e_fullOrPartial, \
                     comment=e_comment, availDate=e_availDate, destLatitude=dLatitude, destLongitude=dLongitude, \
                     originLatitude=oLatitude, originLongitude=oLongitude, miles=None, availTime=None, \
		     cont_name=e_contactName, cont_phone=e_contactPhone, company_name=e_company, preferedCustomer=prefered)
      
      account = list(Accounts.select(Accounts.q.id == accountid))[0]
      heading = "Success"
      feedback = "Truck 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
      availDates = ""
      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")
        availDates += '<option value="%s">%s</option>' % (formatedLongDate, formatedShortDate)
  
      req.content_type = "text/html"
      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, \
                   'PostTruck':'/truckpost', 'truckEntryFeedback':feedbackHtml, 'status': status, 'availDates':availDates }) 
      psdef.compileTemplate("./templates/truck_entry.tpl")
      psdef.runTemplate()

      return
  #  except:
  #    import sys
  #    PSDefaults = apache.import_module("include.PSDefaults")
  #    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
  
