private Boolean isNotEffectiveOrExpire(CProcessingResult res)
        {
            DateTime effDate     = package.EffectiveDate;
            DateTime expDate     = package.ExpireDate;
            String   effStr      = "";
            String   expStr      = "";
            String   currDateStr = CUtil.DateTimeToDateStringInternal(billDate);

            if (effDate != null)
            {
                effStr = CUtil.DateTimeToDateStringInternalMin(effDate);
                if (currDateStr.CompareTo(effStr) < 0)
                {
                    res.SetErrorCode("ERROR_PROMOTION_NOT_EFFECTIVE");
                    return(true);
                }
            }

            if (expDate != null)
            {
                expStr = CUtil.DateTimeToDateStringInternalMin(expDate);
                if (currDateStr.CompareTo(expStr) >= 0)
                {
                    res.SetErrorCode("ERROR_PROMOTION_IS_EXPIRE");
                    return(true);
                }
            }

            return(false);
        }
Beispiel #2
0
        public CBasketSet MergeUsedToAvailable(CBasketSet inBasket, Boolean trayFlag)
        {
            BasketTypeEnum type1 = BasketTypeEnum.Available;
            BasketTypeEnum type2 = BasketTypeEnum.Used;
            String         name  = "MergeUsedToAvailable";

            if (trayFlag)
            {
                type1 = BasketTypeEnum.AvailableTray;
                type2 = BasketTypeEnum.UsedTray;
                name  = name + "Tray";
            }

            CBasketSet output = new CBasketSet();

            CProcessingResult res = new CProcessingResult(name);

            res.SetInputBasketSet(inBasket.Clone());

            ArrayList useds  = inBasket.GetAllBasketByType(type2);
            ArrayList avails = inBasket.GetAllBasketByType(type1);

            if (avails != null)
            {
                foreach (CBasket a in avails)
                {
                    //Move the original 'Available' basket
                    CBasket na = new CBasket(type1);
                    na.CopyEntireFrom(a);
                    output.AddBasket(na);
                }
            }

            if (useds != null)
            {
                foreach (CBasket u in useds)
                {
                    CBasket nb = new CBasket(type1);
                    nb.CopyEntireFrom(u);

                    output.AddBasket(nb);
                }
            }

            Hashtable filterSet = new Hashtable();

            filterSet[type1] = null;
            filterSet[type2] = null;
            copyBasketsExc(output, inBasket, filterSet);

            res.IsOperation = true;
            res.SetOutputBasketSet(output);
            res.SetStatus(ProcessingResultStatus.ProcessingSuccess);
            addProcessingResult(res);

            return(output);
        }
        protected Boolean isPackageEligible(CProcessingResult res, CBasket inBsk, Boolean chkNullFlag)
        {
            if (chkNullFlag && (inBsk == null))
            {
                res.SetErrorCode("ERROR_NO_PROMOTION_MATCH");
                res.SetStatus(ProcessingResultStatus.ProcessingFail);
                return(false);
            }

            if (package.IsEnabled != true)
            {
                res.SetErrorCode("ERROR_PROMOTION_IS_DISABLE");
                res.SetStatus(ProcessingResultStatus.ProcessingFail);
                return(false);
            }

            if (isNotEffectiveOrExpire(res))
            {
                res.SetStatus(ProcessingResultStatus.ProcessingFail);
                return(false);
            }

            if (package.IsTimeSpecific == true)
            {
                Boolean isTimeOK = isTimeEligible();
                if (!isTimeOK)
                {
                    res.SetErrorCode("ERROR_TIME_NOT_MATCH");
                    res.SetStatus(ProcessingResultStatus.ProcessingFail);
                    return(false);
                }
            }

            if (package.IsCustomerSpecific == true)
            {
                Boolean isCustomerOK = isCustomerEligible();
                if (!isCustomerOK)
                {
                    res.SetErrorCode("ERROR_CUSTOMER_NOT_MATCH");
                    res.SetStatus(ProcessingResultStatus.ProcessingFail);
                    return(false);
                }
            }

            if (package.IsBranchSpecific == true)
            {
                Boolean isBranchOK = isBranchEligible();
                if (!isBranchOK)
                {
                    res.SetErrorCode("ERROR_BRANCH_NOT_MATCH");
                    res.SetStatus(ProcessingResultStatus.ProcessingFail);
                    return(false);
                }
            }

            return(true);
        }
        private static CProcessingResultJob createJobResultNode(CProcessingResult rs)
        {
            CProcessingResultJob j = new CProcessingResultJob(rs);

            CBasketSet inset = rs.GetInputBasketSet();

            processBasketSetNode(inset);

            CBasketSet outset = rs.GetOutputBasketSet();

            processBasketSetNode(outset);

            j.AddItem(inset);
            j.AddItem(outset);

            return(j);
        }
Beispiel #5
0
        public CBasketSet SumInGroup(CBasketSet inBasket, BasketTypeEnum bt)
        {
            CBasketSet output = new CBasketSet();

            CProcessingResult res = new CProcessingResult("SumInGroup-" + bt.ToString());

            res.SetInputBasketSet(inBasket.Clone());

            Hashtable quantities = new Hashtable();
            Hashtable objects    = new Hashtable();
            ArrayList keys       = new ArrayList();

            ArrayList items = inBasket.GetAllBasketByType(bt);

            if (items == null)
            {
                items = new ArrayList();
            }

            foreach (CBasket b in items)
            {
                int cnt = b.GetBasketItemCount();

                for (int i = 0; i < cnt; i++)
                {
                    CBasketItem bi = b.GetBasketItem(i);
                    object      o  = quantities[bi.Key];
                    if (o == null)
                    {
                        quantities[bi.Key] = bi.Quantity;
                        objects[bi.Key]    = bi;

                        keys.Add(bi.Key);
                    }
                    else
                    {
                        double tmp = (double)quantities[bi.Key];
                        tmp = tmp + bi.Quantity;
                        quantities[bi.Key] = tmp;
                    }
                }
            }

            CBasket bkt = new CBasket(bt);

            foreach (String k in keys)
            {
                CBasketItem bi  = (CBasketItem)objects[k];
                double      qty = (double)quantities[k];
                CBasketItem bki = new CBasketItem(k, bi.Item, qty);

                bkt.AddBasketItem(bki);
            }

            if (bkt.GetBasketItemCount() > 0)
            {
                output.AddBasket(bkt);
            }

            Hashtable filterSet = new Hashtable();

            filterSet[bt] = null;
            copyBasketsExc(output, inBasket, filterSet);

            res.IsOperation = true;
            res.SetOutputBasketSet(output);
            res.SetStatus(ProcessingResultStatus.ProcessingSuccess);
            addProcessingResult(res);

            return(output);
        }
Beispiel #6
0
 public CPromotionProcessorBundle(MBaseModel pkg, String grpName, MBaseModel bill) : base(pkg, grpName, bill)
 {
     res = new CProcessingResult((pkg as MPackage));
 }
 protected void addProcessingResult(CProcessingResult result)
 {
     result.SetGroupName(groupName);
     procResults.Add(result);
 }
Beispiel #8
0
        //private double finalDiscount = 0.00;

        public CProcessingResultJob(CProcessingResult rs)
        {
            result  = rs;
            package = rs.GetPackage();
        }
 public CProcessingResultGroup(CProcessingResult rs)
 {
     result = rs;
 }