'DESPAT_1 - selects CUST_ORD records to be processed as Despatched; prints
'           list for WHSE mgr to annotate before passing to A/C's dept to
'           process and prepare Cost-of-Sales reports

external   dpath PrintReport() sch scw vloadif() progress() progtag() fgi bgi
external   messbox() cpath Background() popuplist() messboxwait() fgp bgp
external   fentrybox() shopmask navrecs() chkstr() strcount() makeidx()
external   addidxrec() vunloadif() chkdate() remove() getidxrecs() userid

public     ptstr ptval ftgdate jobnr ftrname ftrcode dsa

global     x p2 p3 p4 p5 p6 MarkDespatched() SelectDespatched() i CheckAll()
global     ReturnToMenu() CustScreenLine() PrintJobList() $jobnrs #jobnrs
global     CheckFitDate() #slotsrem AlterApptSlots() #apptslots


MAIN
single-step off
  Background()

  CheckFitDate()

  PrintJobList()

'   ChooseJobs()

  ReturnToMenu()

END MAIN


FUNCTION CheckFitDate()
  ftgdate = days(today) + 1
  if dayname(date2(ftgdate)) == "Saturday"
    ftgdate = days(today) + 3
  end if
  if dayname(date2(ftgdate)) == "Sunday"
    ftgdate = days(today) + 2
  end if
END FUNCTION ' CheckFitDate()


FUNCTION ReturnToMenu()
  screen clear box 1 1 sch scw 0 0 no-border
  repaint off
  file unload all
  transfer cpath|"pm_menu.psl" in-memory
END FUNCTION ' ReturnToMenu()


FUNCTION MarkDespatched()
local aa
  if [Completed] = "Y"
    messbox("Mark"&jobnr&"-"&[CustOrd_Name]&"as incomplete? (y/n) ",1,1,1)
    if ptstr == "y"
      lock-record
'         [Order_Status]="P"
        [Completed] = "N"
        [Last_Update]=today
      write-record
      return (0)
    else
      return (1)
    end if
  else
    while true
      #apptslots = [Appt_Slots]        'message "#apptslots is:"&str(#apptslots)
      #slotsrem  = [Slots_Rem]         'message "#slotsrem is:"&str(#slotsrem)
      if #slotsrem <> 0
        messbox(" App't slots still to book - remove o/s slots? (y/n) ",1,0,1)
        if ptstr == "y"
          aa = AlterApptSlots()
          if aa = 1
            return (1)
          end if
        else
          return (1)
        end if
      else
        exit while
      end if
    end while

    if days([Fitting_Date])>days(ftgdate)
      messboxwait(" Cannot mark as completed - not being fitted on or before"&date2(ftgdate),0,0,1)
      return (1)
    end if

    if [Order_Status]<>"P"
      messboxwait(" Cannot mark as completed - order not passed by Shop ",0,0,1)
      return (1)
    end if

    messbox(jobnr&"-"&[CustOrd_Name]&"to be invoiced? (y/n) ",1,1,1)
    if ptstr == "y"
      lock-record
        [Completed] = "Y"
'         [Order_Status]="D"
        [Last_Update]=today
        [Updated_By] = userid
      write-record
      return (0)
    else
      return (1)
    end if
  end if
END FUNCTION ' MarkDespatched()


FUNCTION CustScreenLine()
local y1 y2
  repaint on
  repaint
  ptval=0
  y1 = format(" Fitting         Name & Delivery Address","L78")
'   y1 = format(" Name                                Delivery Address","L71")
  y2 = format(" Toggle Job {C}ompleted/Not {C}ompleted - {Esc} to exit ","M78")
  screen print 4 2 fgp bgp y1
  screen print 18 2 fgp bgp y2
END FUNCTION ' CustScreenLine()


FUNCTION SelectDespatched()
  vloadif(dpath|"despat_2.vw")
  CustScreenLine()
  while true
    ptval = navrecs()
    if ptval = {C} or ptval = {c}
      repaint off
      jobnr = [Job_Nr]
      #slotsrem = [Slots_Rem]
      x = MarkDespatched()
      vloadif(dpath|"despat_2.vw")
      CustScreenLine()
      continue while

    elseif ptval = {Esc}
      Background()
      return (-1)
    end if
  end while
END FUNCTION ' SelectDespatched()


FUNCTION PrintJobList()
  x = CheckAll()
  error on
  order sort now dictionary "lstjobs.idx" fields "[Fitting_Date;Job_Nr]" descending
  repaint on
  repaint
  SelectDespatched()
END FUNCTION 'PrintJobList()


FUNCTION CheckAll()
  vloadif(dpath|"despat_2.vw")
  progress(15,10," Finding records ... please wait ",0)
  error off
  order change key "[Fitting_Date]"
  data query execute "despat_1.dfq" index "despat_1.idx"
' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
'   days([Fitting_Date])>0
'   and
'   days([Fitting_Date])<=days(ftgdate)
'   and
'   [Completed]="N"
'   and
'   [Inv_Nr]=blank
'   and
'   not (deleted)
'   and
'   [SalesAnalysis]<>"X"
'   and
'   [SalesAnalysis]<>"P"
' ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  if cerror
    return (1)
  else
    return (0)
  end if
END FUNCTION 'CheckAll()


FUNCTION AlterApptSlots()
local  #newapptslots #newslotsrem
  #newapptslots = #apptslots - #slotsrem ' message "#newapptslots) is:"&str(#newapptslots)
' write to CUST_ORD
  #newslotsrem  = #slotsrem + (#newapptslots-#apptslots) 'message "#newslotsrem is:"&str(#newslotsrem)
  vloadif(dpath|"find_job.vw")
  order change key "[Job_Nr]"
  data find "[Job_Nr]" equal jobnr options "g"   '  find correct JOB
  if cerror
    messbox(" Job Nr NOT found ",0,0,1)
    vloadif(dpath|"despat_2.vw")
    return (-1)
  end if
  lock-record
    [Slots_Rem]  = #newslotsrem
    [Appt_Slots] = #newapptslots
  write-record
  vloadif(dpath|"despat_2.vw")
  return (0)
END FUNCTION ' AlterApptSlots()
