This repository has been archived by the owner on Dec 27, 2023. It is now read-only.
/
Order.php
126 lines (116 loc) · 6.06 KB
/
Order.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php declare(strict_types=1);
/**
* Order Document controller for Sales application
*
* @package Sales
* @subpackage Controller
* @license http://www.gnu.org/licenses/agpl.html AGPL Version 3
* @author Paul Mehrer <p.mehrer@metaways.de>
* @copyright Copyright (c) 2021-2023 Metaways Infosystems GmbH (http://www.metaways.de)
*
*/
/**
* Order Document controller class for Sales application
*
* @package Sales
* @subpackage Controller
*/
class Sales_Controller_Document_Order extends Sales_Controller_Document_Abstract
{
use Tinebase_Controller_SingletonTrait;
/**
* the constructor
*
* don't use the constructor. use the singleton
*/
protected function __construct()
{
$this->_applicationName = Sales_Config::APP_NAME;
$this->_backend = new Tinebase_Backend_Sql([
Tinebase_Backend_Sql_Abstract::MODEL_NAME => Sales_Model_Document_Order::class,
Tinebase_Backend_Sql_Abstract::TABLE_NAME => Sales_Model_Document_Order::TABLE_NAME,
Tinebase_Backend_Sql_Abstract::MODLOG_ACTIVE => true,
]);
$this->_modelName = Sales_Model_Document_Order::class;
$this->_purgeRecords = false;
$this->_doContainerACLChecks = false;
$this->_documentStatusConfig = Sales_Config::DOCUMENT_ORDER_STATUS;
$this->_documentStatusTransitionConfig = Sales_Config::DOCUMENT_ORDER_STATUS_TRANSITIONS;
$this->_documentStatusField = Sales_Model_Document_Order::FLD_ORDER_STATUS;
$this->_oldRecordBookWriteableFields = [
Sales_Model_Document_Order::FLD_ORDER_STATUS,
Sales_Model_Document_Order::FLD_COST_CENTER_ID,
Sales_Model_Document_Order::FLD_COST_BEARER_ID,
Sales_Model_Document_Order::FLD_DESCRIPTION,
Sales_Model_Document_Order::FLD_SHARED_INVOICE,
Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID,
Sales_Model_Document_Order::FLD_SHARED_DELIVERY,
Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID,
Sales_Model_Document_Order::FLD_FOLLOWUP_DELIVERY_CREATED_STATUS,
Sales_Model_Document_Order::FLD_FOLLOWUP_INVOICE_CREATED_STATUS,
'tags', 'attachments', 'relations',
];
$this->_bookRecordRequiredFields = [
Sales_Model_Document_Order::FLD_CUSTOMER_ID,
Sales_Model_Document_Order::FLD_RECIPIENT_ID,
];
parent::__construct();
}
/**
* inspect creation of one record (before create)
*
* @param Sales_Model_Document_Abstract $_record
* @return void
*/
protected function _inspectBeforeCreate(Tinebase_Record_Interface $_record)
{
// the recipient address is not part of a customer, we enforce that here
if (!empty($_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID})) {
$_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID}
->{Sales_Model_Address::FLD_CUSTOMER_ID} = null;
}
if (!empty($_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID})) {
$_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID}
->{Sales_Model_Address::FLD_CUSTOMER_ID} = null;
}
parent::_inspectBeforeCreate($_record);
}
/**
* @param Sales_Model_Document_Abstract $_record
* @param Sales_Model_Document_Abstract $_oldRecord
*/
protected function _inspectBeforeUpdate($_record, $_oldRecord)
{
if (!empty($_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID})) {
// the recipient address is not part of a customer, we enforce that here
$_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID}
->{Sales_Model_Address::FLD_CUSTOMER_ID} = null;
// if the recipient address is a denormalized customer address, we denormalize it again from the original address
if ($address = Sales_Controller_Document_Address::getInstance()->search(
Tinebase_Model_Filter_FilterGroup::getFilterForModel(Sales_Model_Document_Address::class, [
['field' => 'id', 'operator' => 'equals', 'value' => $_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID}->getId()],
['field' => 'document_id', 'operator' => 'equals', 'value' => null],
['field' => 'customer_id', 'operator' => 'not', 'value' => null],
]))->getFirstRecord()) {
$_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID}->setId($address->{Sales_Model_Address::FLD_ORIGINAL_ID});
$_record->{Sales_Model_Document_Order::FLD_DELIVERY_RECIPIENT_ID}->{Sales_Model_Address::FLD_ORIGINAL_ID} = null;
}
}
if (!empty($_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID})) {
// the recipient address is not part of a customer, we enforce that here
$_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID}
->{Sales_Model_Address::FLD_CUSTOMER_ID} = null;
// if the recipient address is a denormalized customer address, we denormalize it again from the original address
if ($address = Sales_Controller_Document_Address::getInstance()->search(
Tinebase_Model_Filter_FilterGroup::getFilterForModel(Sales_Model_Document_Address::class, [
['field' => 'id', 'operator' => 'equals', 'value' => $_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID}->getId()],
['field' => 'document_id', 'operator' => 'equals', 'value' => null],
['field' => 'customer_id', 'operator' => 'not', 'value' => null],
]))->getFirstRecord()) {
$_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID}->setId($address->{Sales_Model_Address::FLD_ORIGINAL_ID});
$_record->{Sales_Model_Document_Order::FLD_INVOICE_RECIPIENT_ID}->{Sales_Model_Address::FLD_ORIGINAL_ID} = null;
}
}
parent::_inspectBeforeUpdate($_record, $_oldRecord);
}
}