示例#1
0
        //move reserve stock
        public static void moveReserveStock(int idCstmPODt_Free, int idCstmPODt
                                            , int id_tb_Stock, decimal ReserveQty)
        {
            using (var db = new DataClasses1DataContext())
            {
                var tbst = db.tb_Stocks.Where(x => x.id == id_tb_Stock).FirstOrDefault();
                //**เขียน ShipQty ออกจาก Job
                //เขียน SHipping Header
                tb_ShippingH gg = new tb_ShippingH();
                int          idProductionOrderRM = 0;
                string       shipNo = dbClss.GetNo(5, 2);
                gg.ShippingNo = shipNo;
                gg.ShipDate   = DateTime.Now;
                gg.UpdateBy   = ClassLib.Classlib.User;
                gg.UpdateDate = DateTime.Now;
                gg.CreateBy   = ClassLib.Classlib.User;
                gg.CreateDate = DateTime.Now;
                gg.ShipName   = ClassLib.Classlib.User;
                var po = db.mh_CustomerPODTs.Where(x => x.id == idCstmPODt)
                         .Join(db.mh_CustomerPOs.Where(x => x.DemandType == 0)
                               , dt => dt.idCustomerPO
                               , hd => hd.id
                               , (dt, hd) => new { hd, dt }).FirstOrDefault();
                string cstmPOno = (po != null && po.hd != null) ? po.hd.CustomerPONo : idCstmPODt.ToSt();
                gg.Remark      = $"Shipping for Move Stock to new CustomerPO ({cstmPOno})";
                gg.JobCard     = "";
                gg.TempJobCard = "";
                byte[] barcode = null;
                gg.BarCode    = barcode;
                gg.Status     = "Completed";
                gg.ToLocation = "Warehouse";
                db.tb_ShippingHs.InsertOnSubmit(gg);
                db.SubmitChanges();
                //Shipping ADD
                var tool    = db.mh_Items.Where(x => x.InternalNo == tbst.CodeNo).FirstOrDefault();
                var uom     = db.mh_ItemUOMs.Where(x => x.UOMCode == tool.BaseUOM && x.ItemNo == tbst.CodeNo).FirstOrDefault();
                var pcsunit = 1.00m;
                if (uom != null)
                {
                    pcsunit = uom.QuantityPer;
                }
                db.sp_024_tb_Shipping_ADD(shipNo, tbst.CodeNo
                                          , ReserveQty //QtyPlan
                                          , ReserveQty //QtyShip
                                          , "", "", "", ""
                                          , tbst.LotNo
                                          , "Completed", ClassLib.Classlib.User
                                          , "", ""//txtTempJobCard.Text.Trim()
                                          , 0, tbst.Location, "Warehouse", tool.BaseUOM, pcsunit
                                          , tool.BaseUOM, pcsunit, idCstmPODt_Free
                                          , idProductionOrderRM
                                          , 1
                                          );

                //**Stock Receive ใส่ Customer PODt id ใบใหม่
                var amntCost = Math.Round(tbst.UnitCost.ToDecimal() * ReserveQty.ToDecimal(), 2);
                var s        = new tb_Stock();
                s.AppDate     = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                s.Seq         = 1;
                s.App         = "Receive";
                s.Appid       = 1;
                s.CreateBy    = ClassLib.Classlib.User;
                s.CreateDate  = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                s.DocNo       = dbClss.GetNo(33, 2); //MOS -- Move stock free to new CustomerPO
                s.RefNo       = id_tb_Stock.ToSt();  //Refer id tb_Stock ของ stock free Customer PO เก่า
                s.CodeNo      = tbst.CodeNo;
                s.Type        = "Move Stock Free to New Sale Order";
                s.QTY         = ReserveQty;
                s.Inbound     = s.QTY;
                s.Outbound    = 0;
                s.Type_i      = 1;
                s.Category    = "Invoice";
                s.Refid       = idCstmPODt_Free; //old idCstmPODt ---> Free Stock
                s.idCSTMPODt  = idCstmPODt;      //new idCstmPODt
                s.Type_in_out = "In";
                s.AmountCost  = amntCost;
                if (s.AmountCost > 0)
                {
                    s.UnitCost = Math.Round(s.AmountCost.ToDecimal() / s.QTY.ToDecimal(), 6);
                }
                else
                {
                    s.UnitCost = 0;
                }

                decimal RemainQty      = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(s.CodeNo, "Free", 0, "Warehouse", -1)));
                decimal sum_Remain     = Convert.ToDecimal(dbClss.Get_Stock(s.CodeNo, "", "", "RemainAmount", "Warehouse", 0 /*idCstmPODt*/)) + s.AmountCost.ToDecimal();
                decimal sum_Qty        = RemainQty.ToDecimal() + s.QTY.ToDecimal();
                var     RemainAmount   = sum_Remain;
                decimal RemainUnitCost = 0.00m;
                if (sum_Qty <= 0)
                {
                    RemainUnitCost = 0;
                }
                else
                {
                    RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 6);
                }
                s.RemainQty      = sum_Qty;
                s.RemainUnitCost = RemainUnitCost;
                s.RemainAmount   = RemainAmount;
                s.Avg            = 0;
                s.CalDate        = null;
                s.Status         = "Active";
                s.Flag_ClearTemp = 0;
                s.TLCost         = s.AmountCost;
                s.TLQty          = s.QTY;
                s.ShipQty        = 0;
                s.Location       = "Warehouse";
                s.LotNo          = tbst.LotNo;
                s.ShelfNo        = tbst.ShelfNo;
                //ต้องไม่ใช่ Item ที่มีในระบบ
                var c = (from ix in db.mh_Items
                         where ix.InternalNo.Trim().ToUpper() == s.CodeNo.Trim().ToUpper() && ix.Active
                         select ix).ToList();
                if (c.Count <= 0)
                {
                    s.TLQty   = 0;
                    s.ShipQty = s.QTY;
                }

                db.tb_Stocks.InsertOnSubmit(s);
                db.SubmitChanges();

                //update Stock เข้า item
                db.sp_010_Update_StockItem(Convert.ToString(s.CodeNo), "");
            }
        }
        private void SaveDetail()
        {
            string   ADNo        = txtListNo1.Text.Trim().ToUpper();
            DateTime?RequireDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
            //if (!dtRequire.Text.Equals(""))
            //    RequireDate = dtRequire.Value;

            int      Seq        = 0;
            DateTime?UpdateDate = null;
            string   LotNo      = "";

            using (DataClasses1DataContext db = new DataClasses1DataContext())
            {
                string SS = "";
                int    id = 0;

                DateTime?CalDate        = null;
                DateTime?AppDate        = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                string   Type           = "";
                string   Category       = "";
                int      Flag_ClearTemp = 0;
                string   Type_in_out    = "In";
                decimal  RemainQty      = 0;
                decimal  Amount         = 0;
                decimal  RemainAmount   = 0;
                decimal  RemainUnitCost = 0;
                //decimal Avg = 0;
                decimal UnitCost    = 0;
                decimal sum_Remain  = 0;
                decimal sum_Qty     = 0;
                decimal BasePCSUnit = 0;
                Category       = "Adjust";
                Type           = "Adjust";
                Flag_ClearTemp = 5;
                decimal Qty      = 0;
                string  Location = "";
                string  ShelfNo  = "";
                var     c        = (from ix in db.mh_CheckStock_Lists select ix)
                                   .Where(a => a.CheckStatus == "Process" &&
                                          a.SeqStatus == 2 &&
                                          Convert.ToString(a.ApproveBy) != "" &&
                                          a.CheckNo.Trim().ToUpper() == ADNo.Trim().ToUpper() &&
                                          Convert.ToBoolean(a.InputOK) == true).ToList();
                if (c.Count > 0)
                {
                    foreach (var ss in c)
                    {
                        id = StockControl.dbClss.TInt(ss.id);

                        if (StockControl.dbClss.TDe(ss.InputQty) != (0)) // เอาเฉพาะรายการที่ไม่เป็น 0
                        {
                            //if (StockControl.dbClss.TInt(g.Cells["id"].Value) <= 0)  //New ใหม่
                            //{

                            LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd"));
                            //StockControl.dbClss.TSt(g.Cells["LotNo"].Value);
                            //if (LotNo == "")
                            //{
                            //LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd"));
                            //    }
                            Seq += 1;
                            tb_StockAdjust u = new tb_StockAdjust();
                            u.AdjustNo = ADNo;

                            u.CodeNo = StockControl.dbClss.TSt(ss.InternalNo);
                            var i = (from ix in db.mh_Items
                                     where ix.InternalNo.Trim() == StockControl.dbClss.TSt(ss.InternalNo).Trim() && ix.Active == true
                                     select ix).ToList();
                            if (i.Count > 0)
                            {
                                u.ItemNo          = StockControl.dbClss.TSt(i.FirstOrDefault().InternalName);
                                u.ItemDescription = StockControl.dbClss.TSt(i.FirstOrDefault().InternalDescription);
                                u.Location        = StockControl.dbClss.TSt(i.FirstOrDefault().Location);
                                Location          = StockControl.dbClss.TSt(i.FirstOrDefault().Location);
                                u.ShelfNo         = StockControl.dbClss.TSt(i.FirstOrDefault().ShelfNo);
                                ShelfNo           = StockControl.dbClss.TSt(i.FirstOrDefault().ShelfNo);
                            }
                            u.Qty            = StockControl.dbClss.TDe(ss.InputQty);
                            u.StandardCost   = StockControl.dbClss.TDe(ss.Cost);
                            u.PCSUnit        = StockControl.dbClss.TDe(ss.PCSUnit);
                            u.Unit           = StockControl.dbClss.TSt(ss.UOM);
                            u.Amount         = StockControl.dbClss.TDe(ss.Amount);
                            u.Reason         = StockControl.dbClss.TSt(ss.Remark);
                            u.LotNo          = LotNo;
                            u.StockType      = "Taking";
                            u.Seq            = Seq;
                            u.Status         = "Completed";
                            u.CreateBy       = ClassLib.Classlib.User;
                            u.CreateDate     = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                            u.RefidJobCard   = 0;
                            u.RefJobCard     = "";
                            u.RefTempJobCard = "";
                            u.idCSTMPODt     = 0;
                            db.tb_StockAdjusts.InsertOnSubmit(u);
                            db.SubmitChanges();
                            dbClss.AddHistory(this.Name, "ปรับสต็อก", "เพิ่มรายการ ปรับสต็อก [" + u.CodeNo + " จำนวนปรับปรุง :" + u.Qty.ToString() + " จำนวนก่อนปรับปรุง " + StockControl.dbClss.TSt(ss.StockQty) + "]", ADNo);


                            decimal StandardCost = 0;
                            StandardCost = dbClss.TDe(ss.Cost); //Math.Round((StockControl.dbClss.TDe(gg.Amount) / StockControl.dbClss.TDe(g.Cells["QTYTrue"].Value)), 2);

                            Qty = StockControl.dbClss.TDe(ss.InputQty);
                            if (Qty > 0)
                            {
                                Seq        += 1;
                                BasePCSUnit = 1;
                                Amount      = StockControl.dbClss.TDe(ss.Amount);
                                UnitCost    = Math.Round((Amount / Qty), 2);//Math.Round((Amount / (Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit)), 2);

                                //แบบที่ 1 จะไป sum ใหม่
                                RemainQty  = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(StockControl.dbClss.TSt(ss.InternalNo), "Free", 0, Location, 0)));
                                sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(StockControl.dbClss.TSt(ss.InternalNo), "", "", "RemainAmount", Location, 0))
                                             + Amount;

                                sum_Qty      = RemainQty + Qty;//Math.Round(((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit)), 2);
                                RemainAmount = sum_Remain;
                                if (sum_Qty <= 0)
                                {
                                    RemainUnitCost = 0;
                                }
                                else
                                {
                                    RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 2);
                                }

                                tb_Stock gg = new tb_Stock();
                                gg.AppDate        = AppDate;
                                gg.Seq            = Seq;
                                gg.App            = "Adjust";
                                gg.Appid          = Seq;
                                gg.CreateBy       = ClassLib.Classlib.User;
                                gg.CreateDate     = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                                gg.DocNo          = ss.CheckNo;
                                gg.RefNo          = ss.CheckNo;
                                gg.CodeNo         = ss.InternalNo;
                                gg.Type           = Type;
                                gg.QTY            = Qty; //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2);
                                gg.Inbound        = Qty; //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2);
                                gg.Outbound       = 0;
                                gg.Type_i         = 1;   //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6
                                gg.Category       = Category;
                                gg.Refid          = 0;
                                gg.Type_in_out    = Type_in_out;
                                gg.AmountCost     = Amount;
                                gg.UnitCost       = UnitCost;
                                gg.RemainQty      = sum_Qty;
                                gg.RemainUnitCost = RemainUnitCost;
                                gg.RemainAmount   = RemainAmount;
                                gg.Avg            = 0;// Avg;
                                gg.CalDate        = CalDate;
                                gg.Status         = "Active";
                                gg.Flag_ClearTemp = Flag_ClearTemp; //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว
                                gg.TLCost         = Amount;
                                gg.TLQty          = Qty;            //Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2);
                                gg.ShipQty        = 0;
                                gg.Location       = Location;
                                gg.ShelfNo        = ShelfNo;
                                gg.LotNo          = LotNo;
                                gg.idCSTMPODt     = -3;
                                gg.Free           = true;

                                //ต้องไม่ใช่ Item ที่มีในระบบ
                                var cc = (from ix in db.mh_Items
                                          where ix.InternalNo.Trim().ToUpper() == ss.InternalNo.Trim().ToUpper() && ix.Active == true
                                          select ix).ToList();
                                if (cc.Count <= 0)
                                {
                                    gg.TLQty   = 0;
                                    gg.ShipQty = Qty;//Math.Round((Qty * StockControl.dbClss.TDe(g.Cells["PCSUnit"].Value) * BasePCSUnit), 2);
                                }

                                db.tb_Stocks.InsertOnSubmit(gg);
                                db.SubmitChanges();
                            }
                            else if (Qty < 0) //ปรับออก
                            {
                                Qty = Math.Abs(Qty);
                                //db.sp_041_tb_Adjust_Stock(txtADNo.Text, vv.CodeNo, Qty, ClassLib.Classlib.User,"","",0, Location,dbClss.TInt(vv.idCSTMPODt));
                                db.sp_057_Cut_Stock(ss.CheckNo, StockControl.dbClss.TSt(ss.InternalNo).Trim().ToUpper(), Qty, ClassLib.Classlib.User, "", "", 0, Location, "Adjust", "Adjust", 5, 0, 0, "", 0);
                            }

                            //update Stock เข้า item
                            db.sp_010_Update_StockItem(StockControl.dbClss.TSt(ss.InternalNo).Trim().ToUpper(), "");
                        }
                        //else
                        //{
                        //    var c = (from ix in db.mh_CheckStock_Lists select ix)
                        //             .Where(a => a.CheckStatus == "Waiting" && a.id == id).ToList();
                        //    if (c.Count > 0)
                        //    {
                        //        foreach (var ss in c)
                        //        {
                        //            ss.CheckStatus = "Completed";
                        //            db.SubmitChanges();
                        //        }
                        //    }
                        //}
                    }
                }
                var up = (from ix in db.mh_CheckStock_Lists select ix)
                         .Where(a => a.CheckStatus != "Completed" && a.CheckStatus != "Cancel" &&
                                a.SeqStatus == 2 &&
                                Convert.ToString(a.ApproveBy) != "" &&
                                a.CheckNo.Trim().ToUpper() == ADNo.Trim().ToUpper()
                                //&& Convert.ToBoolean(a.InputOK) == true
                                ).ToList();
                if (up.Count > 0)
                {
                    foreach (var ss in up)
                    {
                        ss.CheckStatus = "Completed";
                        db.SubmitChanges();
                    }
                }
            }
        }
