Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public PXAction<ArcContract> Confirm;
- [PXUIField(DisplayName = "Confirm", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)]
- [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
- protected virtual IEnumerable confirm(PXAdapter adapter)
- {
- ArcContract arcContract = Document.Current;
- if (arcContract != null)
- {
- if (arcContract.InterCompanyBRRequired.GetValueOrDefault(false) && string.IsNullOrEmpty(arcContract.RelatedIBContractNbr))
- {
- ArcContractMaint POEntry = PXGraph.CreateInstance<ArcContractMaint>();
- POEntry.Clear();
- POEntry.Document.AllowUpdate = true;
- POEntry.Document.AllowInsert = true;
- ArcContract poorder = new ArcContract();
- poorder.BranchID = PXAccess.GetBranchID();
- poorder = POEntry.Document.Insert(poorder);
- poorder = PXCache<ArcContract>.CreateCopy(POEntry.Document.Search<ArcContract.contractNbr>(poorder.ContractNbr));
- POEntry.Document.Current = poorder;
- poorder = POEntry.Document.Update(poorder);
- POEntry.Document.SetValueExt<ArcContract.itemClassID>(poorder, arcContract.ItemClassID);
- if (arcContract.PurchaseSale == "P")
- {
- POEntry.Document.SetValueExt<ArcContract.purchaseSale>(poorder, "S");
- poorder.PurchaseSale = "S";
- }
- else if (arcContract.PurchaseSale == "S")
- {
- POEntry.Document.SetValueExt<ArcContract.purchaseSale>(poorder, "P");
- poorder.PurchaseSale = "S";
- }
- POEntry.Document.SetValueExt<ArcContract.stockItemID>(poorder, arcContract.StockItemID);
- POEntry.Document.SetValueExt<ArcContract.relatedIBContractNbr>(poorder, arcContract.ContractNbr);
- POEntry.Document.SetValueExt<ArcContract.interCompanyBRRequired>(poorder, arcContract.InterCompanyBRRequired);
- int tenantId = PX.Data.Update.PXInstanceHelper.CurrentCompany;
- int BusinessAccBranchID = 0;
- string tenstr = tenantId.ToString();
- string branchfort = arcContract.BranchID.ToString();
- branchfort = branchfort.PadLeft(3, '0');
- string BusinessAccBranchID2 = tenstr + branchfort;
- int resultBusinessAccBranchID2 = Int32.Parse(BusinessAccBranchID2);
- foreach (PXDataRecord record in PXDatabase.SelectMulti<PX.Objects.CR.BAccount>
- (
- new PXDataField("BAccountID"),
- new PXDataFieldValue("UsrToBranchID", resultBusinessAccBranchID2)))
- {
- BusinessAccBranchID = record.GetInt32(0).GetValueOrDefault(0);
- }
- int branchfortnew = 0;
- foreach (PXDataRecord record in PXDatabase.SelectMulti<PX.Objects.CR.BAccount>
- (
- new PXDataField("UsrToBranchID"),
- new PXDataFieldValue("BAccountID", arcContract.CounterpartyID)))
- {
- branchfortnew = record.GetInt32(0).GetValueOrDefault(0);
- }
- string subbranchfortnew = branchfortnew.ToString();
- subbranchfortnew = subbranchfortnew.Substring(subbranchfortnew.Length - 3);
- POEntry.Document.SetValueExt<ArcContract.branchID>(poorder, Int32.Parse(subbranchfortnew));
- POEntry.Document.SetValueExt<ArcContract.counterpartyID>(poorder, BusinessAccBranchID);
- POEntry.Document.SetValueExt<ArcContract.docTypeID>(poorder, arcContract.DocTypeID);
- POEntry.Document.SetValueExt<ArcContract.periodStartDateS>(poorder, arcContract.PeriodStartDateS);
- POEntry.Document.SetValueExt<ArcContract.periodEndDateS>(poorder, arcContract.PeriodEndDateS);
- POEntry.Document.SetValueExt<ArcContract.valuationMonthS>(poorder, arcContract.ValuationMonthS);
- POEntry.Document.SetValueExt<ArcContract.marketID>(poorder, arcContract.MarketID);
- POEntry.Document.SetValueExt<ArcContract.сontractCurrency>(poorder, arcContract.ContractCurrency);
- poorder.ContractCurrency = arcContract.ContractCurrency;
- POEntry.Save.PressButton();
- }
- }
- SOOrderEntry SOOrderGraph = PXGraph.CreateInstance<SOOrderEntry>();
- List<ArcContractLine> SubcontractsReadyForSOCreation = new List<ArcContractLine>();
- int subcontract = 0;
- foreach (ArcContractLine ctl in Transactions.Select())
- {
- if (ctl.Selected.GetValueOrDefault(false) && (ctl.POOrderNbr != null || ctl.SOOrderNbr != null))
- throw new PXException($"The subcontract {ctl.SplitNbr} has already been linked to PO!");
- if (!ctl.Selected.GetValueOrDefault(false))
- continue;
- SubcontractsReadyForSOCreation.Add(ctl);
- subcontract = subcontract + 1;
- }
- if (subcontract > 0)
- {
- List<ArcContractLine> SubcontractsForCreatingSO = new List<ArcContractLine>();
- foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
- {
- if (true || (ctline.Status == ContractLineStatus.Fixd || ctline.Status == ContractLineStatus.ToBeFixed) && string.IsNullOrEmpty(ctline.SOOrderNbr))
- {
- SubcontractsForCreatingSO.Add(ctline);
- }
- }
- int SubcontractsForCreatingSOCount = 0;
- try
- {
- SubcontractsForCreatingSOCount = SubcontractsForCreatingSO.Count();
- }
- catch { PXTrace.WriteInformation("Order creation error #1>>>>"); }
- if (SubcontractsForCreatingSOCount > 0)
- {
- List<int> splits = new List<int>();
- foreach (ArcContractLine arcl in SubcontractsForCreatingSO)
- {
- if (Document.Current.PurchaseSale == "S")
- {
- SOOrderGraph.Clear();
- SOOrderGraph.Document.AllowUpdate = true;
- SOOrderGraph.Document.AllowInsert = true;
- SOOrder soorder = new SOOrder();
- soorder.OrderType = "SO";
- soorder = SOOrderGraph.Document.Insert(soorder);
- soorder = PXCache<SOOrder>.CreateCopy(SOOrderGraph.Document.Search<SOOrder.orderNbr>(soorder.OrderNbr));
- SOOrderGraph.Document.Current = soorder;
- soorder.GroundCollect = false;
- soorder = SOOrderGraph.Document.Update(soorder);
- SOOrderExt soorderext = PXCache<SOOrder>.GetExtension<SOOrderExt>(soorder);
- SOOrderGraph.Document.SetValueExt<SOOrder.customerID>(soorder, arcContract.CounterpartyID);
- SOOrderGraph.Document.SetValueExt<SOOrder.orderDate>(soorder, arcl.ShipFrom);
- SOOrderGraph.Document.SetValueExt<SOOrder.requestDate>(soorder, arcl.ShipTo);
- SOOrderGraph.Document.SetValueExt<SOOrderExt.usrContractNbr>(soorder, arcContract.ContractNbr);
- SOOrderGraph.Document.SetValueExt<SOOrderExt.usrSplitNbr>(soorder, arcl.SplitNbr);
- string TermsID = GetPaymentTerms(arcContract);
- SOOrderGraph.Document.SetValueExt<SOOrder.termsID>(soorder, TermsID);
- SOOrderGraph.Document.SetValueExt<SOOrder.hold>(soorder, false);
- SOOrderGraph.Document.SetValueExt<SOOrder.customerOrderNbr>(soorder, arcContract.ClientReference);
- SOOrderGraph.Document.SetValueExt<SOOrder.curyID>(soorder, arcContract.ContractCurrency);
- SOOrderGraph.Document.Current = soorder;
- SOLine soline = new SOLine();
- int? DefaultWarehouseID = GetDefaultWarehouseFromProduct(arcl.StockItemID.Value);
- int? SiteId = 0;
- if (arcl.SiteID != null)
- {
- INSite warehouse = PXSelect<INSite,
- Where<INSite.siteID, Equal<Required<ArcContractLine.siteID>>>>.Select(this, arcl.SiteID);
- if (warehouse.BranchID != arcContract.BranchID)
- {
- throw new PXException($"Cannot create SO. Current warehouse is not appropriate for Branch {GetBranchName(arcContract.BranchID)}.");
- }
- else
- {
- SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, arcl.SiteID);
- SiteId = arcl.SiteID;
- }
- }
- else if (DefaultWarehouseID.HasValue)
- {
- INSite warehouse = PXSelect<INSite,
- Where<INSite.siteID, Equal<Required<INSite.siteID>>>>.Select(this, DefaultWarehouseID);
- if (warehouse.BranchID != arcContract.BranchID)
- {
- INSite warehouseWithCuryBranch = PXSelect<INSite,
- Where<INSite.branchID, Equal<Required<Branch.branchID>>>>.Select(this, arcContract.BranchID).TopFirst;
- if (warehouseWithCuryBranch == null)
- {
- throw new PXException($"Cannot create a stock order without an available warehouse for Branch {GetBranchName(arcContract.BranchID)}.");
- }
- else
- {
- SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, warehouseWithCuryBranch.SiteID);
- SiteId = warehouseWithCuryBranch.SiteID;
- }
- }
- else
- {
- SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, DefaultWarehouseID);
- SiteId = DefaultWarehouseID;
- }
- }
- SOOrderGraph.Transactions.SetValueExt<SOLine.requestDate>(soline, arcl.ShipTo);
- SOOrderGraph.Transactions.SetValueExt<SOLine.shipDate>(soline, arcl.ShipFrom);
- SOOrderGraph.Transactions.SetValueExt<SOLine.inventoryID>(soline, arcl.StockItemID);
- if (arcContract.SubID.GetValueOrDefault(0) > 0)
- SOOrderGraph.Transactions.SetValueExt<SOLine.salesSubID>(soline, arcContract.SubID);
- soline.OrderType = soorder.OrderType;
- if (SiteId.GetValueOrDefault(0) > 0)
- soline.SiteID = SiteId;
- soline.OrderQty = (arcl.QtyFixed > 0) ? arcl.QtyFixed : arcl.QtyNotFixed;
- soline.CuryUnitPrice = arcl.UnitPrice;
- soline.DiscPct = 0.00m;
- soline.CuryDiscAmt = 0.00m;
- soline.CuryDiscPrice = 0.00m;
- SOLineQLExt solineext = PXCache<SOLine>.GetExtension<SOLineQLExt>(soline);
- solineext.UsrContractNbr = arcContract.ContractNbr;
- solineext.UsrSplitNbr = arcl.SplitNbr;
- SOOrderGraph.Transactions.SetValueExt<SOLine.orderQty>(soline, arcl.SplitQty);
- SOOrderGraph.Transactions.SetValueExt<SOLine.curyUnitPrice>(soline, arcl.UnitPrice);
- bool exactMatchSaleOrder = checkCTRMPurchaseSalesMatchForExactMatching(arcl) && GetIfCurrentRelatedAllocationIsBackToBack(arcl);
- bool relatedlineHavePOConnected = false;
- if (exactMatchSaleOrder)
- {
- relatedlineHavePOConnected = RelatedPurchaseContractAndContractLineHasPOConnected(arcl);
- if (!relatedlineHavePOConnected)
- throw new PXException("Related Purchase Contract don't have Purchase Order created!");
- else
- {
- SOOrderGraph.Transactions.SetValueExt<SOLine.pOCreate>(soline, true);
- SOOrderGraph.Transactions.SetValueExt<SOLine.pOSource>(soline, INReplenishmentSource.DropShipToOrder);
- }
- }
- soline = (SOLine)SOOrderGraph.Transactions.Cache.Insert(soline);
- soline = SOOrderGraph.Transactions.Update(soline);
- SOOrderGraph.Transactions.Current = soline;
- SOOrderGraph.putOnHold.PressButton();
- SOOrderGraph.releaseFromHold.PressButton();
- SOOrderGraph.openOrder.PressButton();
- SOOrderGraph.Save.PressButton();
- #region Add Linkage to purchase Order
- SOOrderGraph.Clear();
- SOOrderGraph.Document.Current = PXSelect<SOOrder, Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>.Select(SOOrderGraph, soline.OrderNbr);
- SOOrderEntryExt soeExt = SOOrderGraph.GetExtension<SOOrderEntryExt>();
- POAndLineNbr POAndLineNbr = GetRelatedPurchaseOrderAndPOLineHasPOConnected(arcl.ContractNbr, arcl.SplitNbr.Value);
- if (relatedlineHavePOConnected)
- soeExt.LinkSaleDropShipToPurchaseDropShip(soorder.OrderNbr, soline.LineNbr.GetValueOrDefault(1), POAndLineNbr.OrderNbr, POAndLineNbr.LineNbr);
- #endregion
- ArcContractLine arclinenew = new ArcContractLine();
- arclinenew = arcl;
- arclinenew.SOOrderNbr = soorder.OrderNbr;
- arclinenew.Status = "CD";
- ArcContract arccontrnew = new ArcContract();
- arccontrnew = arcContract;
- arccontrnew.ContractConfirmed = true;
- arclinenew = this.Transactions.Update(arclinenew);
- Transactions.Cache.RaiseRowUpdated(arclinenew, arcl);
- SOOrderGraph.Transactions.Update(soline);
- SOOrderGraph.Save.PressButton();
- this.Save.PressButton();
- splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
- }
- else if (Document.Current.PurchaseSale == "P")
- {
- CreatePO(Document.Current, arcl);
- splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
- }
- }
- var zz = PXContext.PXIdentity.IdentityName;
- for (int i = splits.Count; i > 0; i--)
- {
- var item = SubcontractsReadyForSOCreation.FirstOrDefault(x => x.SplitNbr == splits[i - 1]);
- if (item != null) SubcontractsReadyForSOCreation.Remove(item);
- }
- }
- List<ArcContractLine> SubcontractsForModifyingSO = new List<ArcContractLine>();
- foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
- {
- if (true || (ctline.Status == ContractLineStatus.Fixd || ctline.Status == ContractLineStatus.ToBeFixed) && !string.IsNullOrEmpty(ctline.SOOrderNbr))
- {
- SubcontractsForModifyingSO.Add(ctline);
- }
- }
- int SubcontractsForModifyingSOCount = 0;
- try
- {
- SubcontractsForModifyingSOCount = SubcontractsForModifyingSO.Count();
- }
- catch
- {
- PXTrace.WriteInformation("Order creation error #2>>>"
- );
- }
- if (SubcontractsForModifyingSOCount > 0)
- {
- List<int> splits = new List<int>();
- foreach (ArcContractLine arcl in SubcontractsForModifyingSO)
- {
- if (Document.Current.PurchaseSale == "S")
- {
- SOOrderGraph.Clear();
- SOLine soline = PXSelect<SOLine,
- Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>,
- And<SOLineQLExt.usrContractNbr, Equal<Required<SOLineQLExt.usrContractNbr>>,
- And<SOLineQLExt.usrSplitNbr, Equal<Required<SOLineQLExt.usrSplitNbr>>>>>>.Select(SOOrderGraph, arcl.SOOrderNbr, arcl.ContractNbr, arcl.SplitNbr);
- SOLine solinenew = new SOLine();
- solinenew = soline;
- solinenew.OrderQty = (arcl.QtyFixed > 0) ? arcl.QtyFixed : arcl.QtyNotFixed;
- solinenew.CuryUnitPrice = arcl.UnitPrice;
- bool exactMatchSaleOrder = checkCTRMPurchaseSalesMatchForExactMatching(arcl) && GetIfCurrentRelatedAllocationIsBackToBack(arcl);
- if (exactMatchSaleOrder)
- {
- bool relatedlineHavePOConnected = RelatedPurchaseContractAndContractLineHasPOConnected(arcl);
- if (!relatedlineHavePOConnected)
- throw new PXException("Related Purchase Contract don't have Purchase Order created!");
- else
- {
- SOOrderGraph.Transactions.SetValueExt<SOLine.pOCreate>(soline, true);
- SOOrderGraph.Transactions.SetValueExt<SOLine.pOSource>(soline, INReplenishmentSource.DropShipToOrder);
- }
- }
- SOOrderGraph.Transactions.Update(solinenew);
- SOOrderGraph.Transactions.Cache.RaiseRowUpdated(solinenew, soline);
- SOOrderGraph.Save.PressButton();
- ArcContractLine arclinenew = new ArcContractLine();
- arclinenew = arcl;
- arclinenew.SOOrderNbr = arcl.SOOrderNbr;
- arclinenew.Status = "CD";
- ArcContract arccontrnew = new ArcContract();
- arccontrnew = arcContract;
- arccontrnew.ContractConfirmed = true;
- arclinenew = this.Transactions.Update(arclinenew);
- Transactions.Cache.RaiseRowUpdated(arclinenew, arcl);
- this.Save.PressButton();
- splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
- }
- else if (Document.Current.PurchaseSale == "P")
- {
- ModifyPO(Document.Current, arcl);
- splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
- }
- }
- for (int i = splits.Count; i > 0; i--)
- {
- var item = SubcontractsReadyForSOCreation.FirstOrDefault(x => x.SplitNbr == splits[i]);
- if (item != null) SubcontractsReadyForSOCreation.Remove(item);
- }
- }
- List<ArcContractLine> SubcontractWithWrongStatusForCreatingOrModifyingSO = new List<ArcContractLine>();
- foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
- {
- if (true || ctline.Status.Equals(ContractLineStatus.ToBeFixed) || ctline.Status.Equals(ContractLineStatus.Fixd))
- {
- SubcontractWithWrongStatusForCreatingOrModifyingSO.Add(ctline);
- }
- }
- int SubcontractWithWrongStatusForCreatingOrModifyingSOCount = 0;
- try
- {
- SubcontractWithWrongStatusForCreatingOrModifyingSOCount = SubcontractWithWrongStatusForCreatingOrModifyingSO.Count();
- }
- catch { PXTrace.WriteInformation("Order creation error #3>>>>"); }
- }
- return adapter.Get();
- }
Advertisement
Add Comment
Please, Sign In to add comment