From e7b58f8e1446b57cbab1a5cac839e0eed2a50287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Sch=C3=BCle?= Date: Wed, 12 Feb 2025 08:50:54 +0100 Subject: [PATCH] tweak(Sales/Document): prevent "__clone method called on non-object" --- tine20/Sales/Controller/Document/Abstract.php | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tine20/Sales/Controller/Document/Abstract.php b/tine20/Sales/Controller/Document/Abstract.php index 154483c415..0512b2a7bc 100644 --- a/tine20/Sales/Controller/Document/Abstract.php +++ b/tine20/Sales/Controller/Document/Abstract.php @@ -128,8 +128,10 @@ protected function _inspectCategoryDebitor(Sales_Model_Document_Abstract $_recor } $orgDebitor = $_record->{Sales_Model_Document_Abstract::FLD_DEBITOR_ID} = Sales_Controller_Debitor::getInstance()->search( Tinebase_Model_Filter_FilterGroup::getFilterForModel(Sales_Model_Debitor::class, [ - [TMFA::FIELD => Sales_Model_Debitor::FLD_CUSTOMER_ID, TMFA::OPERATOR => TMFA::OP_EQUALS, TMFA::VALUE => $customerId], - [TMFA::FIELD => Sales_Model_Debitor::FLD_DIVISION_ID, TMFA::OPERATOR => TMFA::OP_EQUALS, TMFA::VALUE => $divisionId], + [TMFA::FIELD => Sales_Model_Debitor::FLD_CUSTOMER_ID, TMFA::OPERATOR => TMFA::OP_EQUALS, + TMFA::VALUE => $customerId], + [TMFA::FIELD => Sales_Model_Debitor::FLD_DIVISION_ID, TMFA::OPERATOR => TMFA::OP_EQUALS, + TMFA::VALUE => $divisionId], ]))->getFirstRecord(); if (null === $_record->{Sales_Model_Document_Abstract::FLD_DEBITOR_ID}) { @@ -139,18 +141,27 @@ protected function _inspectCategoryDebitor(Sales_Model_Document_Abstract $_recor Sales_Model_Debitor::FLD_NAME => '-', ], true)); $customer = Sales_Controller_Customer::getInstance()->update($customer); - $orgDebitor = $_record->{Sales_Model_Document_Abstract::FLD_DEBITOR_ID} = $customer->{Sales_Model_Customer::FLD_DEBITORS}->find(Sales_Model_Debitor::FLD_DIVISION_ID, $divisionId); + $orgDebitor = $_record->{Sales_Model_Document_Abstract::FLD_DEBITOR_ID} = + $customer->{Sales_Model_Customer::FLD_DEBITORS}->find(Sales_Model_Debitor::FLD_DIVISION_ID, + $divisionId); } } - if (!$_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS} || 0 === $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS}->count()) { + if (!$_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS} || + 0 === $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS}->count() + ) { if (null === $orgDebitor) { $orgDebitor = Sales_Controller_Debitor::getInstance()->get($orgDebitorId); } - $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS} = clone $orgDebitor->{Sales_Model_Debitor::FLD_PAYMENT_MEANS}; + if (is_object($orgDebitor->{Sales_Model_Debitor::FLD_PAYMENT_MEANS})) { + $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS} = + clone $orgDebitor->{Sales_Model_Debitor::FLD_PAYMENT_MEANS}; + } } - if (1 !== $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS}->filter(Sales_Model_PaymentMeans::FLD_DEFAULT, true)->count()) { + if (1 !== $_record->{Sales_Model_Document_Abstract::FLD_PAYMENT_MEANS} + ->filter(Sales_Model_PaymentMeans::FLD_DEFAULT, true)->count() + ) { throw new Tinebase_Exception_UnexpectedValue('payment means need to have one default record'); } }