示例#3
0
        private void Save_detail2_H(int seq, int id, string SHNo, string CodeNo)
        {
            using (DataClasses1DataContext db = new DataClasses1DataContext())
            {
                string Type     = "CNShipping";
                string Category = "Invoice"; //Temp,Invoice

                string  Type_in_out    = "In";
                decimal RemainQty      = 0;
                decimal Amount         = 0;
                decimal RemainAmount   = 0;
                decimal Avg            = 0;
                decimal UnitCost       = 0;
                decimal sum_Remain     = 0;
                decimal sum_Qty        = 0;
                decimal RemainUnitCost = 0;
                string  Location       = "";
                string  ShelfNo        = "";
                var     g = (from ix in db.tb_Shippings
                             //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                             where ix.ShippingNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" &&
                             ix.id == id
                             select ix).First();

                g.Status = "Cancel";
                //insert Stock
                DateTime?CalDate = null;
                DateTime?AppDate = DateTime.Now;
                int      Seq     = seq;

                UnitCost = Convert.ToDecimal(g.UnitCost); //get_cost(g.CodeNo);
                Amount   = Convert.ToDecimal(g.QTY) * UnitCost;

                string Category1 = "Free";
                if (dbClss.TInt(g.idCSTMPODt) > 0)
                {
                    Category1 = "CstmPOID";
                }
                //แบบที่ 1 จะไป sum ใหม่
                RemainQty = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(g.CodeNo, Category1, 0, dbClss.TSt(g.Location), dbClss.TInt(g.idCSTMPODt))));
                //แบบที่ 2 จะไปดึงล่าสุดมา
                //RemainQty = Convert.ToDecimal(dbClss.Get_Stock(vv.CodeNo, "", "", "RemainQty"));

                sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(g.CodeNo, "", "", "RemainAmount", dbClss.TSt(g.Location), dbClss.TInt(g.idCSTMPODt)))
                             + Amount;

                sum_Qty = RemainQty + Convert.ToDecimal(g.QTY);
                //if (sum_Qty > 0)
                //    Avg = sum_Remain / sum_Qty;
                //else
                //    Avg = 0;

                RemainAmount = sum_Remain;//sum_Qty * Avg;
                if (sum_Qty <= 0)
                {
                    RemainUnitCost = 0;
                }
                else
                {
                    RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 2);
                }

                //กรณีที่ Shipping แบบ Temp แล้ว cancel ให้มาปรับ Flag ด้วย
                var s1 = (from ix in db.tb_Stocks
                          //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                          where ix.DocNo.Trim() == SHNo.Trim() &&
                          ix.Status != "Cancel" &&
                          ix.CodeNo == CodeNo
                          //&& ix.Refid == id
                          //&& ix.Category == "Temp"
                          //&& ix.Flag_ClearTemp == 1
                          && ix.Type == "Shipping"
                          select ix).ToList();
                if (s1.Count > 0)
                {
                    Location = dbClss.TSt(s1.FirstOrDefault().Location);
                    ShelfNo  = dbClss.TSt(s1.FirstOrDefault().ShelfNo);
                    var ss = (from ix in db.tb_Stocks
                              //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                              where ix.DocNo.Trim() == SHNo.Trim() &&
                              ix.Status != "Cancel"
                              //&& ix.Refid == id
                              && ix.CodeNo == CodeNo &&
                              ix.Category == "Temp" &&
                              ix.Flag_ClearTemp == 1 &&
                              ix.Type == "Shipping"
                              select ix).ToList();
                    if (ss.Count > 0)
                    {
                        var s = (from ix in db.tb_Stocks
                                 //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                                 where ix.DocNo.Trim() == SHNo.Trim() &&
                                 ix.Status != "Cancel"
                                 //&& ix.Refid == id
                                 && ix.CodeNo == CodeNo &&
                                 ix.Category == "Temp" &&
                                 ix.Flag_ClearTemp == 1 &&
                                 ix.Type == "Shipping"
                                 select ix).First();
                        if (s != null)
                        {
                            s.Flag_ClearTemp = 2;
                            db.SubmitChanges();
                            Location = dbClss.TSt(s.Location);
                        }
                    }

                    string LotNo = "";
                    if (LotNo == "")
                    {
                        LotNo = dbClss.Get_Lot(DateTime.Now.ToString("yyyyMMdd"));
                    }

                    tb_Stock gg = new tb_Stock();
                    gg.AppDate    = AppDate;
                    gg.Seq        = Seq;
                    gg.App        = "Cancel SH";
                    gg.Appid      = Seq;
                    gg.CreateBy   = ClassLib.Classlib.User;
                    gg.CreateDate = DateTime.Now;
                    gg.DocNo      = txtCNNo.Text;
                    gg.RefNo      = SHNo;
                    gg.Type       = ddlType.Text;
                    gg.QTY        = Convert.ToDecimal(g.QTY);
                    gg.Inbound    = Convert.ToDecimal(g.QTY);
                    gg.Outbound   = 0;
                    gg.CodeNo     = g.CodeNo;
                    gg.Status     = "Active";

                    gg.Type_i   = 4;                                      //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6
                    gg.Category = Category;
                    gg.Refid    = dbClss.TInt(s1.FirstOrDefault().Refid); //Convert.ToInt32(txtid.Text);
                    gg.RefidAD  = s1.FirstOrDefault().RefidAD;
                    //gg.RefShipid = id;
                    gg.Flag_ClearTemp = 0;   //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว
                    gg.Type_in_out    = Type_in_out;
                    gg.AmountCost     = Amount;
                    gg.UnitCost       = UnitCost;
                    gg.RemainQty      = sum_Qty;
                    gg.RemainUnitCost = RemainUnitCost;
                    gg.RemainAmount   = RemainAmount;
                    gg.Avg            = 0;// Avg;
                    gg.TLCost         = Amount;
                    gg.TLQty          = Convert.ToDecimal(g.QTY);
                    gg.ShipQty        = 0;
                    gg.Location       = Location;
                    gg.ShelfNo        = ShelfNo;
                    gg.idCSTMPODt     = dbClss.TInt(s1.FirstOrDefault().idCSTMPODt);
                    gg.RefTempJobCode = dbClss.TSt(s1.FirstOrDefault().RefTempJobCode);
                    gg.RefJobCode     = dbClss.TSt(s1.FirstOrDefault().RefJobCode);
                    gg.RefidJobCode   = dbClss.TInt(s1.FirstOrDefault().RefidJobCode);
                    gg.Free           = true;
                    gg.LotNo          = LotNo;
                    db.tb_Stocks.InsertOnSubmit(gg);
                    db.SubmitChanges();

                    dbClss.AddHistory(this.Name, "เพิ่ม Stock", "Cancel รายการ Shipping [" + txtSHNo.Text.Trim() + " id : " + g.id.ToString() + " CodeNo : " + g.CodeNo + " จำนวน : " + g.QTY.ToString() + "]", txtCNNo.Text);

                    //update Stock เข้า item
                    db.sp_010_Update_StockItem(Convert.ToString(g.CodeNo), "");
                }
            }
        }
