public static bool ValidItemForOnDemand(PXGraph graph, ContractDetail detail, out string itemCD)
        {
            ContractItem item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(graph, detail.ContractItemID);

            bool isInvalid = item?.RecurringItemID != null && item.DepositItemID == null && detail.Qty > 0m;

            itemCD = isInvalid ? item.ContractItemCD : null;
            return(!isInvalid);
        }
        protected virtual void ContractDetail_Qty_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)
        {
            ContractDetail row  = (ContractDetail)e.Row;
            ContractItem   item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, row.ContractItemID);

            if (item != null && (item.MaxQty < (decimal?)e.NewValue || item.MinQty > (decimal?)e.NewValue))
            {
                throw new PXSetPropertyException(Messages.QtyErrorWithParameters, PXDBQuantityAttribute.Round(item.MinQty ?? 0m), PXDBQuantityAttribute.Round(item.MaxQty ?? 0m));
            }
        }
        protected virtual void ContractDetail_ContractItemID_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)
        {
            ContractDetail detail = (ContractDetail)e.Row;
            ContractItem   item   = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, e.NewValue);

            ContractTemplate template = PXSelect <ContractTemplate, Where <ContractTemplate.contractID, Equal <Required <ContractDetail.contractID> > > > .Select(this, detail.ContractID);

            if (item != null && template != null && item.CuryID != template.CuryID)
            {
                e.NewValue = item.ContractItemCD;
                throw new PXSetPropertyException(Messages.ItemHasAnotherCuryID, item.ContractItemCD, item.CuryID, template.CuryID, PXUIFieldAttribute.GetItemName(CurrentTemplate.Cache));
            }
        }
        protected virtual void ContractDetail_ContractItemID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
        {
            ContractDetail row = e.Row as ContractDetail;

            ContractItem item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractItem.contractItemID> > > > .Select(this, row.ContractItemID);

            if (item != null && row != null)
            {
                row.Description = item.Descr;
                PXDBLocalizableStringAttribute.CopyTranslations <ContractItem.descr, ContractDetail.description>
                    (Caches[typeof(ContractItem)], item, Caches[typeof(ContractDetail)], row);
                row.Qty = item.DefaultQty;
            }
        }
Example #5
0
        public static bool ValidItemForOnDemand(PXGraph graph, ContractDetail detail, out string itemCD)
        {
            ContractItem item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(graph, detail.ContractItemID);

            if (item != null && item.RecurringItemID != null && item.DepositItemID == null)
            {
                itemCD = item.ContractItemCD;
                return(false);
            }
            else
            {
                itemCD = null;
                return(true);
            }
        }
        protected virtual void ContractDetail_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
        {
            ContractDetail row = e.Row as ContractDetail;

            if (row != null)
            {
                ContractItem item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, row.ContractItemID);

                if (item != null)
                {
                    if (!ContractItemMaint.IsValidItemPrice(this, item))
                    {
                        PXUIFieldAttribute.SetWarning <ContractDetail.contractItemID>(sender, row, Messages.ItemNotPrice);
                    }
                }
            }
        }
        protected virtual void ContractDetail_RowInserting(PXCache sender, PXRowInsertingEventArgs e)
        {
            ContractDetail row = e.Row as ContractDetail;

            if (row != null)
            {
                row.ContractID = CurrentTemplate.Current.ContractID;
                ValidateUniqueness(sender, row, e);

                ContractItem contractItem = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, row.ContractItemID);

                if (contractItem != null)
                {
                    row.Qty = contractItem.DefaultQty;
                }
            }
        }
