Esempio n. 1
0
        public async Task <Transaction_Dto> GetByQRCodeID(object qrCodeID)
        {
            Transaction_Dto model       = new Transaction_Dto();
            var             qrCodeModel = await _repoQRCodeMain.GetByQRCodeID(qrCodeID);

            if (qrCodeModel != null)
            {
                var packingListModel = await _repoPackingList.GetByReceiveNo(qrCodeModel.Receive_No);

                var listQrCodeDetails = await _repoQRCodeDetail.GetByQRCodeIDAndVersion(qrCodeID, qrCodeModel.QRCode_Version);

                decimal?num = 0;
                foreach (var item in listQrCodeDetails)
                {
                    num += item.Qty;
                }

                model.QrCode_Id     = qrCodeModel.QRCode_ID.Trim();
                model.Plan_No       = packingListModel.MO_No.Trim();
                model.Suplier_No    = packingListModel.Supplier_ID.Trim();
                model.Suplier_Name  = packingListModel.Supplier_Name.Trim();
                model.Batch         = packingListModel.MO_Seq;
                model.Mat_Id        = packingListModel.Material_ID.Trim();
                model.Mat_Name      = packingListModel.Material_Name.Trim();
                model.Accumated_Qty = num;
                model.Trans_In_Qty  = 0;
                model.InStock_Qty   = 0;
            }

            return(model);
        }
