private void populate(SalesPropertiesM prop)
        {
            MinPrice = prop.MinPrice;

            IsPriceLimited = prop.MaxPrice != null;
            if (IsPriceLimited)
            {
                MaxPrice = (double)prop.MaxPrice;
            }
            IsMultiplyLimited = prop.InstanceMultiply != 0;
            if (IsMultiplyLimited)
            {
                InstanceMultiply = prop.InstanceMultiply;
            }
            IsRecurrenceLimited = prop.RecurrencePerInstance != 0;
            if (IsRecurrenceLimited)
            {
                RecurrencePerInstance = prop.RecurrencePerInstance;
            }

            IsBroadSale        = prop.IsBroadSale;
            DateFrom           = prop.DateFrom;
            DateTo             = prop.DateTo ?? DateFrom + new TimeSpan(7, 0, 0, 0);
            IsSaleDatesLimited = prop.DateTo == null;
        }
        public SalesPropertiesViewModel(SalesPropertiesM prop)
        {
            CommitCommand = new DelegateCommand(CommitFunc);
            CancelCommand = new DelegateCommand(CancelFunc);

            IsMaxEnabled = IsMultiplyEnabled = IsRecurrenceEnabled = IsDatesEnabled = true;
            populate(prop);
        }
        private void CommitFunc()
        {
            if (IsPriceLimited && MaxPrice <= MinPrice)
            {
                throw new SalesException("ערכי מינימום ומקסימום של שווי הסל לא מתאימים.");
            }
            if (IsBroadSale && IsSaleDatesLimited &&
                (DateTo < DateFrom || DateTo < DateTime.Now))
            {
                throw new SalesException("טווח התאריכים אינו תקין");
            }

            Conducted = new SalesPropertiesM(MinPrice,
                                             IsPriceLimited ? MaxPrice : (double?)null,
                                             IsMultiplyLimited ? InstanceMultiply : 0,
                                             IsRecurrenceLimited ? RecurrencePerInstance : 0,
                                             IsBroadSale, DateFrom, IsSaleDatesLimited ? DateTo : (DateTime?)null);
            CloseWindow();
        }
Example #4
0
        public SalesGroupM LoadGroup(int groupID)
        {
            ActivityLogService.Logger.LogFunctionCall(groupID);
            DataTable dt;
            var       sales = new List <SaleM>();

            try
            {
                CheckIsRemote();
                OpenConnection();

                string sql = "select * from Sales where SaleGroupID = @GroupID order by GroupIndex";
                _cmd = new SqlCommand(sql, _conn);
                _cmd.Parameters.Add(new SqlParameter("@GroupID", SqlDbType.Int)).Value = groupID;

                var salesTable = new DataTable();
                var da         = new SqlDataAdapter(_cmd);
                da.Fill(salesTable);

                foreach (DataRow Rs in salesTable.Rows)
                {
                    //  Load Sale:
                    var saleId = int.Parse(Rs["SaleID"].ToString());

                    //get requires product from PluReqSale (ProdAmount)
                    //get discounted products from PluOutSale (DiscountedProduct)
                    //get Sale's attributes
                    _cmd            = new SqlCommand();
                    _cmd.Connection = _conn;
                    _cmd.Parameters.Add(new SqlParameter("@saleID", SqlDbType.Int)).Value = saleId;

                    //Requires
                    var reqs = new List <ProdAmountM>();
                    _cmd.CommandText = "select * from PluReqSale where SaleID = @saleID";
                    da = new SqlDataAdapter(_cmd);
                    dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow Rq in dt.Rows)
                    {
                        reqs.Add(new ProdAmountM(Rq["pluID"].ToString(),
                                                 bool.Parse(Rq["isPluno"].ToString()), double.Parse(Rq["qty"].ToString())));
                    }

                    //Discounted
                    var outs = new List <DiscountedProductM>();
                    _cmd.CommandText = "select * from PluOutSale where SaleID = @saleID";
                    da = new SqlDataAdapter(_cmd);
                    dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow Ro in dt.Rows)
                    {
                        var outID  = int.Parse(Ro["OutID"].ToString());
                        var gifted = new List <GiftedProductM>();

                        sql  = "select * from PluGiftedSale where OutID = @outID";
                        _cmd = new SqlCommand(sql, _conn);
                        _cmd.Parameters.Add("@outID", SqlDbType.Int).Value = outID;
                        da = new SqlDataAdapter(_cmd);
                        var tempDt = new DataTable();
                        da.Fill(tempDt);
                        foreach (DataRow Rg in tempDt.Rows)
                        {
                            gifted.Add(new GiftedProductM(Rg["pluID"].ToString(),
                                                          bool.Parse(Rg["isPluno"].ToString()), double.Parse(Rg["MultiUnits"].ToString()),
                                                          new DiscountM(double.Parse(Rg["offPrice"].ToString()),
                                                                        (DiscountTypes)int.Parse(Rg["offType"].ToString()))));
                        }

                        outs.Add(new DiscountedProductM(Ro["pluID"].ToString(), bool.Parse(Ro["isPluno"].ToString()),
                                                        double.Parse(Ro["MultiUnits"].ToString()), double.Parse(Ro["MaxRec"].ToString()),
                                                        new DiscountM(double.Parse(Ro["offPrice"].ToString()),
                                                                      (DiscountTypes)int.Parse(Ro["offType"].ToString())), gifted, outID));
                    }
                    //Attributes
                    var prop = new SalesPropertiesM(
                        double.Parse(Rs["MinTotalPrice"].ToString()), Rs["MaxTotalPrice"] as double?,
                        int.Parse(Rs["AllowMultiple"].ToString()), int.Parse(Rs["Recurrences"].ToString()));
                    var disc = new DiscountM(double.Parse(Rs["TotalOffPrice"].ToString()),
                                             (DiscountTypes)int.Parse(Rs["TotalOffType"].ToString()));

                    sales.Add(new SaleM(Rs["Title"].ToString(), (SaleTypes)int.Parse(Rs["SaleType"].ToString()), prop, reqs, outs,
                                        disc, int.Parse(Rs["GroupIndex"].ToString()), saleId));
                }

                sql  = "select g.*, e.ename, e.uid from SalesGroup as g inner join emp as e on g.empno = e.empno where g.GroupID= @groupID";
                _cmd = new SqlCommand(sql, _conn);
                _cmd.Parameters.Add(new SqlParameter("@groupID", SqlDbType.Int)).Value = groupID;
                da = new SqlDataAdapter(_cmd);
                dt = new DataTable();
                da.Fill(dt);
                if (dt.Rows.Count == 0)
                {
                    throw new InvalidConstraintException("No sale record found for the given GroupID(" + groupID + ").");
                }
                else if (dt.Rows.Count != 1)
                {
                    throw new InvalidConstraintException("More than one instance of sale record found for the given GroupID(" + groupID + ").");
                }
                DataRow Att = dt.Rows[0];

                var emp = new UserData(int.Parse(Att["empno"].ToString()), Att["ename"].ToString(), Att["uid"].ToString());
                return(new SalesGroupM(int.Parse(Att["GroupID"].ToString()), emp,
                                       DateTime.Parse(Att["DateCreated"].ToString()),
                                       bool.Parse(Att["isEnabled"].ToString()), sales));
            }
            catch (Exception ex)
            {
                ActivityLogService.Logger.LogError(ex);
                return(null);
            }
            finally
            {
                CloseConnection();
            }
        }