/// <summary> /// /// </summary> /// <param name="dt"></param> /// <returns></returns> private List <InventoryTransactionDTO> ConvertDataTableToList(DataTable dt, DataDefine.eIN_OUT_CLASS in_out) { List <InventoryTransactionDTO> list = new List <InventoryTransactionDTO>(); foreach (DataRow dr in dt.Rows) { InventoryTransactionDTO dto = new InventoryTransactionDTO(); DataRowVersion drVersion = DataRowVersion.Current; if (dr.RowState == DataRowState.Deleted) { drVersion = DataRowVersion.Original; } dto.ITEM_CD.Value = dr[(int)eColView.ITEM_CODE, drVersion]; // PART_NO, dto.LOT_NO.Value = dr[eColView.LOT_NO.ToString(), drVersion]; //LOT_NO, dto.QTY.Value = dr[eColView.ISSUE_QTY.ToString(), drVersion]; //ISSUE_QTY, if (in_out == DataDefine.eIN_OUT_CLASS.Out) { dto.TRANS_ID.Value = dr[eColView.TRANS_ID.ToString(), drVersion]; dto.REF_NO.Value = dr[eColView.REF_NO.ToString(), drVersion]; } else { dto.REF_NO.Value = dr[eColView.TRANS_ID.ToString(), drVersion]; dto.TRANS_ID.Value = dr[eColView.REF_NO.ToString(), drVersion]; } list.Add(dto); } return(list); }
/// <summary> /// Check On hand Inventory function follow business rule /// </summary> /// <param name="eOperation"></param> /// <param name="eInoutCls"></param> /// <param name="QTY"></param> /// <param name="ItemCD"></param> /// <param name="LocationCD"></param> /// <param name="LotNo"></param> /// <param name="strTranID">in case of Update, this value must be sent, the others send null.</param> /// <returns></returns> public ErrorItem CheckOnhandQty(DataDefine.eOperationClass eOperation, DataDefine.eIN_OUT_CLASS eInoutCls, NZDecimal QTY, NZString ItemCD, NZString LocationCD, NZString LotNo, NZString strTranID) { // FIRST CHECK FOR LOCATION IF IT ALLOW NEGATIVE STOCK DealingBIZ bizLoc = new DealingBIZ(); DealingDTO dtoLoc = bizLoc.LoadLocation(LocationCD); if (!dtoLoc.ALLOW_NEGATIVE.IsNull && dtoLoc.ALLOW_NEGATIVE.StrongValue == DataDefine.Convert2ClassCode(DataDefine.eALLOW_NEGATIVE.Yes)) { // IF THE LOCATION IS ALLOW FOR NEGATIVE THEN NOT CHECK ONHAND return(null); } //Operation Class switch (eOperation) { case DataDefine.eOperationClass.Add: //Do notting break; case DataDefine.eOperationClass.Update: //Find Diff Qty InventoryTransBIZ biz = new InventoryTransBIZ(); InventoryTransactionDTO dto = biz.LoadByTransactionID(strTranID); if (dto != null) { QTY = (QTY - dto.QTY).ToNZDecimal(); } break; case DataDefine.eOperationClass.Delete: //Delete Inverse Qty QTY = (-1 * QTY.StrongValue).ToNZDecimal(); break; } //inout Class if (eInoutCls == DataDefine.eIN_OUT_CLASS.Out) { QTY = (-1 * QTY.StrongValue).ToNZDecimal(); } // CHECK FOR ONHAND WITH ACTUAL INVENTORY ONHAND InventoryBIZ bizInv = new InventoryBIZ(); ActualOnhandViewDTO dtoActOnhand = bizInv.LoadActualInventoryOnHand(ItemCD, LocationCD, LotNo); decimal decActualOnhandQty = 0; if (dtoActOnhand != null && !dtoActOnhand.ONHAND_QTY.IsNull) { decActualOnhandQty = dtoActOnhand.ONHAND_QTY.StrongValue; } decActualOnhandQty = decActualOnhandQty + QTY; if (decActualOnhandQty < 0) { return(new ErrorItem(QTY.Owner, TKPMessages.eValidate.VLM0063.ToString(), new[] { ItemCD, LocationCD })); } return(null); }
/// <summary> /// คัดลอกค่าที่เป็น Header ของ Model ไปเก็บไว้ใน DTO /// </summary> /// <param name="model"></param> /// <param name="dto"></param> /// private void AssignHeaderToDTO(IssueByOrderUIDM model, InventoryTransactionDTO dto, DataDefine.eIN_OUT_CLASS in_out) { dto.TRANS_DATE = model.TRANS_DATE; //dto.REF_SLIP_NO = model.SLIP_NO; dto.TRANS_CLS = DataDefine.Convert2ClassCode(DataDefine.eTRANS_TYPE.Issuing).ToNZString();//model.TRANS_CLS; //dto.REF_SLIP_NO = model.INVOICE_NO; //dto.OTHER_DL_NO = model.INVOICE_NO; dto.REMARK = model.REMARK; dto.OBJ_ITEM_CD = model.OBJ_ITEM_CD; dto.OBJ_ORDER_QTY = model.OBJ_ORDER_QTY; dto.REF_SLIP_CLS = (NZString)DataDefine.Convert2ClassCode(DataDefine.eREF_SLIP_CLS.Issue); dto.FOR_CUSTOMER = model.FOR_CUSTOMER; dto.FOR_MACHINE = model.FOR_MACHINE; dto.REF_SLIP_NO2 = model.REF_SLIP_NO2; dto.REF_SLIP_NO = model.REF_SLIP_NO; dto.TRAN_SUB_CLS = model.TRAN_SUB_CLS; dto.SCREEN_TYPE = DataDefine.ScreenType.IssueByOrder.ToNZString(); if (in_out == DataDefine.eIN_OUT_CLASS.In) { dto.REF_SLIP_NO = model.SLIP_NO; dto.LOC_CD = model.TO_LOC_CD; dto.IN_OUT_CLS.Value = DataDefine.Convert2ClassCode(DataDefine.eIN_OUT_CLASS.In); } else { dto.SLIP_NO = model.SLIP_NO; dto.LOC_CD = model.FROM_LOC_CD; dto.IN_OUT_CLS.Value = DataDefine.Convert2ClassCode(DataDefine.eIN_OUT_CLASS.Out); } }