Example #8
0
        protected virtual void ContractDetail_ContractItemID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
        {
            ContractDetail row = e.Row as ContractDetail;

            ContractItem item = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractItem.contractItemID> > > > .Select(this, row.ContractItemID);

            if (item != null && row != null)
            {
                InventoryItem nonstock = PXSelect <InventoryItem, Where <InventoryItem.inventoryID, Equal <Required <InventoryItem.inventoryID> > > > .Select(this, item.BaseItemID ?? item.RecurringItemID);

                if (nonstock != null)
                {
                    row.Description = item.Descr;
                    row.Qty         = item.DefaultQty;
                }
            }
        }
        private void ValidateUniqueness(PXCache sender, ContractDetail row, System.ComponentModel.CancelEventArgs e)
        {
            if (row.ContractItemID.HasValue)
            {
                PXSelectBase <ContractDetail> s = new PXSelect <ContractDetail,
                                                                Where <ContractDetail.contractItemID, Equal <Required <ContractDetail.contractItemID> >,
                                                                       And <ContractDetail.contractID, Equal <Current <ContractTemplate.contractID> >,
                                                                            And <ContractDetail.contractDetailID, NotEqual <Required <ContractDetail.contractDetailID> > > > > >(this);

                ContractDetail item = s.SelectWindowed(0, 1, row.ContractItemID, row.ContractDetailID);

                if (item != null)
                {
                    ContractItem cirow = (ContractItem)PXSelectorAttribute.Select <ContractDetail.contractItemID>(sender, row);
                    sender.RaiseExceptionHandling <ContractDetail.contractItemID>(row, cirow.ContractItemCD, new PXException(Messages.ItemNotUnique));
                    e.Cancel = true;
                }
            }
        }
        protected virtual void ContractDetail_RowInserted(PXCache sender, PXRowInsertedEventArgs e)
        {
            if (!IsImport)
            {
                ContractDetail row = e.Row as ContractDetail;
                if (row != null)
                {
                    ContractItem contractItem = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, row.ContractItemID);

                    if (contractItem != null && contractItem.Deposit == false && contractItem.DepositItemID != null)
                    {
                        ContractItem depositItem = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractDetail.contractItemID> > > > .Select(this, contractItem.DepositItemID);

                        ContractDetail newDetail = new ContractDetail();
                        sender.SetValueExt <ContractDetail.contractItemID>(newDetail, depositItem.ContractItemID);
                        ContractDetails.Insert(newDetail);
                        ContractDetails.View.RequestRefresh();
                    }
                }
            }
        }
