Fix #7123 - getting abra ready to test
[Pman.Xtuple] / DataObjects / Prodcat.php
1 <?php
2 /**
3  * Table Definition for prodcat
4  */
5 require_once 'DB/DataObject.php';
6
7 class Pman_Xtuple_DataObjects_Prodcat extends DB_DataObject 
8 {
9     ###START_AUTOCODE
10     /* the code below is auto generated do not remove the above tag */
11
12     public $__table = 'prodcat';             // table name
13     public $prodcat_id;                      // int4(4)  not_null default_nextval%28%28prodcat_prodcat_id_seq%29%3A%3Aregclass%29 primary_key
14     public $prodcat_code;                    // text(-1)  
15     public $prodcat_descrip;                 // text(-1)  
16
17     
18     /* the code above is auto generated do not remove the tag below */
19     ###END_AUTOCODE
20     
21     function initDatabase($roo)
22     {
23         
24         static $ar = array(
25             'STANDARD' => 'Standard'  ,
26             'PRODUCT' => 'Standard Product',
27             'NONPRODUCT'=> 'Non Product'
28         );
29         
30         foreach($ar as $k=>$v) {
31             $pc = DB_DataObject::Factory('prodcat');
32             if ($pc->get('prodcat_code', $k)) {
33                 continue;
34             }
35             $pc->setFrom(array(
36                 'prodcat_code' => $k,
37                 'prodcat_descrip' => $v
38             ));
39             $pc->insert();
40         }
41         
42         
43     }
44     
45     function beforeInsert($q,$roo)
46     {
47         $this->checkProdcatCode($roo);
48     }
49     
50     function beforeUpdate($old, $request,$roo)
51     {
52         if($old->prodcat_code != $this->prodcat_code){
53             $this->checkProdcatCode($roo);
54         }
55         
56     }
57     
58     function onInsert($q,$roo)
59     {
60         $this->updateSalesaccnt($q, $roo);
61     }
62     
63     function onUpdate($old, $q,$roo)
64     {
65         $this->updateSalesaccnt($q, $roo);
66     }
67     
68     function toRooSingleArray($au, $q)
69     {
70         $ret = $this->toArray();
71         
72         if(!isset($q['_with_salesaccnt'])){
73             return $ret;
74         }
75         
76         $salesaccnt = DB_DataObject::factory('salesaccnt');
77         $salesaccnt->selectAdd("
78             CASE WHEN ( (salesaccnt_custtype_id<>-1) AND (salesaccnt_prodcat_id<>-1) ) THEN 'A'
79                  WHEN ( (salesaccnt_custtype_id<>-1) AND (salesaccnt_prodcat_id=-1) ) THEN 'B'
80                  WHEN ( (salesaccnt_custtype_id=-1) AND (salesaccnt_prodcat_id<>-1) ) THEN 'C'
81             ELSE 'D'
82             END AS orderby
83         ");
84         $salesaccnt->whereAdd("
85                 (salesaccnt_warehous_id=-1)
86             AND  
87                 ( 
88                         (salesaccnt_prodcat='.*') 
89                         OR
90                         ( 
91                                 (salesaccnt_prodcat_id=-1)
92                                 AND
93                                 (salesaccnt_prodcat <> '')
94                         ) 
95                         OR
96                         ( 
97                                 (salesaccnt_prodcat_id={$ret['prodcat_id']}) 
98                         ) 
99                 )
100             AND  
101                 ( 
102                         (salesaccnt_custtype='.*') 
103                         OR
104                         ( 
105                                 (salesaccnt_custtype_id=-1) 
106                                 AND
107                                 (salesaccnt_custtype<>'') 
108                                 
109                         ) 
110                 )
111         ");
112                                 
113         $salesaccnt->orderBy('orderby,salesaccnt_custtype DESC, salesaccnt_prodcat DESC');
114         $salesaccnt->find(true);
115         
116         $ret['salesaccnt_id'] = $salesaccnt->salesaccnt_id;
117         
118         $accounts = array(
119             'salesaccnt_sales_accnt_id',
120             'salesaccnt_credit_accnt_id',
121             'salesaccnt_cos_accnt_id'
122         );
123         
124         foreach ($accounts as $a){
125             $accnt = DB_DataObject::factory('accnt');
126             if(!$accnt->get($salesaccnt->$a)){
127                 continue;
128             }
129             $ret["{$a}"] = $accnt->pid();
130             $ret["{$a}_name"] = $accnt->accnt_name;
131             $ret["{$a}_descrip"] = $accnt->accnt_descrip;
132         }
133         
134         return $ret;
135     }
136     
137     function checkProdcatCode($roo)
138     {
139         $this->prodcat_code = strtoupper(trim(str_replace(' ', '', $this->prodcat_code)));
140         
141         if(empty($this->prodcat_code)){
142             $roo->jerr('Missing product categroy code');
143         }
144         
145         $prodcat = DB_DataObject::factory('prodcat');
146         if($prodcat->get('prodcat_code', $this->prodcat_code)){
147             $roo->jerr("Product category code already exist! code : {$this->prodcat_code}");
148         }
149         
150         return;
151     }
152     
153     function updateSalesaccnt($q, $roo)
154     {
155         if(empty($q['salesaccnt_sales_accnt_id']) || empty($q['salesaccnt_credit_accnt_id']) || empty($q['salesaccnt_cos_accnt_id'])){
156             $roo->jerr('Missing account setting for this product category');
157         }
158         
159         $salesaccnt = DB_DataObject::factory('salesaccnt');
160         
161         if(!empty($q['salesaccnt_id'])){
162             if(!$salesaccnt->get($q['salesaccnt_id'])){
163                 $roo->jerr("Error occur on getting the salesaccnt! salesaccnt_id : {$q['salesaccnt_id']}");
164             }
165             
166             $old = clone($salesaccnt);
167         }
168         
169         $salesaccnt->setFrom($q);
170         
171         if(!isset($salesaccnt->salesaccnt_prodcat)){
172             $salesaccnt->salesaccnt_prodcat = '[^a-zA-Z0-9_]';
173         }
174         
175         if(!isset($salesaccnt->salesaccnt_prodcat_id)){
176             $salesaccnt->salesaccnt_prodcat_id = $this->pid();
177         }
178         
179         foreach($salesaccnt->defaults() as $k=>$v) {
180             if (!isset($salesaccnt->$k)) {
181                 $salesaccnt->$k = $v;
182             }
183         }
184         
185         empty($salesaccnt->salesaccnt_id) ? $salesaccnt->insert() : $salesaccnt->update($old);
186         
187         return;
188         
189     }
190     
191 }
192