Home php How to add order properties after registration?

How to add order properties after registration?

Author

Date

Category

Trying to update the order property, but does not write the property, I tried to declare

1st option:

use bitrix \ main;
Main \ eventManager :: getInstance () - & gt; addheventhandler (
    'Sale', 'OnsaleOrdersaved', 'AddOrderProperty'
);
FUNCTION AddOrderProperty ($ EVENT)
{
    $ Order = $ Event- & GT; GetParameter ("Entity");
    $ code = 'pay_link';
    $ Value = "https: //". $ _Server ["Server_name"]. "/Pay.php?Order_id=". $ Order- & gt; getid ();
    If (CModule :: Includemodule ('Sale')) {
      if ($ prop = csalerprops :: getlist ([], ['Code' = & gt; $ code]) - & gt; fetch ()) {
        Return CSalerDerProprpsValue :: Add ([
          'Name' = & gt; $ Prop ['Name']
          'Code' = & gt; $ Prop ['Code']
          'Order_props_id' = & gt; $ prop ['id'],
          'Order_id' = & gt; $ Order
          'Value' = & gt; $ value
        ]);
      }
    }
}

2nd option:

use bitrix \ main;
Main \ eventManager :: getInstance () - & gt; addheventhandler (
    'Sale', 'OnsaleOrdersaved', 'PAYLINK'
);
FUNCTION PAYLINK (Main \ event $ event) {
  CModule :: Includemodule ("Sale");
  $ Order = $ Event- & GT; GetParameter ("Entity");
  $ paymentids = $ order- & gt; getpaymentsystemid ();
  $ persononypeid = $ OrderR- & gt; getpersonteid ();
  $ propertycollection = $ OrderCollection ();
  if ($ paymentids [0] == 10) {
    $ OrderPropertyID = ($ PersontePeid == 1)? 55: 56;
    $ somepropvalue = $ propertycollection- & gt; getItemByORDerPropertyID ($ OrderPropertyID);
    VAR_DUMP ($ somepropvalue);
    If (! $ somepropvalue) {
      CSalerDerProprosValue :: Add (Array (
        'Order_id' = & gt; $ Order- & gt; getid (),
        'Order_props_id' = & gt; $ OrderPropertyID
        'Name' = & gt; "Reference to payment",
        'Value' = & gt; "https: //". $ _Server ["Server_name"]. "/Pay.php?Order_id=". $ Order- & gt; getid (),
        'Code' = & gt; "Pay_link",
      ));
    } else {
      $ propvalue = $ somepropvalue- & gt; getValue ();
      VAR_DUMP ($ Propvalue);
      If (Empty ($ Propvalue)) {
        $ somepropvalue- & gt; setValue ("https: //". $ _Server ["Server_Name"]. "/Pay.php.Order_id=". $ Order- & gt; getID ());
        $ somepropvalue- & gt; save ();
      }
    }
  }
}

Tell me how to do to work?


Answer 1

something you use D7 in your code, then old methods .. Here is the solution on clean D7. These code, when saving an order, checks whether the PAY_LINK property is checked and depending on this adds property or updates if it is filled not as it should. Other checks, such as physical or legal, add, add.

/ * addition for /bitrix/php_interface/init.php * /
$ eventManager = \ Bitrix \ Main \ eventManager :: getInstance ();
$ eventManager- & gt; AddEventHandler (
  'Sale',
  'OnsaleOrdersaved',
  'AddOrderPropertyPayLink'
);
Function AddOrderPropertyPayLink (\ Bitrix \ Main \ event $ event) {
  / ** @Var \ Bitrix \ Sale \ Order $ Order * /
  $ Order = $ Event- & GT; GetParameter ("Entity");
  $ paylinkcode = 'pay_link';
  $ ServerName = \ Bitrix \ Main \ Context :: getCurrent () - & gt; getServer () - & gt; getservername ();
  $ paylinkvalue = 'https: //'. $ ServerName. "/Pay.php?Order_id=". $ Order- & gt; getid ();
  / ** @Var \ Bitrix \ Sale \ PropertyValueCollection $ PropertyCollection * /
  $ propertycollection = $ OrderCollection ();
  $ property = null;
  If ($ PropertyCollection- & GT; GetItembyorderPropertyCode ($ PAYLinkCode) === NULL) {
    $ Property = $ PropertyCollection- & GT; CreateItem (
      [
        'Name' = & gt; 'Reference to payment',
        'Code' = & gt; $ paylinkcode
        'Type' = & gt; 'String',
      ]
    );
  } else {
    $ property = $ propertycollection- & gt; getItembyorderPropertyCode ($ paylinkcode);
  } 
if ($ Property & Amp; & amp; $ Property- & GT; getValue ()! == $ paylinkvalue) {
     $ property- & gt; setfield ('value', $ paylinkvalue);
     $ Order- & gt; save ();
   }
}

Programmers, Start Your Engines!

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

Recent questions