Example #11
0
        protected virtual void ContractItem_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
        {
            ContractItem row = e.Row as ContractItem;

            if (row == null)
            {
                return;
            }

            PXUIFieldAttribute.SetVisible <ContractItem.basePriceOption>(sender, row, row.BaseItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.basePrice>(sender, row, row.BaseItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.basePriceVal>(sender, row, row.BaseItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.basePriceOption>(Items.Cache, null, row.BaseItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.basePrice>(Items.Cache, null, row.BaseItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.basePriceVal>(Items.Cache, null, row.BaseItemID != null);

            PXUIFieldAttribute.SetVisible <ContractItem.renewalPriceOption>(sender, row, row.RenewalItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.renewalPrice>(sender, row, row.RenewalItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.renewalPriceVal>(sender, row, row.RenewalItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.renewalPriceOption>(Items.Cache, null, row.RenewalItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.renewalPrice>(Items.Cache, null, row.RenewalItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.renewalPriceVal>(Items.Cache, null, row.RenewalItemID != null);

            PXUIFieldAttribute.SetVisible <ContractItem.fixedRecurringPriceOption>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.fixedRecurringPrice>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.fixedRecurringPriceVal>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.fixedRecurringPriceOption>(Items.Cache, null, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.fixedRecurringPrice>(Items.Cache, null, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.fixedRecurringPriceVal>(Items.Cache, null, row.RecurringItemID != null);

            PXUIFieldAttribute.SetVisible <ContractItem.usagePriceOption>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.usagePrice>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractItem.usagePriceVal>(sender, row, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.usagePriceOption>(Items.Cache, null, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.usagePrice>(Items.Cache, null, row.RecurringItemID != null);
            PXUIFieldAttribute.SetVisible <ContractDetail.usagePriceVal>(Items.Cache, null, row.RecurringItemID != null);
        }
Example #12
0
        public virtual decimal GetItemPrice(PXCache sender, string curyID, int?customerID, int?locationID, string contractStatus, int?contractItemID, int?itemID, string itemType, string priceOption, decimal?fixedPrice, decimal?setupPrice, decimal?qty, DateTime?date)
        {
            decimal      itemPrice = 0m;
            ContractItem item      = PXSelect <ContractItem, Where <ContractItem.contractItemID, Equal <Required <ContractItem.contractItemID> > > > .Select(sender.Graph, contractItemID);

            if (item != null)
            {
                IN.InventoryItem nonstock = PXSelect <IN.InventoryItem, Where <IN.InventoryItem.inventoryID, Equal <Required <IN.InventoryItem.inventoryID> > > > .Select(sender.Graph, itemID);

                CR.Location customerLocation = PXSelect <
                    CR.Location,
                    Where <
                        CR.Location.bAccountID, Equal <Required <Contract.customerID> >,
                        And <CR.Location.locationID, Equal <Required <Contract.locationID> > > > >
                                               .Select(sender.Graph, customerID, locationID);

                string customerPriceClass = string.IsNullOrEmpty(customerLocation?.CPriceClassID)
                                        ? ARPriceClass.EmptyPriceClass
                                        : customerLocation.CPriceClassID;

                if (priceOption == null)
                {
                    switch (itemType)
                    {
                    case ContractDetailType.Setup:
                        priceOption = item.BasePriceOption;
                        break;

                    case ContractDetailType.Renewal:
                        priceOption = item.RenewalPriceOption;
                        break;

                    case ContractDetailType.Billing:
                        priceOption = item.FixedRecurringPriceOption;
                        break;

                    case ContractDetailType.UsagePrice:
                        priceOption = item.UsagePriceOption;
                        break;
                    }
                }

                CM.CurrencyInfo currencyInfo = new CM.CurrencyInfo();
                currencyInfo.BaseCuryID = new PXSetup <Company>(sender.Graph).Current.BaseCuryID;
                currencyInfo.CuryID     = curyID;
                Customer customer = PXSelect <Customer, Where <Customer.bAccountID, Equal <Required <Customer.bAccountID> > > > .Select(sender.Graph, customerID);

                if (customer != null && customer.CuryRateTypeID != null)
                {
                    currencyInfo.CuryRateTypeID = customer.CuryRateTypeID;
                }

                currencyInfo.SetCuryEffDate(sender.Graph.Caches[typeof(CM.CurrencyInfo)], date);

                if (nonstock != null && currencyInfo != null)
                {
                    switch (priceOption)
                    {
                    case PriceOption.ItemPrice:
                        itemPrice = ARSalesPriceMaint.CalculateSalesPrice(sender, customerPriceClass, customerID, itemID, currencyInfo, qty, nonstock.BaseUnit, date ?? DateTime.Now, false) ?? 0m;
                        break;

                    case PriceOption.ItemPercent:
                        itemPrice = ((ARSalesPriceMaint.CalculateSalesPrice(sender, customerPriceClass, customerID, itemID, currencyInfo, qty, nonstock.BaseUnit, date ?? DateTime.Now, false) ?? 0m) / 100m * (fixedPrice ?? 0m));
                        break;

                    case PriceOption.BasePercent:
                        itemPrice = (setupPrice ?? 0m) / 100m * (fixedPrice ?? 0m);
                        break;

                    case PriceOption.Manually:
                        itemPrice = fixedPrice ?? 0m;
                        break;
                    }
                }
            }
            return(itemPrice);
        }
Example #13
0
        protected virtual IEnumerable items()
        {
            ContractItem ci = SelectedContractItem.Select();

            PXSelectBase <ContractDetail> select = new PXSelectJoin <ContractDetail, InnerJoin <Contract, On <Contract.contractID, Equal <ContractDetail.contractID> > >,
                                                                     Where <ContractDetail.contractItemID, Equal <Current <ContractFilter.contractItemID> > > >(this);


            List <PXResult <ContractDetail, Contract> > result = new List <PXResult <ContractDetail, Contract> >();

            foreach (PXResult <ContractDetail, Contract> res in select.Select())
            {
                ContractDetail item       = res;
                bool           isOutdated = false;

                ContractDetail copy = PXCache <ContractDetail> .CreateCopy(item);

                copy.ContractDetailID = -1;                 //Just to be safe that formulas on the following fields do not modify the original record.

                Items.Cache.SetDefaultExt <ContractDetail.basePriceOption>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.basePrice>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.renewalPriceOption>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.renewalPrice>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.fixedRecurringPriceOption>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.fixedRecurringPrice>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.usagePriceOption>(copy);
                Items.Cache.SetDefaultExt <ContractDetail.usagePrice>(copy);


                if (ci.BaseItemID != null)
                {
                    if (ci.BasePriceOption != item.BasePriceOption ||
                        ci.BasePrice != item.BasePrice ||
                        copy.BasePriceVal != item.BasePriceVal)
                    {
                        isOutdated = true;
                    }
                }

                if (ci.RenewalItemID != null)
                {
                    if (ci.RenewalPriceOption != item.RenewalPriceOption ||
                        ci.RenewalPrice != item.RenewalPrice ||
                        copy.RenewalPriceVal != item.RenewalPriceVal)
                    {
                        isOutdated = true;
                    }
                }


                if (ci.RecurringItemID != null)
                {
                    if (ci.FixedRecurringPriceOption != item.FixedRecurringPriceOption ||
                        ci.FixedRecurringPrice != item.FixedRecurringPrice ||
                        copy.FixedRecurringPriceVal != item.FixedRecurringPriceVal)
                    {
                        isOutdated = true;
                    }

                    if (ci.UsagePriceOption != item.UsagePriceOption ||
                        ci.UsagePrice != item.UsagePrice ||
                        copy.UsagePriceVal != item.UsagePriceVal)
                    {
                        isOutdated = true;
                    }
                }

                if (isOutdated)
                {
                    result.Add(res);
                }
            }

            return(result);
        }