*** empty log message ***
[fa-stable.git] / manufacturing / includes / db / work_orders_db.inc
1 <?php
2
3 //--------------------------------------------------------------------------------------
4
5 function add_work_order($wo_ref, $loc_code, $units_reqd, $stock_id, 
6         $type, $date_, $required_by, $costs, $memo_)
7 {
8         if (!($type == wo_types::advanced()))
9                 return add_work_order_quick($wo_ref, $loc_code, $units_reqd, $stock_id, $type, $date_, $costs, $memo_);
10                  
11         begin_transaction();
12         
13         $date = date2sql($date_);
14         $required = date2sql($required_by);
15         
16         $sql = "INSERT INTO ".TB_PREF."workorders (wo_ref, loc_code, units_reqd, stock_id, 
17                 type, date_, required_by) 
18         VALUES ('$wo_ref', '$loc_code', $units_reqd, '$stock_id', 
19                 $type, '$date', '$required')";
20         db_query($sql, "could not add work order");
21         
22         $woid = db_insert_id();
23         
24         add_comments(systypes::work_order(), $woid, $required_by, $memo_);      
25         
26         add_forms_for_sys_type(systypes::work_order(), $woid);  
27         
28         references::save_last($wo_ref, systypes::work_order());         
29         
30         commit_transaction();   
31         
32         return $woid;   
33 }
34
35 //--------------------------------------------------------------------------------------
36
37 function update_work_order($woid, $loc_code, $units_reqd, $stock_id, 
38                                         $date_, $required_by, $memo_)
39 {
40         begin_transaction();
41                 
42         $date = date2sql($date_);
43         $required = date2sql($required_by);
44                 
45         $sql = "UPDATE ".TB_PREF."workorders SET loc_code='$loc_code', 
46                 units_reqd=$units_reqd, stock_id='$stock_id',
47                 required_by='$required',
48                 date_='$date'
49                 WHERE id = $woid";      
50
51         db_query($sql, "could not update work order");
52         
53         update_comments(systypes::work_order(), $woid, null, $memo_);      
54
55         commit_transaction();                                   
56 }
57
58 function delete_work_order($woid)
59 {
60         begin_transaction();
61                 
62         // delete the work order requirements
63         delete_wo_requirements($woid);
64         
65         // delete the actual work order
66         $sql = "DELETE FROM ".TB_PREF."workorders WHERE id=$woid";
67         db_query($sql,"The work order could not be deleted");
68         
69         delete_comments(systypes::work_order(), $woid);
70         
71         delete_forms_for_systype(systypes::work_order(), $woid);        
72         
73         commit_transaction();           
74 }
75
76 //--------------------------------------------------------------------------------------
77
78 function get_work_order($woid, $allow_null=false)
79 {
80     $sql = "SELECT ".TB_PREF."workorders.*, ".TB_PREF."stock_master.description As StockItemName,
81                 ".TB_PREF."locations.location_name
82                 FROM ".TB_PREF."workorders, ".TB_PREF."stock_master, ".TB_PREF."locations 
83                 WHERE ".TB_PREF."stock_master.stock_id=".TB_PREF."workorders.stock_id 
84                 AND     ".TB_PREF."locations.loc_code=".TB_PREF."workorders.loc_code 
85                 AND ".TB_PREF."workorders.id=$woid
86                 GROUP BY ".TB_PREF."workorders.id";
87                                                 
88         $result = db_query($sql, "The work order issues could not be retrieved");
89         
90         if (!$allow_null && db_num_rows($result) == 0)
91                 display_db_error("Could not find work order $workOrder", $sql);
92         
93         return db_fetch($result);       
94 }
95
96 //--------------------------------------------------------------------------------------
97
98 function work_order_has_productions($woid)
99 {
100         $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_manufacture WHERE workorder_id=$woid";
101         $result = db_query($sql, "query work order for productions");
102     
103         $myrow = db_fetch_row($result);
104         return ($myrow[0] > 0);
105 }
106
107
108 //--------------------------------------------------------------------------------------
109
110 function work_order_has_issues($woid)
111 {
112         $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_issues WHERE workorder_id=$woid";
113         $result = db_query($sql, "query work order for issues");
114     
115         $myrow = db_fetch_row($result);
116         return ($myrow[0] > 0);
117 }
118
119 //--------------------------------------------------------------------------------------
120
121 function work_order_has_payments($woid)
122 {
123     $result = get_bank_trans(null, null, payment_person_types::WorkOrder(), $woid);
124
125     return (db_num_rows($result) != 0);
126 }
127
128 //--------------------------------------------------------------------------------------
129
130 function release_work_order($woid, $releaseDate, $memo_)
131 {
132         begin_transaction();            
133         
134         $myrow = get_work_order($woid); 
135         $stock_id = $myrow["stock_id"];
136                 
137         $date = date2sql($releaseDate);
138                 
139         $sql = "UPDATE ".TB_PREF."workorders SET released_date='$date', 
140                 released=1 WHERE id = $woid";   
141         db_query($sql, "could not release work order");
142         
143         // create Work Order Requirements based on the bom
144         create_wo_requirements($woid, $stock_id);
145         
146         add_comments(systypes::work_order(), $woid, $releaseDate, $memo_);      
147
148         commit_transaction();   
149 }
150
151 //--------------------------------------------------------------------------------------
152
153 function close_work_order($woid)
154 {
155         $sql = "UPDATE ".TB_PREF."workorders SET closed=1 WHERE id = $woid";    
156         db_query($sql, "could not close work order");
157 }
158
159 //--------------------------------------------------------------------------------------
160
161 function work_order_is_closed($woid)
162 {
163         $sql = "SELECT closed FROM ".TB_PREF."workorders WHERE id = $woid";     
164         $result = db_query($sql, "could not query work order");
165         $row = db_fetch_row($result);
166         return ($row[0] > 0);   
167 }
168
169 //--------------------------------------------------------------------------------------
170
171 function work_order_update_finished_quantity($woid, $quantity, $force_close=0)
172 {
173         $sql = "UPDATE ".TB_PREF."workorders SET units_issued = units_issued + $quantity,
174                 closed = ((units_issued >= units_reqd) OR $force_close)
175                 WHERE id = $woid";
176                                 
177         db_query($sql, "The work order issued quantity couldn't be updated");
178 }
179
180 //--------------------------------------------------------------------------------------
181
182 function void_work_order($woid)
183 {
184         $work_order = get_work_order($woid);  
185         
186         if (!($work_order["type"] == wo_types::advanced())) 
187         {
188                 begin_transaction();    
189                 
190                 $sql = "UPDATE ".TB_PREF."workorders SET closed=1,units_issued=0 WHERE id = $woid";
191                 db_query($sql, "The work order couldn't be voided");
192                 
193                 // void all related stock moves
194                 void_stock_move(systypes::work_order(), $woid); 
195         
196                 // void any related gl trans
197                 void_gl_trans(systypes::work_order(), $woid, true);
198                 
199                 // clear the requirements units received
200                 void_wo_requirements($woid);
201                 
202                 commit_transaction();           
203         } 
204         else 
205         {
206                 // void everything inside the work order : issues, productions, payments
207         }
208 }
209
210 //--------------------------------------------------------------------------------------
211
212 ?>