private void CreateMaterialSheftStock(string palletNo, string materialCode, string materialNo, double total)
        {
            var entity = new TX33_MtrShfStk();

            entity.F33_PalletNo      = palletNo;
            entity.F33_MaterialCode  = materialCode;
            entity.F33_MaterialLotNo = materialNo;
            entity.F33_Amount        = total;
            entity.F33_StockFlag     = Constants.TX33_StkFlg.Store.ToString("D");
            entity.F33_AddDate       = DateTime.Now;
            entity.F33_UpdateDate    = DateTime.Now;
            _unitOfWork.MaterialShelfStockRepository.Add(entity);
        }
Exemplo n.º 2
0
        /// <summary>
        ///     This function is for handling restoraging material.
        /// </summary>
        /// <param name="palletNo"></param>
        /// <param name="materialCode"></param>
        /// <param name="restorageMaterialItems"></param>
        public void RestoreMaterial(string palletNo, string materialCode, string terminalNo,
                                    IList <RestorageMaterialItem> restorageMaterialItems)
        {
            // Material shelf statuses find.
            var materialShelfStatuses = _unitOfWork.MaterialShelfStatusRepository.GetAll();

            // Suitable location into which material should be stored.
            TX31_MtrShfSts emptyLocation = null;

            emptyLocation = materialShelfStatuses.FirstOrDefault(x => x.F31_PalletNo.Trim().Equals(palletNo) && x.F31_TerminalNo.Trim().Equals(terminalNo));

            if (emptyLocation == null)
            {
                emptyLocation = materialShelfStatuses.FirstOrDefault(x => x.F31_ShelfStatus.Equals("0"));
            }

            if (emptyLocation == null)
            {
                throw new Exception("No empty location has been found");
            }

            // Find a list of materials.
            var materials = _unitOfWork.MaterialRepository.GetAll();

            // Find the material by code.
            var material = materials.FirstOrDefault(x => x.F01_MaterialCode.Equals(materialCode));

            if (material == null)
            {
                throw new Exception();
            }

            //var shelfStatuses = _unitOfWork.MaterialShelfStatusRepository.GetShelfStorageMaterial(material.F01_LiquidClass);
            //var shelfStatus = Constants.F31_ShelfStatus.EmptyShelf.ToString("D");
            //var lstShelfStatuses =
            //    _unitOfWork.MaterialShelfStatusRepository.GetMany(i => i.F31_ShelfStatus.Trim().Equals(shelfStatus));

            //	[Is_LiquidClass] is pupulated from field [F01_LiquidClass] of Material Master DB record (based on current [Material Code]).

            var tm01 =
                _unitOfWork.MaterialRepository.Get(x => x.F01_MaterialCode.Trim().Equals(materialCode));

            //if (tm01.F01_LiquidClass.Equals("0"))
            //{
            //    lstShelfStatuses = lstShelfStatuses.OrderBy(x => x.F31_CmnShfAgnOrd);
            //}
            //else
            //{
            //    lstShelfStatuses = lstShelfStatuses.OrderBy(x => x.F31_LqdShfAgnOrd);
            //}

            // update material shelf status and get F31_ShelfRow,F31_ShelfBay,F31_ShelfLevel
            var row   = string.Empty;
            var bay   = string.Empty;
            var level = string.Empty;

            //var tx31s = lstShelfStatuses.ToList();
            //var lasttx31 = tx31s.LastOrDefault();
            //foreach (var shelfStatuses in tx31s)
            //{
            emptyLocation.F31_ShelfStatus     = "4";
            emptyLocation.F31_TerminalNo      = terminalNo;
            emptyLocation.F31_UpdateDate      = DateTime.Now;
            emptyLocation.F31_StockTakingFlag = Constants.TX31_StkTkgFlg.InvNotChk.ToString("D");
            emptyLocation.F31_PalletNo        = palletNo;
            emptyLocation.F31_SupplierCode    = string.Empty;
            emptyLocation.F31_LoadAmount      = 0;
            emptyLocation.F31_Amount          = restorageMaterialItems.Sum(x => x.PackUnit * x.PackQuantity + x.Fraction);
            emptyLocation.F31_UpdateDate      = DateTime.Now;

            //shelfStatuses.F31_UpdateCount += 1;
            row   = emptyLocation.F31_ShelfRow;
            bay   = emptyLocation.F31_ShelfBay;
            level = emptyLocation.F31_ShelfLevel;

            //if (emptyLocation.Equals(lasttx31))
            //{
            //    shelfStatuses.F31_StockTakingFlag = Constants.TX31_StkTkgFlg.InvNotChk.ToString("D");
            //    shelfStatuses.F31_PalletNo = palletNo;
            //    shelfStatuses.F31_SupplierCode = string.Empty;
            //    shelfStatuses.F31_LoadAmount = 0;
            //    shelfStatuses.F31_Amount = restorageMaterialItems.Sum(x => x.PackUnit*x.PackQuantity + x.Fraction);
            //    shelfStatuses.F31_UpdateDate = DateTime.Now;
            //    //shelfStatuses.F31_UpdateCount += 1;
            //    row = shelfStatuses.F31_ShelfRow;
            //    bay = shelfStatuses.F31_ShelfBay;
            //    level = shelfStatuses.F31_ShelfLevel;
            //}
            _unitOfWork.MaterialShelfStatusRepository.Update(emptyLocation);
            //}

            //	Delete all [TX33_MtrShfStk] records whose [Pallet No.] is current [Pallet No.] and [Material Code] is current [Material Code].
            _unitOfWork.MaterialShelfStockRepository.Delete(x => x.F33_MaterialCode.Equals(materialCode) && x.F33_PalletNo.Trim().Equals(palletNo));

            //var lastShelfStatus = materialShelfStatuses.LastOrDefault();
            var lsShelfNo = string.Format("{0}{1}{2}", row,
                                          bay, level);

            // Find no manage record with system id "0000"
            var isNoManage     = false;
            var f48MtrWhsCmdNo = _unitOfWork.NoManageRepository.CreateOrUpdateTX48(ref isNoManage,
                                                                                   Constants.GetColumnInNoManager.MtrWhsCmdNo);
            var convCode = GetConveyorCode(terminalNo);

            InsertTX34(Constants.F34_CommandNo.Storage, f48MtrWhsCmdNo,
                       Constants.CmdType.cmdType,
                       Constants.TX34_StrRtrType.MaterialReStorage.ToString("D"), Constants.TC_CMDSTS.TC_CMDSTS_0, palletNo,
                       convCode, lsShelfNo, terminalNo,
                       Constants.PictureNo.TCRM051F);


            //	Create corresponding material shelf stock records (table [TX33_MtrShfStk]) for each “Valid item” using the following pseudo code (under SQL format - Refer document)
            foreach (var restorageMaterialItem in restorageMaterialItems)
            {
                var tx33MtrShfStk = new TX33_MtrShfStk();
                tx33MtrShfStk.F33_PalletNo      = palletNo;
                tx33MtrShfStk.F33_MaterialCode  = materialCode;
                tx33MtrShfStk.F33_MaterialLotNo = restorageMaterialItem.MaterialLotNo;
                tx33MtrShfStk.F33_Amount        = restorageMaterialItem.PackUnit * restorageMaterialItem.PackQuantity +
                                                  restorageMaterialItem.Fraction;
                tx33MtrShfStk.F33_StockFlag  = Constants.F33_StockFlag.TX33_StkFlg_Str;
                tx33MtrShfStk.F33_AddDate    = DateTime.Now;
                tx33MtrShfStk.F33_UpdateDate = DateTime.Now;

                _unitOfWork.MaterialShelfStockRepository.Add(tx33MtrShfStk);
            }


            //Send message to server C1. The content of the message contains [MsgId], [TermNo] and [PicNo], in which:
            //[MsgId] is “0001”.
            var msgId = "0001";

            var pictureNo = Constants.PictureNo.TCRM051F;

            _notificationService.SendMessageToC1(new
            {
                msgId,
                terminalNo,
                pictureNo
            });

            // Save changes into database.
            _unitOfWork.Commit();
        }