ValOrder Function
Expand/Collapse source code of procedure ValOrder Source Code
  LOCAL llRetVal, ;
        lnAnswer, ;
        llClose, ;
        lnOldRecNo, ;
        lnOrderTotal, ;
        lnOldArea, ;
        lcCustomerAlias, ;
        lyMinOrdAmount, ;
        lyOrderAmount  

  *-- Don't bother checking if we're deleting the order
  IF DELETED()
    RETURN
  ENDIF

  lnOldArea = SELECT()

  *-- Check if we have at least one line item. Use the current
  *-- table if order_line_items is already opened to include
  *-- buffered records.
  IF !USED("order_line_items")
    USE tastrade!order_line_items AGAIN IN 0
    llClose = .T.
  ENDIF

  lnOldRecNo = IIF(RECCOUNT("order_line_items") > 0, RECNO("order_line_items"), 0)
  llRetVal = (SEEK(orders.order_id, "order_line_items", "order_id") AND ;
          !EMPTY(order_line_items.product_id))
  IF lnOldRecNo <> 0 AND llRetVal
    GO lnOldRecNo IN order_line_items
  ENDIF

  IF !llRetVal
    =MESSAGEBOX(ORDHASITEMS_LOC, ;
                MB_ICONEXCLAMATION, ;
                TASTRADE_LOC)
  ENDIF

  lyOrderAmount = CalcMinOrdAmount(orders.order_id)
  IF llRetVal
    *-- Check if customer is over credit limit. If 
    *-- customer id is empty, the order will not be saved
    *-- because customer_id is a required foreign key, enforced
    *-- by the RI triggers, so we don't even bother checking.
    IF !EMPTY(orders.customer_id)
      IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ;
      	LOWER(_screen.ActiveForm.Name) # "frmordhistory"
        *- didn't just change paid, and isn't on order history screen
        LOCAL lyRemainingCredit
        lyRemainingCredit = RemainingCredit(orders.customer_id) + IIF(orders.paid, lyOrderAmount, 0)
        IF lyRemainingCredit < $0
          lnAnswer = ;
            MESSAGEBOX(CUSTOVERMAX_LOC + ;
                        DOLLAR_FORMAT3_LOC + ALLT(STR(ABS(lyRemainingCredit), 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ;
                        SAVEANYWAY_LOC, ;
                     MB_ICONQUESTION + MB_YESNO, ;
                     TASTRADE_LOC)
          llRetVal = (lnAnswer = IDYES)
        ENDIF
      ENDIF

      IF llRetVal
        *-- Get the customer's minimum order amount
        IF !(GETFLDSTATE("paid","orders") == 2 AND OCCURS("2",GETFLDSTATE(-1,"Orders")) == 1) AND ;
   		  LOWER(_screen.ActiveForm.Name) # "frmordhistory"
          lcCustomerAlias = SYS(2015)
          USE tastrade!customer AGAIN IN 0 ALIAS (lcCustomerAlias)
          IF SEEK(orders.customer_id, lcCustomerAlias, "customer_i")
            lyMinOrdAmount = EVAL(lcCustomerAlias + ".min_order_amt")
          ENDIF
          USE IN (lcCustomerAlias)

          IF lyOrderAmount < lyMinOrdAmount
            lnAnswer = ;
              MESSAGEBOX(CUSTUNDERMIN_LOC + ;
                         DOLLAR_FORMAT3_LOC + ALLT(STR(lyMinOrdAmount, 15, 2)) + DOLLAR_FORMAT2_LOC + CR + ;
                         SAVEANYWAY_LOC, ;
                       MB_ICONQUESTION + MB_YESNO, ;
                       TASTRADE_LOC)
            llRetVal = (lnAnswer = IDYES)
          ENDIF
        ENDIF
      ENDIF
    ENDIF	&& marked as paid only
  ENDIF

  IF llClose
    USE IN order_line_items
  ENDIF

  SELECT (lnOldArea)

  RETURN llRetVal