Guest User

Untitled

a guest
Mar 31st, 2026
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 22.04 KB | None | 0 0
  1. public PXAction<ArcContract> Confirm;
  2.         [PXUIField(DisplayName = "Confirm", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)]
  3.         [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
  4.         protected virtual IEnumerable confirm(PXAdapter adapter)
  5.         {
  6.             ArcContract arcContract = Document.Current;
  7.  
  8.             if (arcContract != null)
  9.             {
  10.                 if (arcContract.InterCompanyBRRequired.GetValueOrDefault(false) && string.IsNullOrEmpty(arcContract.RelatedIBContractNbr))
  11.                 {
  12.                     ArcContractMaint POEntry = PXGraph.CreateInstance<ArcContractMaint>();
  13.                     POEntry.Clear();
  14.                     POEntry.Document.AllowUpdate = true;
  15.                     POEntry.Document.AllowInsert = true;
  16.                     ArcContract poorder = new ArcContract();
  17.                     poorder.BranchID = PXAccess.GetBranchID();
  18.                     poorder = POEntry.Document.Insert(poorder);
  19.                     poorder = PXCache<ArcContract>.CreateCopy(POEntry.Document.Search<ArcContract.contractNbr>(poorder.ContractNbr));
  20.                     POEntry.Document.Current = poorder;
  21.  
  22.                     poorder = POEntry.Document.Update(poorder);
  23.  
  24.                     POEntry.Document.SetValueExt<ArcContract.itemClassID>(poorder, arcContract.ItemClassID);
  25.  
  26.                     if (arcContract.PurchaseSale == "P")
  27.                     {
  28.                         POEntry.Document.SetValueExt<ArcContract.purchaseSale>(poorder, "S");
  29.                         poorder.PurchaseSale = "S";
  30.                     }
  31.                     else if (arcContract.PurchaseSale == "S")
  32.                     {
  33.                         POEntry.Document.SetValueExt<ArcContract.purchaseSale>(poorder, "P");
  34.                         poorder.PurchaseSale = "S";
  35.                     }
  36.  
  37.                     POEntry.Document.SetValueExt<ArcContract.stockItemID>(poorder, arcContract.StockItemID);
  38.                     POEntry.Document.SetValueExt<ArcContract.relatedIBContractNbr>(poorder, arcContract.ContractNbr);
  39.                     POEntry.Document.SetValueExt<ArcContract.interCompanyBRRequired>(poorder, arcContract.InterCompanyBRRequired);
  40.  
  41.                     int tenantId = PX.Data.Update.PXInstanceHelper.CurrentCompany;
  42.  
  43.                     int BusinessAccBranchID = 0;
  44.                     string tenstr = tenantId.ToString();
  45.                     string branchfort = arcContract.BranchID.ToString();
  46.                     branchfort = branchfort.PadLeft(3, '0');
  47.                     string BusinessAccBranchID2 = tenstr + branchfort;
  48.  
  49.                     int resultBusinessAccBranchID2 = Int32.Parse(BusinessAccBranchID2);
  50.  
  51.                     foreach (PXDataRecord record in PXDatabase.SelectMulti<PX.Objects.CR.BAccount>
  52.                     (
  53.                         new PXDataField("BAccountID"),
  54.                         new PXDataFieldValue("UsrToBranchID", resultBusinessAccBranchID2)))
  55.                     {
  56.                         BusinessAccBranchID = record.GetInt32(0).GetValueOrDefault(0);
  57.                     }
  58.  
  59.                     int branchfortnew = 0;
  60.                     foreach (PXDataRecord record in PXDatabase.SelectMulti<PX.Objects.CR.BAccount>
  61.                     (
  62.                         new PXDataField("UsrToBranchID"),
  63.                         new PXDataFieldValue("BAccountID", arcContract.CounterpartyID)))
  64.                     {
  65.                         branchfortnew = record.GetInt32(0).GetValueOrDefault(0);
  66.                     }
  67.  
  68.                     string subbranchfortnew = branchfortnew.ToString();
  69.                     subbranchfortnew = subbranchfortnew.Substring(subbranchfortnew.Length - 3);
  70.  
  71.                     POEntry.Document.SetValueExt<ArcContract.branchID>(poorder, Int32.Parse(subbranchfortnew));
  72.                     POEntry.Document.SetValueExt<ArcContract.counterpartyID>(poorder, BusinessAccBranchID);
  73.                     POEntry.Document.SetValueExt<ArcContract.docTypeID>(poorder, arcContract.DocTypeID);
  74.                     POEntry.Document.SetValueExt<ArcContract.periodStartDateS>(poorder, arcContract.PeriodStartDateS);
  75.                     POEntry.Document.SetValueExt<ArcContract.periodEndDateS>(poorder, arcContract.PeriodEndDateS);
  76.                     POEntry.Document.SetValueExt<ArcContract.valuationMonthS>(poorder, arcContract.ValuationMonthS);
  77.                     POEntry.Document.SetValueExt<ArcContract.marketID>(poorder, arcContract.MarketID);
  78.                     POEntry.Document.SetValueExt<ArcContract.сontractCurrency>(poorder, arcContract.ContractCurrency);
  79.                     poorder.ContractCurrency = arcContract.ContractCurrency;
  80.  
  81.                     POEntry.Save.PressButton();
  82.  
  83.                 }
  84.             }
  85.  
  86.             SOOrderEntry SOOrderGraph = PXGraph.CreateInstance<SOOrderEntry>();
  87.             List<ArcContractLine> SubcontractsReadyForSOCreation = new List<ArcContractLine>();
  88.  
  89.             int subcontract = 0;
  90.             foreach (ArcContractLine ctl in Transactions.Select())
  91.             {
  92.                 if (ctl.Selected.GetValueOrDefault(false) && (ctl.POOrderNbr != null || ctl.SOOrderNbr != null))
  93.                     throw new PXException($"The subcontract {ctl.SplitNbr} has already been linked to PO!");
  94.                 if (!ctl.Selected.GetValueOrDefault(false))
  95.                     continue;
  96.                 SubcontractsReadyForSOCreation.Add(ctl);
  97.                 subcontract = subcontract + 1;
  98.             }
  99.             if (subcontract > 0)
  100.             {
  101.                 List<ArcContractLine> SubcontractsForCreatingSO = new List<ArcContractLine>();
  102.                 foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
  103.                 {
  104.                     if (true || (ctline.Status == ContractLineStatus.Fixd || ctline.Status == ContractLineStatus.ToBeFixed) && string.IsNullOrEmpty(ctline.SOOrderNbr))
  105.                     {
  106.                         SubcontractsForCreatingSO.Add(ctline);
  107.                     }
  108.                 }
  109.  
  110.                 int SubcontractsForCreatingSOCount = 0;
  111.                 try
  112.                 {
  113.                     SubcontractsForCreatingSOCount = SubcontractsForCreatingSO.Count();
  114.                 }
  115.                 catch { PXTrace.WriteInformation("Order creation error #1>>>>"); }
  116.                 if (SubcontractsForCreatingSOCount > 0)
  117.                 {
  118.                     List<int> splits = new List<int>();
  119.                     foreach (ArcContractLine arcl in SubcontractsForCreatingSO)
  120.                     {
  121.                         if (Document.Current.PurchaseSale == "S")
  122.                         {
  123.                             SOOrderGraph.Clear();
  124.                             SOOrderGraph.Document.AllowUpdate = true;
  125.                             SOOrderGraph.Document.AllowInsert = true;
  126.                             SOOrder soorder = new SOOrder();
  127.                             soorder.OrderType = "SO";
  128.                             soorder = SOOrderGraph.Document.Insert(soorder);
  129.                             soorder = PXCache<SOOrder>.CreateCopy(SOOrderGraph.Document.Search<SOOrder.orderNbr>(soorder.OrderNbr));
  130.                             SOOrderGraph.Document.Current = soorder;
  131.                             soorder.GroundCollect = false;
  132.                             soorder = SOOrderGraph.Document.Update(soorder);
  133.                             SOOrderExt soorderext = PXCache<SOOrder>.GetExtension<SOOrderExt>(soorder);
  134.                             SOOrderGraph.Document.SetValueExt<SOOrder.customerID>(soorder, arcContract.CounterpartyID);
  135.                             SOOrderGraph.Document.SetValueExt<SOOrder.orderDate>(soorder, arcl.ShipFrom);
  136.                             SOOrderGraph.Document.SetValueExt<SOOrder.requestDate>(soorder, arcl.ShipTo);
  137.                             SOOrderGraph.Document.SetValueExt<SOOrderExt.usrContractNbr>(soorder, arcContract.ContractNbr);
  138.                             SOOrderGraph.Document.SetValueExt<SOOrderExt.usrSplitNbr>(soorder, arcl.SplitNbr);
  139.                             string TermsID = GetPaymentTerms(arcContract);
  140.                             SOOrderGraph.Document.SetValueExt<SOOrder.termsID>(soorder, TermsID);
  141.                             SOOrderGraph.Document.SetValueExt<SOOrder.hold>(soorder, false);
  142.  
  143.                             SOOrderGraph.Document.SetValueExt<SOOrder.customerOrderNbr>(soorder, arcContract.ClientReference);
  144.  
  145.                             SOOrderGraph.Document.SetValueExt<SOOrder.curyID>(soorder, arcContract.ContractCurrency);
  146.                             SOOrderGraph.Document.Current = soorder;
  147.                             SOLine soline = new SOLine();
  148.                             int? DefaultWarehouseID = GetDefaultWarehouseFromProduct(arcl.StockItemID.Value);
  149.                             int? SiteId = 0;
  150.                             if (arcl.SiteID != null)
  151.                             {
  152.                                 INSite warehouse = PXSelect<INSite,
  153.                                Where<INSite.siteID, Equal<Required<ArcContractLine.siteID>>>>.Select(this, arcl.SiteID);
  154.                                 if (warehouse.BranchID != arcContract.BranchID)
  155.                                 {
  156.                                     throw new PXException($"Cannot create SO. Current warehouse is not appropriate for Branch {GetBranchName(arcContract.BranchID)}.");
  157.                                 }
  158.                                 else
  159.                                 {
  160.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, arcl.SiteID);
  161.                                     SiteId = arcl.SiteID;
  162.                                 }
  163.  
  164.                             }
  165.                             else if (DefaultWarehouseID.HasValue)
  166.                             {
  167.                                 INSite warehouse = PXSelect<INSite,
  168.                                Where<INSite.siteID, Equal<Required<INSite.siteID>>>>.Select(this, DefaultWarehouseID);
  169.                                 if (warehouse.BranchID != arcContract.BranchID)
  170.                                 {
  171.                                     INSite warehouseWithCuryBranch = PXSelect<INSite,
  172.                                         Where<INSite.branchID, Equal<Required<Branch.branchID>>>>.Select(this, arcContract.BranchID).TopFirst;
  173.                                     if (warehouseWithCuryBranch == null)
  174.                                     {
  175.                                         throw new PXException($"Cannot create a stock order without an available warehouse for Branch {GetBranchName(arcContract.BranchID)}.");
  176.                                     }
  177.                                     else
  178.                                     {
  179.                                         SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, warehouseWithCuryBranch.SiteID);
  180.                                         SiteId = warehouseWithCuryBranch.SiteID;
  181.                                     }
  182.                                 }
  183.                                 else
  184.                                 {
  185.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.siteID>(soline, DefaultWarehouseID);
  186.                                     SiteId = DefaultWarehouseID;
  187.                                 }
  188.                             }
  189.                             SOOrderGraph.Transactions.SetValueExt<SOLine.requestDate>(soline, arcl.ShipTo);
  190.                             SOOrderGraph.Transactions.SetValueExt<SOLine.shipDate>(soline, arcl.ShipFrom);
  191.                             SOOrderGraph.Transactions.SetValueExt<SOLine.inventoryID>(soline, arcl.StockItemID);
  192.                             if (arcContract.SubID.GetValueOrDefault(0) > 0)
  193.                                 SOOrderGraph.Transactions.SetValueExt<SOLine.salesSubID>(soline, arcContract.SubID);
  194.  
  195.                             soline.OrderType = soorder.OrderType;
  196.                             if (SiteId.GetValueOrDefault(0) > 0)
  197.                                 soline.SiteID = SiteId;
  198.                             soline.OrderQty = (arcl.QtyFixed > 0) ? arcl.QtyFixed : arcl.QtyNotFixed;
  199.                             soline.CuryUnitPrice = arcl.UnitPrice;
  200.                             soline.DiscPct = 0.00m;
  201.                             soline.CuryDiscAmt = 0.00m;
  202.                             soline.CuryDiscPrice = 0.00m;
  203.  
  204.                             SOLineQLExt solineext = PXCache<SOLine>.GetExtension<SOLineQLExt>(soline);
  205.  
  206.                             solineext.UsrContractNbr = arcContract.ContractNbr;
  207.                             solineext.UsrSplitNbr = arcl.SplitNbr;
  208.  
  209.                             SOOrderGraph.Transactions.SetValueExt<SOLine.orderQty>(soline, arcl.SplitQty);
  210.                             SOOrderGraph.Transactions.SetValueExt<SOLine.curyUnitPrice>(soline, arcl.UnitPrice);
  211.  
  212.                             bool exactMatchSaleOrder = checkCTRMPurchaseSalesMatchForExactMatching(arcl) && GetIfCurrentRelatedAllocationIsBackToBack(arcl);
  213.                             bool relatedlineHavePOConnected = false;
  214.                             if (exactMatchSaleOrder)
  215.                             {
  216.                                 relatedlineHavePOConnected = RelatedPurchaseContractAndContractLineHasPOConnected(arcl);
  217.                                 if (!relatedlineHavePOConnected)
  218.                                     throw new PXException("Related Purchase Contract don't have Purchase Order created!");
  219.                                 else
  220.                                 {
  221.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.pOCreate>(soline, true);
  222.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.pOSource>(soline, INReplenishmentSource.DropShipToOrder);
  223.                                 }
  224.                             }
  225.  
  226.                             soline = (SOLine)SOOrderGraph.Transactions.Cache.Insert(soline);
  227.                             soline = SOOrderGraph.Transactions.Update(soline);
  228.                             SOOrderGraph.Transactions.Current = soline;
  229.                             SOOrderGraph.putOnHold.PressButton();
  230.                             SOOrderGraph.releaseFromHold.PressButton();
  231.                             SOOrderGraph.openOrder.PressButton();
  232.                             SOOrderGraph.Save.PressButton();
  233.  
  234.                             #region Add Linkage to purchase Order
  235.                             SOOrderGraph.Clear();
  236.                             SOOrderGraph.Document.Current = PXSelect<SOOrder, Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>.Select(SOOrderGraph, soline.OrderNbr);
  237.                             SOOrderEntryExt soeExt = SOOrderGraph.GetExtension<SOOrderEntryExt>();
  238.                             POAndLineNbr POAndLineNbr = GetRelatedPurchaseOrderAndPOLineHasPOConnected(arcl.ContractNbr, arcl.SplitNbr.Value);
  239.                             if (relatedlineHavePOConnected)
  240.                                 soeExt.LinkSaleDropShipToPurchaseDropShip(soorder.OrderNbr, soline.LineNbr.GetValueOrDefault(1), POAndLineNbr.OrderNbr, POAndLineNbr.LineNbr);
  241.                             #endregion
  242.  
  243.                             ArcContractLine arclinenew = new ArcContractLine();
  244.                             arclinenew = arcl;
  245.                             arclinenew.SOOrderNbr = soorder.OrderNbr;
  246.                             arclinenew.Status = "CD";
  247.  
  248.                             ArcContract arccontrnew = new ArcContract();
  249.                             arccontrnew = arcContract;
  250.                             arccontrnew.ContractConfirmed = true;
  251.  
  252.                             arclinenew = this.Transactions.Update(arclinenew);
  253.                             Transactions.Cache.RaiseRowUpdated(arclinenew, arcl);
  254.  
  255.  
  256.                             SOOrderGraph.Transactions.Update(soline);
  257.                             SOOrderGraph.Save.PressButton();
  258.  
  259.                             this.Save.PressButton();
  260.                             splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
  261.                         }
  262.                         else if (Document.Current.PurchaseSale == "P")
  263.                         {
  264.                             CreatePO(Document.Current, arcl);
  265.                             splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
  266.                         }
  267.  
  268.                     }
  269.  
  270.                     var zz = PXContext.PXIdentity.IdentityName;
  271.                  
  272.  
  273.                     for (int i = splits.Count; i > 0; i--)
  274.                     {
  275.                         var item = SubcontractsReadyForSOCreation.FirstOrDefault(x => x.SplitNbr == splits[i - 1]);
  276.                         if (item != null) SubcontractsReadyForSOCreation.Remove(item);
  277.                     }
  278.                 }
  279.  
  280.                 List<ArcContractLine> SubcontractsForModifyingSO = new List<ArcContractLine>();
  281.  
  282.                 foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
  283.                 {
  284.                     if (true || (ctline.Status == ContractLineStatus.Fixd || ctline.Status == ContractLineStatus.ToBeFixed) && !string.IsNullOrEmpty(ctline.SOOrderNbr))
  285.                     {
  286.                         SubcontractsForModifyingSO.Add(ctline);
  287.                     }
  288.                 }
  289.  
  290.                 int SubcontractsForModifyingSOCount = 0;
  291.  
  292.                 try
  293.                 {
  294.                     SubcontractsForModifyingSOCount = SubcontractsForModifyingSO.Count();
  295.                 }
  296.                 catch
  297.                 {
  298.                     PXTrace.WriteInformation("Order creation error #2>>>"
  299.                 );
  300.                 }
  301.  
  302.                 if (SubcontractsForModifyingSOCount > 0)
  303.                 {
  304.                     List<int> splits = new List<int>();
  305.                     foreach (ArcContractLine arcl in SubcontractsForModifyingSO)
  306.                     {
  307.                         if (Document.Current.PurchaseSale == "S")
  308.                         {
  309.                             SOOrderGraph.Clear();
  310.                             SOLine soline = PXSelect<SOLine,
  311.                                 Where<SOLine.orderNbr, Equal<Required<SOLine.orderNbr>>,
  312.                                 And<SOLineQLExt.usrContractNbr, Equal<Required<SOLineQLExt.usrContractNbr>>,
  313.                                 And<SOLineQLExt.usrSplitNbr, Equal<Required<SOLineQLExt.usrSplitNbr>>>>>>.Select(SOOrderGraph, arcl.SOOrderNbr, arcl.ContractNbr, arcl.SplitNbr);
  314.  
  315.                             SOLine solinenew = new SOLine();
  316.                             solinenew = soline;
  317.                             solinenew.OrderQty = (arcl.QtyFixed > 0) ? arcl.QtyFixed : arcl.QtyNotFixed;
  318.                             solinenew.CuryUnitPrice = arcl.UnitPrice;
  319.                             bool exactMatchSaleOrder = checkCTRMPurchaseSalesMatchForExactMatching(arcl) && GetIfCurrentRelatedAllocationIsBackToBack(arcl);
  320.                             if (exactMatchSaleOrder)
  321.                             {
  322.                                 bool relatedlineHavePOConnected = RelatedPurchaseContractAndContractLineHasPOConnected(arcl);
  323.                                 if (!relatedlineHavePOConnected)
  324.                                     throw new PXException("Related Purchase Contract don't have Purchase Order created!");
  325.                                 else
  326.                                 {
  327.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.pOCreate>(soline, true);
  328.                                     SOOrderGraph.Transactions.SetValueExt<SOLine.pOSource>(soline, INReplenishmentSource.DropShipToOrder);
  329.                                 }
  330.                             }
  331.                             SOOrderGraph.Transactions.Update(solinenew);
  332.                             SOOrderGraph.Transactions.Cache.RaiseRowUpdated(solinenew, soline);
  333.                             SOOrderGraph.Save.PressButton();
  334.  
  335.                             ArcContractLine arclinenew = new ArcContractLine();
  336.                             arclinenew = arcl;
  337.                             arclinenew.SOOrderNbr = arcl.SOOrderNbr;
  338.                             arclinenew.Status = "CD";
  339.  
  340.                             ArcContract arccontrnew = new ArcContract();
  341.                             arccontrnew = arcContract;
  342.                             arccontrnew.ContractConfirmed = true;
  343.  
  344.                             arclinenew = this.Transactions.Update(arclinenew);
  345.                             Transactions.Cache.RaiseRowUpdated(arclinenew, arcl);
  346.                             this.Save.PressButton();
  347.                             splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
  348.                         }
  349.  
  350.                         else if (Document.Current.PurchaseSale == "P")
  351.                         {
  352.                             ModifyPO(Document.Current, arcl);
  353.                             splits.Add(arcl.SplitNbr.GetValueOrDefault(0));
  354.                         }
  355.  
  356.                     }
  357.  
  358.                     for (int i = splits.Count; i > 0; i--)
  359.                     {
  360.                         var item = SubcontractsReadyForSOCreation.FirstOrDefault(x => x.SplitNbr == splits[i]);
  361.                         if (item != null) SubcontractsReadyForSOCreation.Remove(item);
  362.                     }
  363.                 }
  364.  
  365.                 List<ArcContractLine> SubcontractWithWrongStatusForCreatingOrModifyingSO = new List<ArcContractLine>();
  366.                 foreach (ArcContractLine ctline in SubcontractsReadyForSOCreation)
  367.                 {
  368.                     if (true || ctline.Status.Equals(ContractLineStatus.ToBeFixed) || ctline.Status.Equals(ContractLineStatus.Fixd))
  369.                     {
  370.                         SubcontractWithWrongStatusForCreatingOrModifyingSO.Add(ctline);
  371.                     }
  372.                 }
  373.  
  374.                 int SubcontractWithWrongStatusForCreatingOrModifyingSOCount = 0;
  375.  
  376.                 try
  377.                 {
  378.                     SubcontractWithWrongStatusForCreatingOrModifyingSOCount = SubcontractWithWrongStatusForCreatingOrModifyingSO.Count();
  379.                 }
  380.                 catch { PXTrace.WriteInformation("Order creation error #3>>>>"); }
  381.             }
  382.             return adapter.Get();
  383.         }
  384.  
Advertisement
Add Comment
Please, Sign In to add comment