private PurchasingOrderDetail GetPurchasingOrderDetail(DataRow dr)
        {
            if (dr == null)
            {
                return(null);
            }
            PurchasingOrderDetail pod = new PurchasingOrderDetail();

            pod.SourceListOID     = Convert.ToInt32(dr["PurchasingOrderDetailListOID"]);
            pod.PurchasingOrderID = Convert.ToString(dr["PurchasingOrderID"]);
            pod.SourceListOID     = Convert.ToInt32(dr["SourceListOID"]);
            pod.Qty = Convert.ToInt32(dr["Qty"]);
            return(pod);
        }
        public static PurchasingResult Save(PurchasingOrderHeaderViewModel models)
        {
            PurchasingResult result = new PurchasingResult();

            try
            {
                using (var db = new BuahSayurContext())
                {
                    string newRef = GetNewReference();
                    result.Reference = newRef;

                    PurchasingOrder purchasingOrder = new PurchasingOrder
                    {
                        Id             = 1,
                        Supplier_Code  = models.Supplier_Code,
                        Reference      = newRef,
                        PurchasingDate = models.PurchasingDate
                    };
                    db.PurchasingOrders.Add(purchasingOrder);

                    foreach (var item in models.PurchasingDetails)
                    {
                        PurchasingOrderDetail purchasingDetail = new PurchasingOrderDetail
                        {
                            PurchasingOrder_Id = purchasingOrder.Id,
                            Item_Code          = item.Item_Code,
                            Quantity           = item.Quantity,
                            Price = item.Price,
                            Total = item.Quantity * item.Price
                        };
                        result.Total += (item.Quantity * item.Price);
                        db.PurchasingOrderDetails.Add(purchasingDetail);
                        // Update Stock
                        Item Stock = db.Items.Where(x => x.Code == item.Item_Code).FirstOrDefault();
                        if (Stock != null)
                        {
                            Stock.Stock = Stock.Stock + item.Quantity;
                        }
                    }
                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                result.Success = false;
                Message        = ex.Message;
            }
            return(result);
        }
示例#3
0
        private void btnAddToPO_Click(object sender, EventArgs e)
        {
            int qty = 0;

            if (!int.TryParse(txtQty.Text.Trim(), out qty))
            {
                MessageBox.Show("請輸入正確數字");
                return;
            }
            switch (this.CmdMode)
            {
            case CommandMode.Add:
                PurchasingOrderDetail pod = new PurchasingOrderDetail()
                {
                    SourceListOID = Convert.ToInt32(this.cbSourceList.SelectedValue),
                    Qty           = qty
                };
                PurchasingOrderUtil.SetPurchasingOrderDetail(pod);
                this.lblPODCount.Text = PurchasingOrderUtil.GetPurchasingOrderDetailStatus();
                break;

            case CommandMode.Edit:
                PurchasingOrderDetail updatePod = PurchasingOrderUtil.GetPurchasingOrderDetail()[this.ListIndex];
                updatePod.SourceListOID = Convert.ToInt32(this.cbSourceList.SelectedValue);
                updatePod.Qty           = qty;
                Common.ContainerForm.NextForm(new POAddMainForm());
                break;

            case CommandMode.OrderEdit:
                Model.SourceList sl = this.sourceLists.Find(s => s.SourceListOID.Equals(Convert.ToInt32(this.cbSourceList.SelectedValue)));

                this.SourceOrderListData.Batch    = sl.Batch;
                this.SourceOrderListData.Discount = sl.Discount;
                this.SourceOrderListData.Qty      = Convert.ToInt32(this.txtQty.Text);

                SourceOrderListDao dao = new SourceOrderListDao();
                dao.Update(this.SourceOrderListData);

                CheckOrderForm cof = new CheckOrderForm(this.SourceOrderListData.GetOrderPart().OrderID, "edit");
                Common.ContainerForm.NextForm(cof);
                break;

            default:
                break;
            }
        }
示例#4
0
        public static void SetPurchasingOrderDetail(PurchasingOrderDetail pod)
        {
            //存入Session
            List <PurchasingOrderDetail> podList = null;

            if (Util.GetSessionValue(sessionKey) == null)
            {
                podList = new List <PurchasingOrderDetail>();
                podList.Add(pod);
                Util.SetSessionValue(sessionKey, podList);
            }
            else
            {
                podList = (List <PurchasingOrderDetail>)Util.GetSessionValue(sessionKey);
                podList.Add(pod);
            }
        }
        /// ///////////////////////////////////////////////////////////////呈穎
        public PurchasingOrderDetail FindPurchasingOrderDetailBySourceListOID(int PurchasingOrderDetailListOID)
        {
            string strCmd = @"SELECT PurchasingOrderDetailListOID, PurchasingOrderID, SourceListOID, Qty
                                                FROM PurchasingOrderDetail
                                                where PurchasingOrderDetailListOID = @PurchasingOrderDetailListOID";
            List <SqlParameter> parameters = new List <SqlParameter>();

            parameters.Add(SqlHelper.CreateParameter("@PurchasingOrderDetailListOID", SqlDbType.Int, PurchasingOrderDetailListOID));

            DataTable dt = SqlHelper.AdapterFill(strCmd, parameters);

            if (dt.Rows.Count == 0)
            {
                return(null);
            }
            PurchasingOrderDetail pod = this.GetPurchasingOrderDetail(dt.Rows[0]);

            return(pod);
        }
        //提交三审 生成与供应商的订单及订单明细
        public void ComfirmPlanAndSubmitOrder(int planId, int userID, bool isPass, string Desc)
        {
            var dbcontext = ServiceProvider.GetDbcontext <IPurocumentDbcontext>();
            var plan      = dbcontext.PurchasingPlan.SingleOrDefault(s => s.ID == planId);

            if (plan == null)
            {
                throw new Exception("采购计划不存在");
            }

            DateTime dateTimeNow   = DateTime.Now;
            int      planStatus    = isPass ? (int)EnumPurchasingPlanState.PlanAudit3Pass : (int)EnumPurchasingPlanState.PlanAudit3Rejected;
            int      planAuditType = isPass ? (int)EnumPurchasingAuditType.PlanAudit3Pass : (int)EnumPurchasingAuditType.PlanAudit3Rejected;

            int orderStatus = isPass ? (int)EnumPurchasingOrderState.AwaitVendorConfirm : (int)EnumPurchasingOrderState.AwaitVendorConfirm;


            //保存审核结果和修改计划状态
            plan.Status       = planStatus;
            plan.UpdateTime   = dateTimeNow;
            plan.UpdateUserID = userID;
            dbcontext.Update(plan);///

            PurchasingAudit insertPA = new PurchasingAudit
            {
                PlanID     = plan.ID,
                UserID     = userID,
                CreateTime = dateTimeNow,
                Result     = planAuditType,//审核状态 若复审通过及订单生成 故仅生成一条
                Desc       = Desc
            };

            dbcontext.Add(insertPA);///

            ///下面这段代码写得乱 性能应该也不高 Linq to EF语法不熟悉 后面要改

            if (isPass)  //审核通过
            {
                List <PurchasingOrder>       insertListPOs  = new List <PurchasingOrder>();
                List <PurchasingOrderDetail> insertListPODs = new List <PurchasingOrderDetail>();

                //采购计划的部门
                var entityD = dbcontext.Department.SingleOrDefault(s => s.ID == plan.DepartmentID);

                //采购计划明细
                var entityPP = dbcontext.PurchasingPlan.Include(i => i.Details).SingleOrDefault(s => s.ID == plan.ID);

                //按供应商分组,循环操作
                var vendorIDs = entityPP.Details.Where(s => s.VendorID.HasValue).Select(s => s.VendorID).Distinct().ToList();//之前未去重,导致严重逻辑错误
                //特殊情况下供应商尚未报价
                if (vendorIDs == null || vendorIDs.Count == 0)
                {
                    throw new Exception("不存在或未选定供应商");
                }

                //按供应商的循环操作
                foreach (var vendorID in vendorIDs)
                {
                    //按供应商的订单明细集合
                    var verdorPPDs = entityPP.Details.Where(w => vendorIDs.Contains(w.VendorID));

                    int     itemCount = 0;
                    decimal?total     = 0;
                    //一个供应商生成一个订单(因采购计划能为一种业务类型 要么食材 要么办公用品 故这里不按照业务类型再做拆分 数据库设计其实是支持的)
                    PurchasingOrder po = new PurchasingOrder
                    {
                        Code                    = StrPOPrefix + DateTime.Now.ToString(StrPOSuffixFormat), //[2][17]
                        PurchasingPlanID        = plan.ID,
                        PurchasingOrderStatusID = orderStatus,                                            //订单状态
                        VendorID                = vendorID.Value,
                        DepartmentID            = plan.DepartmentID,
                        Tel          = entityD?.Tel,
                        Addr         = entityD?.Address,
                        BizTypeID    = plan.BizTypeID,
                        CreateUsrID  = userID,
                        CreateTime   = dateTimeNow,
                        UpdateUserID = userID,
                        UpdateTime   = dateTimeNow,
                        Total        = total,
                        ItemCount    = itemCount
                    };
                    foreach (var vendorPPD in verdorPPDs)
                    {
                        //生成每个供应商分配的采购明细
                        PurchasingOrderDetail pod = new PurchasingOrderDetail
                        {
                            PurchasingOrder        = po,
                            PurchasingOrderStateID = orderStatus,//订单状态
                            GoodsClassID           = vendorPPD.GoodsClassID,
                            GoodsID                = vendorPPD.GoodsID,
                            Count                  = vendorPPD.PurchasingCount,
                            Price                  = vendorPPD.Price,
                            Subtotal               = vendorPPD.PurchasingCount * vendorPPD.Price,//这里之前没有结果
                            ActualCount            = 0,
                            ActualSubtotal         = 0,
                            CreateUsrID            = userID,
                            CreateTime             = dateTimeNow,
                            UpdateUsrID            = userID,
                            UpdateTime             = dateTimeNow,
                            PurchasingPlanDetailID = vendorPPD.ID
                        };
                        insertListPODs.Add(pod);  //订单明细

                        po.Total += pod.Subtotal; //累计每种商品的小计金额
                        po.ItemCount++;           //明细数量

                        //更新采购计划、采购计划明细状态
                        vendorPPD.Status = planStatus; //采购状态

                        dbcontext.Update(vendorPPD);   /// 更新PPD
                    }

                    insertListPOs.Add(po);///  // 订单
                }
                dbcontext.AddRange(insertListPOs);
                dbcontext.AddRange(insertListPODs);
            }

            dbcontext.SaveChanges();
        }