Esempio n. 2
0
        public async Task <Output_Dto> GetByQrCodeId(string qrCodeId)
        {
            string message = "No data!";
            // biến qrcodeid là sheet no của bảng materialsheetsize, dựa theo mã đó lấy ra listmaterialsheetsize là danh sánh đơn output ra
            var listMaterialSheetSize = await _repoMaterialSheetSize.FindAll(x => x.Sheet_No.Trim() == qrCodeId.Trim()).ProjectTo <Material_Sheet_Size_Dto>(_configMapper).OrderBy(x => x.Tool_Size).ToListAsync();

            // kiểm tra xem Sheet_No đó đã output bao giờ chưa, nếu có rồi là kiểm tra đơn đó đã output ra hết chưa
            var listTransactionMainTypeOByPickupNo = await _repoTransactionMain.FindAll(x => x.Pickup_No.Trim() == qrCodeId && x.Transac_Type.Trim() == "O").ToListAsync();

            List <WMSB_Transaction_Detail> listTransactionDetailByBistTransactionMainTypeOByPickupNo = new List <WMSB_Transaction_Detail>();

            if (listTransactionMainTypeOByPickupNo.Count > 0)
            {
                foreach (var item in listTransactionMainTypeOByPickupNo)
                {
                    var tmp = await _repoTransactionDetail.FindAll(x => x.Transac_No == item.Transac_No).ToListAsync();

                    listTransactionDetailByBistTransactionMainTypeOByPickupNo.AddRange(tmp);
                }

                var totalTransQtyOutput = listTransactionDetailByBistTransactionMainTypeOByPickupNo.GroupBy(x => new { x.Order_Size })
                                          .Select(y => new
                {
                    OrderSize     = y.Key.Order_Size,
                    TotalTransQty = (decimal)y.Sum(z => z.Trans_Qty)
                }).ToList();

                foreach (var itemMaterialSheetSize in listMaterialSheetSize)
                {
                    var transQtyHadOutput = totalTransQtyOutput.Where(x => x.OrderSize == itemMaterialSheetSize.Order_Size).FirstOrDefault();
                    var qty = transQtyHadOutput != null ? transQtyHadOutput.TotalTransQty : 0;
                    itemMaterialSheetSize.Qty = (decimal)itemMaterialSheetSize.Qty - qty;
                }
            }
            // hết kiểm tra xem Sheet_No đó đã output ra bao giờ chưa

            List <OutputMain_Dto> listOuput = new List <OutputMain_Dto>();
            var materialSheetSize           = await _repoMaterialSheetSize.FindAll(x => x.Sheet_No.Trim() == qrCodeId.Trim()).FirstOrDefaultAsync();

            if (materialSheetSize != null)
            {
                List <WMSB_Transaction_Main> transactionModel = new List <WMSB_Transaction_Main>();
                // trong transaction main lấy theeo mo_no, material_id và batch
                transactionModel = await _repoTransactionMain.FindAll(x => x.MO_No.Trim() == materialSheetSize.Manno.Trim() && x.MO_Seq.Trim() == materialSheetSize.Batch.Trim() && x.Material_ID == materialSheetSize.Material_ID && x.Can_Move == "Y" && x.Transac_Type != "O").ToListAsync();

                foreach (var item in transactionModel)
                {
                    var rackLocation = await _repoRackLocation.FindAll(x => x.Rack_Location.Trim() == item.Rack_Location.Trim()).FirstOrDefaultAsync();

                    // dữ liệu output cần hiển thị: trong bảng tranasaction main, transaction detail ...
                    OutputMain_Dto output = new OutputMain_Dto();
                    output.Id            = item.ID;
                    output.TransacNo     = item.Transac_No;
                    output.QrCodeId      = item.QRCode_ID.Trim();
                    output.QrCodeVersion = item.QRCode_Version;
                    output.PlanNo        = item.MO_No.Trim();
                    output.Batch         = item.MO_Seq;
                    output.MatId         = item.Material_ID.Trim();
                    output.MatName       = item.Material_Name.Trim();
                    output.PickupNo      = qrCodeId;
                    output.RackLocation  = item.Rack_Location;
                    output.InStockQty    = _repoTransactionDetail.GetQtyByTransacNo(item.Transac_No);
                    output.TransOutQty   = 0;
                    output.RemainingQty  = _repoTransactionDetail.GetQtyByTransacNo(item.Transac_No);

                    var qrCodeModel = await _repoQRCodeMain.GetByQRCodeID(item.QRCode_ID);

                    var packingListModel = await _repoPackingList.GetByReceiveNo(qrCodeModel.Receive_No);

                    if (packingListModel != null)
                    {
                        output.SupplierName   = packingListModel.Supplier_Name.Trim();
                        output.SupplierNo     = packingListModel.Supplier_ID.Trim();
                        output.T3Supplier     = packingListModel.T3_Supplier.Trim();
                        output.T3SupplierName = packingListModel.T3_Supplier_Name;
                        output.SubconId       = packingListModel.Subcon_ID.Trim();
                        output.SubconName     = packingListModel.Subcon_Name;
                    }

                    listOuput.Add(output);
                }
                if (transactionModel.Count() == 0)
                {
                    message = "Had been finishing outputted!";
                }
            }

            // kiểm tra đơn yêu cầu có bị dư toolsize nào ko thì loại ra
            // do hệ thống còn liên quan đến hp nên có thể toolsize bị dư ko output được
            // lấy theo toolsize của bảng transaction detail, của những đơn cần output
            List <OutputTotalNeedQty_Dto> listNeedQtyByOutput = new List <OutputTotalNeedQty_Dto>();

            if (listOuput.Count() > 0)
            {
                var tmpTransacno  = listOuput.FirstOrDefault().TransacNo;
                var tmpListDetail = await _repoTransactionDetail.FindAll(x => x.Transac_No.Trim() == tmpTransacno.Trim()).OrderBy(x => x.Tool_Size).ToListAsync();

                foreach (var itemTmpListDetail in tmpListDetail)
                {
                    var tmpMaterialSheetSize = listMaterialSheetSize.Where(x => x.Tool_Size.Trim() == itemTmpListDetail.Tool_Size.Trim() && x.Order_Size.Trim() == itemTmpListDetail.Order_Size.Trim() && x.Model_Size.Trim() == itemTmpListDetail.Model_Size.Trim())
                                               .Select(x => new OutputTotalNeedQty_Dto {
                        Model_Size = x.Model_Size,
                        Order_Size = x.Order_Size,
                        Qty        = x.Qty,
                        Tool_Size  = x.Tool_Size
                    }).FirstOrDefault();
                    if (tmpMaterialSheetSize != null)
                    {
                        listNeedQtyByOutput.Add(tmpMaterialSheetSize);
                    }
                }
                // kiểm tra phần tử có trong transaction detail có mà trong material sheet size ko có, thì thêm vào material sheet size qty bằng 0
                var toolSizeHaveInDetailNotHaveInSheet = tmpListDetail.Where(p => !listMaterialSheetSize.Any(x => x.Tool_Size.Trim() == p.Tool_Size.Trim() && x.Order_Size.Trim() == p.Order_Size.Trim() && x.Model_Size.Trim() == p.Model_Size.Trim())).ToList();
                if (toolSizeHaveInDetailNotHaveInSheet.Any())
                {
                    var tmpMaterialSheetSize = listMaterialSheetSize.First();
                    foreach (var item in toolSizeHaveInDetailNotHaveInSheet)
                    {
                        OutputTotalNeedQty_Dto tmp = new OutputTotalNeedQty_Dto();
                        tmp.Model_Size = item.Model_Size;
                        tmp.Tool_Size  = item.Tool_Size;
                        tmp.Order_Size = item.Order_Size;
                        tmp.Qty        = 0;
                        listNeedQtyByOutput.Add(tmp);
                    }
                }
            }
            //// hết đoạn kiểm tra toolsize

            // dữ liệu cần lấy ra để hiển thị: listoutputmain là trong bảng transaction main với type bằng I, R, M và listmaterialsheetsize là số lượng cần output ra của đơn
            Output_Dto result = new Output_Dto();

            result.Outputs            = listOuput.OrderBy(x => x.InStockQty).ToList();
            result.OutputTotalNeedQty = listNeedQtyByOutput.OrderBy(x => x.Tool_Size).ToList();
            result.Message            = message;
            return(result);
        }
