private static void ApproveSingleSubcontract(SubcontractEntry graph, POOrder subcontract)
 {
     SetupGraphForApproval(graph, subcontract);
     CheckActionExisting(graph);
     PressApprove(graph, subcontract);
     graph.Persist();
 }
 private static void CheckActionExisting(SubcontractEntry graph)
 {
     if (!graph.Actions.Contains(ActionsMessages.Action))
     {
         throw new PXException(PXMessages.LocalizeFormatNoPrefixNLA(EpMessages.AutomationNotConfigured, graph));
     }
 }
        private static PXAdapter CreateAdapter(SubcontractEntry graph, POOrder subcontract)
        {
            var dummyView = new DummyView(graph, subcontract);

            return(new PXAdapter(dummyView)
            {
                Menu = nameof(Approve)
            });
        }
        private static void PressApprove(SubcontractEntry graph, POOrder subcontract)
        {
            var action  = graph.Actions[ActionsMessages.Action];
            var adapter = CreateAdapter(graph, subcontract);

            // method Press is lazy, foreach needed for full completion
            foreach (var dummy in action.Press(adapter))
            {
            }
        }
        private static bool ApproveSubcontract(SubcontractEntry graph,
                                               KeyValuePair <EPApprovalProcess.EPOwned, POOrder> subcontractApprovalPair)
        {
            try
            {
                PXProcessing <EPApproval> .SetCurrentItem(subcontractApprovalPair.Key);

                ApproveSingleSubcontract(graph, subcontractApprovalPair.Value);
                PXProcessing <EPApproval> .SetProcessed();

                return(false);
            }
            catch (Exception exception)
            {
                PXProcessing <EPApproval> .SetError(exception);

                return(true);
            }
        }
 private static void SetupAutomationStep(SubcontractEntry graph, POOrder subcontract)
 {
     PXAutomation.GetView(graph);
     PXAutomation.GetStep(graph, subcontract.CreateArray(),
                          BqlCommand.CreateInstance(typeof(Select <>), typeof(POOrder)));
 }
 private static void SetupGraphForApproval(SubcontractEntry graph, POOrder subcontract)
 {
     graph.Clear();
     graph.Document.Current = subcontract;
     SetupAutomationStep(graph, subcontract);
 }
 private static bool ApproveSubcontracts(SubcontractEntry graph,
                                         Dictionary <EPApprovalProcess.EPOwned, POOrder> subcontractApprovalDictionary)
 {
     return(subcontractApprovalDictionary.Select(x => ApproveSubcontract(graph, x)).ToList().Any(x => x));
 }