示例#4
0
        void SaveE()
        {
            try
            {
                using (var db = new DataClasses1DataContext())
                {
                    string PKNo = (txtidPk.Text.ToInt() > 0) ? txtPackingNo.Text.Trim() : "";
                    var    m    = db.mh_Packings.Where(x => x.PackingNo == PKNo).FirstOrDefault();
                    if (m == null)
                    {
                        m            = new mh_Packing();
                        m.CreateBy   = ClassLib.Classlib.User;
                        m.CreateDate = DateTime.Now;
                        m.PackingNo  = dbClss.GetNo(32, 2);
                        db.mh_Packings.InsertOnSubmit(m);

                        dbClss.AddHistory(this.Name, "Packing", $"New document Packing {m.PackingNo}", m.PackingNo);
                    }
                    m.Remark      = txtRemark.Text;
                    m.Active      = true;
                    m.UpdateDate  = DateTime.Now;
                    m.UpdateBy    = ClassLib.Classlib.User;
                    m.PackingDate = dtPackingDate.Value.Date;
                    db.SubmitChanges(); //Save Header

                    //DT
                    foreach (var item in dgvData.Rows)
                    {
                        if (item.Cells["Qty"].Value.ToDecimal() == 0)
                        {
                            continue;
                        }

                        bool   newItem = false;
                        int    id      = item.Cells["id"].Value.ToInt();
                        int    idJob   = item.Cells["idJob"].Value.ToInt();
                        string jobNo   = item.Cells["RefNo"].Value.ToSt();
                        var    dt      = db.mh_PackingDts.Where(x => x.id == id).FirstOrDefault();
                        if (dt == null)
                        {
                            dt = new mh_PackingDt();
                            db.mh_PackingDts.InsertOnSubmit(dt);
                            newItem = true;
                        }
                        dt.PackingNo = m.PackingNo;
                        dt.ItemNo    = item.Cells["ItemNo"].Value.ToSt();
                        dt.ItemName  = item.Cells["ItemName"].Value.ToSt();
                        dt.Qty       = item.Cells["Qty"].Value.ToDecimal();
                        dt.UOM       = item.Cells["UOM"].Value.ToSt();
                        dt.PCSUnit   = item.Cells["PCSUnit"].Value.ToDecimal();
                        dt.Amount    = item.Cells["Amount"].Value.ToDecimal();
                        //find Rem amount when Receive Qty == Out Qty
                        var prod = db.mh_ProductionOrders.Where(x => x.id == idJob).FirstOrDefault();
                        if (prod == null)
                        {
                            continue;
                        }
                        if (dt.Qty == prod.OutQty)
                        {
                            var sumProd = db.mh_ProductionOrderRMs.Where(x => x.JobNo == jobNo && x.Active).Sum(x => x.CostOverall);
                            var temp    = db.mh_ProductionOrderRM_2s.Where(x => x.JobNo == jobNo && x.Active).ToList();
                            if (temp.Count > 0)
                            {
                                sumProd += temp.Sum(x => x.TotalCost);
                            }
                            var costAll    = prod.CostOverhead + sumProd; //Cost All in Job (Cost Overhead + RM Cost)
                            var costTaking = 0.00m;
                            var packall    = db.mh_Packings.Where(x => x.Active)
                                             .Join(db.mh_PackingDts.Where(x => x.Active && x.idJob == idJob)
                                                   , pk_hd => pk_hd.PackingNo
                                                   , pk_dt => pk_dt.PackingNo
                                                   , (pk_hd, pk_dt) => new { pk_hd, pk_dt }).ToList();
                            if (packall.Count() > 0)
                            {
                                costTaking = packall.Sum(x => x.pk_dt.Amount);
                            }
                            //costRem
                            dt.Amount = costAll - costTaking;
                        }
                        dt.UnitPrice = Math.Round(dt.Amount / dt.Qty, 2);

                        DateTime dNow  = DateTime.Now.Date;
                        string   LotNo = item.Cells["LotNo"].Value.ToSt();
                        //var dLot = db.mh_LotFGs.Where(x => x.LotDate == dNow).FirstOrDefault();
                        //if (dLot != null)
                        //{
                        //    LotNo = dLot.LotNo;
                        //    //prod.LotNo = dLot.LotNo; //ใส่ lot ในใบ Production
                        //}
                        dt.LotNo             = LotNo;
                        dt.ShelfNo           = item.Cells["ShelfNo"].Value.ToSt();
                        dt.Remark            = item.Cells["Remark"].Value.ToSt();
                        dt.RefNo             = jobNo;
                        dt.CustomerPONo      = item.Cells["CustomerPONo"].Value.ToSt();
                        dt.CustomerPONo_TEMP = item.Cells["CustomerPONo_TEMP"].Value.ToSt();
                        dt.idJob             = idJob;
                        dt.idCstmPODt        = item.Cells["idCstmPODt"].Value.ToInt();
                        dt.Active            = true;
                        dt.OfTag             = item.Cells["OfTag"].Value.ToSt();
                        dt.FullTag           = item.Cells["FullTag"].Value.ToSt();

                        db.SubmitChanges(); //Save Detail

                        //update OutQty -- Job
                        var job = prod;
                        if (job != null)
                        {
                            job.OutQty -= dt.Qty;
                            if (job.OutQty <= 0)
                            {
                                job.CloseJob = true;
                                ////รับครบ
                                //var slist = db.tb_Stocks.Where(x => x.idCSTMPODt == item.Cells["idCstmPODt"].Value.ToInt() && x.TLQty > 0 && x.Type != "Receive By Job").ToList();
                                //foreach (var ss in slist)
                                //    ss.Free = true;
                                db.SubmitChanges();
                            }

                            dbClss.AddHistory("ProductionOrder", "Job Order Sheet", $"Receive by Packing No {m.PackingNo} : {dt.Qty}", job.JobNo);
                        }
                        //Stock
                        if (newItem)
                        {
                            var s = new tb_Stock();
                            s.AppDate    = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                            s.Seq        = item.Index + 1;
                            s.App        = "Receive";
                            s.Appid      = item.Index + 1;
                            s.CreateBy   = ClassLib.Classlib.User;
                            s.CreateDate = Convert.ToDateTime(DateTime.Now, new CultureInfo("en-US"));
                            s.DocNo      = m.PackingNo;
                            s.RefNo      = job.JobNo; //JobNo --> mh_ProductionOrder
                            s.CodeNo     = item.Cells["ItemNo"].Value.ToSt();
                            s.Type       = "Receive By Job";
                            s.QTY        = Math.Round(item.Cells["Qty"].Value.ToDecimal() * item.Cells["PCSUnit"].Value.ToDecimal(), 2);
                            s.Inbound    = s.QTY;
                            s.Outbound   = 0;
                            s.Type_i     = 1;
                            s.Category   = "Invoice";
                            s.Refid      = dt.id; //id mh_PackingDt


                            //กรณีปกติจะบันทึก idCustomerPO Dt เพื่อระบุว่าของที่รับเข้าใช้สำหรับ Customer PO ใด
                            s.idCSTMPODt = job.RefDocId; //idCstmPODt -->เปลี่ยนเป็น idSaleOrder

                            var so = db.mh_SaleOrderDTs.Where(x => x.id == job.RefDocId)
                                     .Join(db.mh_SaleOrders.Where(x => x.Active)
                                           , sodt => sodt.SONo
                                           , sohd => sohd.SONo
                                           , (sodt, sohd) => new { sohd, sodt }).FirstOrDefault();
                            if (so == null)
                            {
                                continue;             // Packing จาก Job ต้องมาจาก SaleOrder เท่านั้น
                            }
                            //เช็คว่าเป็น FG ที่ผลิตเพื่อ Customer PO (Safety stock หรือไม่) :::: DemandType = 1 --> ผลิตเพื่อ Safety Stock
                            if (so.sodt.ItemNo == s.CodeNo)
                            {
                                if (so.sodt.forSafetyStock && so.sohd.DemandType == 1) //เป็น FG ที่ผลิตเพื่อ Safety Stock ให้ใส่ idCstmPO =0
                                {
                                    s.idCSTMPODt = 0;
                                    s.Free       = false;
                                }
                                else
                                {
                                    s.Free = true;
                                }

                                so.sodt.OutQty -= s.QTY.ToDecimal();
                                if (so.sodt.OutQty < 0)
                                {
                                    so.sodt.OutQty = 0;
                                }
                                //dbClss.AddHistory("CustomerPO", "Customer P/O", $"Receive by Packing no. {m.PackingNo} : {s.QTY}", cstmpo.pohd.CustomerPONo);
                            }
                            else //เป็น SEMI Component หรือ FG Component
                            {
                                s.Free = true;
                            }

                            if (false)
                            {
                                //กรณี Safety Stock จะบันทึก idCStmPODt เป็น 0 แต่ถ้าเป็นการรับเพื่อไปผลิต FG Safety Stock จะใส่ id นั้นๆปกติ
                                //var cstmpo = db.mh_CustomerPODTs.Where(x => x.id == job.RefDocId /*&& x.forSafetyStock*/)
                                //    .Join(db.mh_CustomerPOs.Where(x => x.Active /*x.DemandType == 1*/)
                                //    , podt => podt.idCustomerPO
                                //    , pohd => pohd.id
                                //    , (podt, pohd) => new { pohd, podt }).FirstOrDefault();
                                //if (cstmpo != null)
                                //{
                                ////เช็คว่าเป็น FG ที่ผลิตเพื่อ Customer PO (Safety stock หรือไม่) :::: DemandType = 1 --> ผลิตเพื่อ Safety Stock
                                //if (cstmpo.podt.ItemNo == s.CodeNo)
                                //{
                                //    if(cstmpo.podt.forSafetyStock && cstmpo.pohd.DemandType == 1) //เป็น FG ที่ผลิตเพื่อ Safety Stock ให้ใส่ idCstmPO =0
                                //        s.idCSTMPODt = 0;

                                //    cstmpo.podt.OutQty -= s.QTY.ToDecimal();
                                //    if (cstmpo.podt.OutQty < 0)
                                //        cstmpo.podt.OutQty = 0;
                                //    dbClss.AddHistory("CustomerPO", "Customer P/O", $"Receive by Packing no. {m.PackingNo} : {s.QTY}", cstmpo.pohd.CustomerPONo);
                                //}
                                //}
                            }

                            s.Type_in_out = "In";
                            s.AmountCost  = dt.Amount;
                            if (s.AmountCost > 0)
                            {
                                s.UnitCost = Math.Round(s.AmountCost.ToDecimal() / s.QTY.ToDecimal(), 6);
                            }
                            else
                            {
                                s.UnitCost = 0;
                            }

                            decimal RemainQty      = (Convert.ToDecimal(db.Cal_QTY_Remain_Location(s.CodeNo, "", 0, "Warehouse", -1)));
                            decimal sum_Remain     = Convert.ToDecimal(dbClss.Get_Stock(s.CodeNo, "", "", "RemainAmount", "Warehouse", 0 /*job.RefDocId*/)) + s.AmountCost.ToDecimal();
                            decimal sum_Qty        = RemainQty.ToDecimal() + s.QTY.ToDecimal();
                            var     RemainAmount   = sum_Remain;
                            decimal RemainUnitCost = 0.00m;
                            if (sum_Qty <= 0)
                            {
                                RemainUnitCost = 0;
                            }
                            else
                            {
                                RemainUnitCost = Math.Round((Math.Abs(RemainAmount) / Math.Abs(sum_Qty)), 6);
                            }
                            s.RemainQty      = sum_Qty;
                            s.RemainUnitCost = RemainUnitCost;
                            s.RemainAmount   = RemainAmount;
                            s.Avg            = 0;
                            s.CalDate        = null;
                            s.Status         = "Active";
                            s.Flag_ClearTemp = 0;
                            s.TLCost         = s.AmountCost;
                            s.TLQty          = s.QTY;
                            s.ShipQty        = 0;
                            s.Location       = "Warehouse";
                            s.LotNo          = dt.LotNo;
                            s.ShelfNo        = item.Cells["ShelfNo"].Value.ToSt();
                            s.RefTempJobCode = m.PackingNo;
                            s.RefidJobCode   = dt.id;
                            //ต้องไม่ใช่ Item ที่มีในระบบ
                            var c = (from ix in db.mh_Items
                                     where ix.InternalNo.Trim().ToUpper() == s.CodeNo.Trim().ToUpper() && ix.Active
                                     select ix).ToList();
                            if (c.Count <= 0)
                            {
                                s.TLQty   = 0;
                                s.ShipQty = s.QTY;
                            }

                            db.tb_Stocks.InsertOnSubmit(s);
                            db.SubmitChanges();

                            //update Stock เข้า item
                            db.sp_010_Update_StockItem(Convert.ToString(s.CodeNo), "");
                        }

                        db.SubmitChanges();
                    }


                    dbClss.AddHistory(this.Name, "Packing", $"New Packing {m.PackingNo}", m.PackingNo);

                    ClearData();
                    txtPackingNo.Text = m.PackingNo;
                    DataLoad();
                    baseClass.Info("Save complete.\n");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#5
0
        private void Save_detail2(int seq, int id, string SHNo)
        {
            using (DataClasses1DataContext db = new DataClasses1DataContext())
            {
                string Type     = "CNShipping";
                string Category = "Invoice"; //Temp,Invoice

                string  Type_in_out  = "In";
                decimal RemainQty    = 0;
                decimal Amount       = 0;
                decimal RemainAmount = 0;
                decimal Avg          = 0;
                decimal UnitCost     = 0;
                decimal sum_Remain   = 0;
                decimal sum_Qty      = 0;

                var g = (from ix in db.tb_Shippings
                         //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                         where ix.ShippingNo.Trim() == SHNo.Trim() && ix.Status != "Cancel" &&
                         ix.id == id
                         select ix).First();

                g.Status = "Cancel";
                //insert Stock
                DateTime?CalDate = null;
                DateTime?AppDate = DateTime.Now;
                int      Seq     = seq;

                UnitCost = Convert.ToDecimal(g.UnitCost); //get_cost(g.CodeNo);
                Amount   = Convert.ToDecimal(g.QTY) * UnitCost;

                //แบบที่ 1 จะไป sum ใหม่
                RemainQty = (Convert.ToDecimal(db.Cal_QTY(g.CodeNo, "", 0)));
                //แบบที่ 2 จะไปดึงล่าสุดมา
                //RemainQty = Convert.ToDecimal(dbClss.Get_Stock(vv.CodeNo, "", "", "RemainQty"));

                sum_Remain = Convert.ToDecimal(dbClss.Get_Stock(g.CodeNo, "", "", "RemainAmount"))
                             + Amount;

                sum_Qty      = RemainQty + Convert.ToDecimal(g.QTY);
                Avg          = sum_Remain / sum_Qty;
                RemainAmount = sum_Qty * Avg;

                //กรณีที่ Shipping แบบ Temp แล้ว cancel ให้มาปรับ Flag ด้วย

                var s1 = (from ix in db.tb_Stocks
                          //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                          where ix.DocNo.Trim() == SHNo.Trim() &&
                          ix.Status != "Cancel" &&
                          ix.Refid == id &&
                          ix.Category == "Temp" &&
                          ix.Flag_ClearTemp == 1 &&
                          ix.Type == "Shipping"
                          select ix).ToList();
                if (s1.Count > 0)
                {
                    var s = (from ix in db.tb_Stocks
                             //join i in db.tb_Items on ix.CodeNo equals i.CodeNo
                             where ix.DocNo.Trim() == SHNo.Trim() &&
                             ix.Status != "Cancel" &&
                             ix.Refid == id &&
                             ix.Category == "Temp" &&
                             ix.Flag_ClearTemp == 1 &&
                             ix.Type == "Shipping"
                             select ix).First();
                    if (s != null)
                    {
                        s.Flag_ClearTemp = 2;
                        db.SubmitChanges();
                    }
                }
                tb_Stock gg = new tb_Stock();
                gg.AppDate    = AppDate;
                gg.Seq        = Seq;
                gg.App        = "Cancel SH";
                gg.Appid      = Seq;
                gg.CreateBy   = ClassLib.Classlib.User;
                gg.CreateDate = DateTime.Now;
                gg.DocNo      = txtCNNo.Text;
                gg.RefNo      = SHNo;
                gg.Type       = ddlType.Text;
                gg.QTY        = Convert.ToDecimal(g.QTY);
                gg.Inbound    = Convert.ToDecimal(g.QTY);
                gg.Outbound   = 0;
                gg.CodeNo     = g.CodeNo;
                gg.Status     = "Active";

                gg.Type_i         = 4; //Receive = 1,Cancel Receive 2,Shipping = 3,Cancel Shipping = 4,Adjust stock = 5,ClearTemp = 6
                gg.Category       = Category;
                gg.Refid          = Convert.ToInt32(txtid.Text);
                gg.Flag_ClearTemp = 0;   //0 คือ invoice,1 คือ Temp , 2 คือ clear temp แล้ว
                gg.Type_in_out    = Type_in_out;
                gg.AmountCost     = Amount;
                gg.UnitCost       = UnitCost;
                gg.RemainQty      = sum_Qty;
                gg.RemainUnitCost = 0;
                gg.RemainAmount   = RemainAmount;
                gg.Avg            = Avg;

                db.tb_Stocks.InsertOnSubmit(gg);
                db.SubmitChanges();

                dbClss.AddHistory(this.Name, "เพิ่ม Stock", "Cancel รายการ Shipping [" + txtSHNo.Text.Trim() + " id : " + g.id.ToString() + " CodeNo : " + g.CodeNo + " จำนวน : " + g.QTY.ToString() + "]", txtCNNo.Text);

                //update Stock เข้า item
                db.sp_010_Update_StockItem(Convert.ToString(g.CodeNo), "");
            }
        }