Esempio n. 3
0
        public async Task <Output_Dto> GetByQrCodeId(string qrCodeId)
        {
            // biến qrcodeid là sheet no của bảng materialsheetsize, dựa theo mã đó lấy ra listmaterialsheetsize là danh sánh đơn output ra
            var listMaterialSheetSize = await _repoMaterialSheetSize.FindAll(x => x.Sheet_No.Trim() == qrCodeId.Trim()).ProjectTo <Material_Sheet_Size_Dto>(_configMapper).OrderBy(x => x.Tool_Size).ToListAsync();

            // kiểm tra xem Sheet_No đó đã output bao giờ chưa, nếu có rồi là kiểm tra đơn đó đã output ra hết chưa
            var listTransactionMainTypeOByPickupNo = await _repoTransactionMain.FindAll().Where(x => x.Pickup_No.Trim() == qrCodeId && x.Transac_Type.Trim() == "O").ToListAsync();

            List <WMSB_Transaction_Detail> listTransactionDetailByBistTransactionMainTypeOByPickupNo = new List <WMSB_Transaction_Detail>();

            if (listTransactionMainTypeOByPickupNo.Count > 0)
            {
                foreach (var item in listTransactionMainTypeOByPickupNo)
                {
                    var tmp = await _repoTransactionDetail.FindAll(x => x.Transac_No == item.Transac_No).ToListAsync();

                    listTransactionDetailByBistTransactionMainTypeOByPickupNo.AddRange(tmp);
                }

                var totalTransQtyOutput = listTransactionDetailByBistTransactionMainTypeOByPickupNo.GroupBy(x => new { x.Order_Size })
                                          .Select(y => new
                {
                    OrderSize     = y.Key.Order_Size,
                    TotalTransQty = (decimal)y.Sum(z => z.Trans_Qty)
                }).ToList();

                listMaterialSheetSize = listMaterialSheetSize.Join(totalTransQtyOutput, x => x.Order_Size, y => y.OrderSize, (x, y) => new Material_Sheet_Size_Dto
                {
                    Qty               = (decimal)x.Qty - y.TotalTransQty,
                    Factory_ID        = x.Factory_ID,
                    Batch             = x.Batch,
                    Cur_Ent           = x.Cur_Ent,
                    HP_Update_Time    = x.HP_Update_Time,
                    HP_User           = x.HP_User,
                    Manno             = x.Manno,
                    Material_ID       = x.Material_ID,
                    Model_Size        = x.Model_Size,
                    Order_Size        = x.Order_Size,
                    Print_Size        = x.Print_Size,
                    Prod_Delivery_Way = x.Prod_Delivery_Way,
                    Sheet_No          = x.Sheet_No,
                    Subcont_Material  = x.Subcont_Material,
                    Tool_Size         = x.Tool_Size,
                    Update_By         = x.Update_By,
                    Update_Time       = x.Update_Time
                }).ToList();
            }
            // hết kiểm tra xem Sheet_No đó đã output ra bao giờ chưa


            List <OutputMain_Dto> listOuput = new List <OutputMain_Dto>();
            var materialSheetSize           = await _repoMaterialSheetSize.FindAll(x => x.Sheet_No.Trim() == qrCodeId.Trim()).FirstOrDefaultAsync();

            if (materialSheetSize != null)
            {
                List <WMSB_Transaction_Main> transactionModel = new List <WMSB_Transaction_Main>();
                // Nếu Prod_Delivery_Way == "A" thì chỉ lấy trong transaction main theo material_id và mo_no
                if (materialSheetSize.Prod_Delivery_Way == "A")
                {
                    transactionModel = await _repoTransactionMain.FindAll(x => x.MO_No.Trim() == materialSheetSize.Manno.Trim() && x.Material_ID == materialSheetSize.Material_ID && x.Can_Move == "Y" && x.Transac_Type != "O").ToListAsync();
                }
                // ngược lại là lấy theeo mo_no, material_id và batch
                else
                {
                    transactionModel = await _repoTransactionMain.FindAll(x => x.MO_No.Trim() == materialSheetSize.Manno.Trim() && x.MO_Seq.Trim() == materialSheetSize.Batch.Trim() && x.Material_ID == materialSheetSize.Material_ID && x.Can_Move == "Y" && x.Transac_Type != "O").ToListAsync();
                }

                foreach (var item in transactionModel)
                {
                    var rackLocation = await _repoRackLocation.FindAll(x => x.Rack_Location.Trim() == item.Rack_Location.Trim()).FirstOrDefaultAsync();

                    // dữ liệu output cần hiển thị: trong bảng tranasaction main, transaction detail ...
                    OutputMain_Dto output = new OutputMain_Dto();
                    output.Id            = item.ID;
                    output.TransacNo     = item.Transac_No;
                    output.QrCodeId      = item.QRCode_ID.Trim();
                    output.QrCodeVersion = item.QRCode_Version;
                    output.PlanNo        = item.MO_No.Trim();
                    output.Batch         = item.MO_Seq;
                    output.MatId         = item.Material_ID.Trim();
                    output.MatName       = item.Material_Name.Trim();
                    if (rackLocation != null)
                    {
                        output.Building = _repoCode.FindSingle(x => x.Code_Type == 3 && x.Code_ID == rackLocation.Build_ID).Code_Ename; // building With WMS_Code.Code_TYPE = 3
                        output.Area     = _repoCode.FindSingle(x => x.Code_Type == 5 && x.Code_ID == rackLocation.Area_ID).Code_Ename;  // building With WMS_Code.Code_TYPE = 5
                        output.WH       = _repoCode.FindSingle(x => x.Code_Type == 2 && x.Code_ID == rackLocation.WH_ID).Code_Ename;    // building With WMS_Code.Code_TYPE = 2
                    }
                    output.RackLocation = item.Rack_Location;
                    output.InStockQty   = _repoTransactionDetail.GetQtyByTransacNo(item.Transac_No);
                    output.TransOutQty  = 0;
                    output.RemainingQty = _repoTransactionDetail.GetQtyByTransacNo(item.Transac_No);

                    var qrCodeModel = await _repoQRCodeMain.GetByQRCodeID(item.QRCode_ID);

                    var packingListModel = await _repoPackingList.GetByReceiveNo(qrCodeModel.Receive_No);

                    if (packingListModel != null)
                    {
                        output.SupplierName = packingListModel.Supplier_Name.Trim();
                        output.SupplierNo   = packingListModel.Supplier_ID.Trim();
                    }

                    listOuput.Add(output);
                }
            }

            // dữ liệu cần lấy ra để hiển thị: listoutputmain là trong bảng transaction main với type bằng I, R, M và listmaterialsheetsize là số lượng cần output ra của đơn
            Output_Dto result = new Output_Dto();

            result.Outputs            = listOuput.OrderBy(x => x.InStockQty).ToList();
            result.MaterialSheetSizes = listMaterialSheetSize;
            return(result);
        }