Revision 9d0ebf28
Von Moritz Bunkus vor fast 18 Jahren hinzugefügt
SL/OE.pm | ||
---|---|---|
49 | 49 |
my $query; |
50 | 50 |
my $ordnumber = 'ordnumber'; |
51 | 51 |
my $quotation = '0'; |
52 |
my ($null, $department_id) = split /--/, $form->{department}; |
|
53 | 52 |
|
54 |
my $department = " AND o.department_id = $department_id" if $department_id; |
|
55 | 53 |
my @values; |
54 |
my $where; |
|
55 |
|
|
56 |
my $rate = ($form->{vc} eq 'customer') ? 'buy' : 'sell'; |
|
57 |
|
|
58 |
if ($form->{type} =~ /_quotation$/) { |
|
59 |
$quotation = '1'; |
|
60 |
$ordnumber = 'quonumber'; |
|
61 |
} |
|
62 |
|
|
63 |
my $vc = $form->{vc} eq "customer" ? "customer" : "vendor"; |
|
64 |
|
|
65 |
$query = |
|
66 |
qq|SELECT o.id, o.ordnumber, o.transdate, o.reqdate, | . |
|
67 |
qq| o.amount, ct.name, o.netamount, o.${vc}_id, o.globalproject_id, | . |
|
68 |
qq| o.closed, o.delivered, o.quonumber, o.shippingpoint, o.shipvia, | . |
|
69 |
qq| ex.$rate AS exchangerate, | . |
|
70 |
qq| pr.projectnumber AS globalprojectnumber, | . |
|
71 |
qq| e.name AS employee | . |
|
72 |
qq|FROM oe o | . |
|
73 |
qq|JOIN $vc ct ON (o.${vc}_id = ct.id) | . |
|
74 |
qq|LEFT JOIN employee e ON (o.employee_id = e.id) | . |
|
75 |
qq|LEFT JOIN exchangerate ex ON (ex.curr = o.curr | . |
|
76 |
qq| AND ex.transdate = o.transdate) | . |
|
77 |
qq|LEFT JOIN project pr ON (o.globalproject_id = pr.id) | . |
|
78 |
qq|WHERE (o.quotation = ?) |; |
|
79 |
push(@values, $quotation); |
|
80 |
|
|
81 |
my ($null, $department_id) = split /--/, $form->{department}; |
|
82 |
if ($department_id) { |
|
83 |
$query .= qq| AND o.department_id = ?|; |
|
84 |
push(@values, $department_id); |
|
85 |
} |
|
56 | 86 |
|
57 | 87 |
if ($form->{"project_id"}) { |
58 |
$department .=
|
|
88 |
$query .=
|
|
59 | 89 |
qq|AND ((globalproject_id = ?) OR EXISTS | . |
60 | 90 |
qq| (SELECT * FROM orderitems oi | . |
61 | 91 |
qq| WHERE oi.project_id = ? AND oi.trans_id = o.id))|; |
62 | 92 |
push(@values, $form->{"project_id"}, $form->{"project_id"}); |
63 | 93 |
} |
64 | 94 |
|
65 |
my $rate = ($form->{vc} eq 'customer') ? 'buy' : 'sell'; |
|
95 |
if ($form->{"${vc}_id"}) { |
|
96 |
$query .= " AND o.${vc}_id = ?"; |
|
97 |
push(@values, $form->{"${vc}_id"}); |
|
66 | 98 |
|
67 |
if ($form->{type} =~ /_quotation$/) {
|
|
68 |
$quotation = '1';
|
|
69 |
$ordnumber = 'quonumber';
|
|
99 |
} elsif ($form->{$vc}) {
|
|
100 |
$query .= " AND ct.name ILIKE ?";
|
|
101 |
push(@values, '%' . $form->{$vc} . '%');
|
|
70 | 102 |
} |
71 | 103 |
|
72 |
my $number = $form->like(lc $form->{$ordnumber}); |
|
73 |
my $name = $form->like(lc $form->{ $form->{vc} }); |
|
74 |
|
|
75 |
my $query = qq|SELECT o.id, o.ordnumber, o.transdate, o.reqdate, |
|
76 |
o.amount, ct.name, o.netamount, o.$form->{vc}_id, |
|
77 |
o.globalproject_id, pr.projectnumber AS globalprojectnumber, |
|
78 |
ex.$rate AS exchangerate, |
|
79 |
o.closed, o.delivered, o.quonumber, o.shippingpoint, o.shipvia, |
|
80 |
e.name AS employee |
|
81 |
FROM oe o |
|
82 |
JOIN $form->{vc} ct ON (o.$form->{vc}_id = ct.id) |
|
83 |
LEFT JOIN employee e ON (o.employee_id = e.id) |
|
84 |
LEFT JOIN exchangerate ex ON (ex.curr = o.curr |
|
85 |
AND ex.transdate = o.transdate) |
|
86 |
LEFT JOIN project pr ON o.globalproject_id = pr.id |
|
87 |
WHERE o.quotation = '$quotation' |
|
88 |
$department|; |
|
89 |
|
|
90 |
if ($form->{"$form->{vc}_id"}) { |
|
91 |
$query .= qq| AND o.$form->{vc}_id = $form->{"$form->{vc}_id"}|; |
|
92 |
} else { |
|
93 |
if ($form->{ $form->{vc} }) { |
|
94 |
$query .= " AND lower(ct.name) LIKE '$name'"; |
|
95 |
} |
|
96 |
} |
|
97 | 104 |
if (!$form->{open} && !$form->{closed}) { |
98 | 105 |
$query .= " AND o.id = 0"; |
99 | 106 |
} elsif (!($form->{open} && $form->{closed})) { |
... | ... | |
106 | 113 |
" AND o.delivered " : " AND NOT o.delivered"; |
107 | 114 |
} |
108 | 115 |
|
109 |
my $sortorder = join ', ', |
|
110 |
("o.id", $form->sort_columns(transdate, $ordnumber, name)); |
|
111 |
$sortorder = $form->{sort} if $form->{sort}; |
|
116 |
if ($form->{$ordnumber}) { |
|
117 |
$query .= qq| AND $ordnumber ILIKE ?|; |
|
118 |
push(@values, '%' . $form->{$ordnumber} . '%'); |
|
119 |
} |
|
120 |
|
|
121 |
if($form->{transdatefrom}) { |
|
122 |
$query .= qq| AND o.transdate >= ?|; |
|
123 |
push(@values, conv_date($form->{transdatefrom})); |
|
124 |
} |
|
112 | 125 |
|
113 |
$query .= " AND lower($ordnumber) LIKE '$number'" if $form->{$ordnumber}; |
|
114 |
$query .= " AND o.transdate >= '$form->{transdatefrom}'" |
|
115 |
if $form->{transdatefrom}; |
|
116 |
$query .= " AND o.transdate <= '$form->{transdateto}'" |
|
117 |
if $form->{transdateto}; |
|
118 |
$query .= " ORDER by $sortorder"; |
|
126 |
if($form->{transdateto}) { |
|
127 |
$query .= qq| AND o.transdate <= ?|; |
|
128 |
push(@values, conv_date($form->{transdateto})); |
|
129 |
} |
|
130 |
|
|
131 |
my $sortorder = join(', ', ("o.id", $form->sort_columns("transdate", $ordnumber, "name"))); |
|
132 |
my %allowed_sort_columns = |
|
133 |
("transdate" => "o.transdate", |
|
134 |
"reqdate" => "o.reqdate", |
|
135 |
"id" => "o.id", |
|
136 |
"ordnumber" => "o.ordnumber", |
|
137 |
"quonumber" => "o.quonumber", |
|
138 |
"name" => "ct.name", |
|
139 |
"employee" => "e.name", |
|
140 |
"shipvia" => "o.shipvia"); |
|
141 |
if ($form->{sort} && grep($form->{sort}, keys(%allowed_sort_columns))) { |
|
142 |
$sortorder = $allowed_sort_columns{$form->{sort}}; |
|
143 |
} |
|
144 |
$query .= qq| ORDER by | . $sortorder; |
|
119 | 145 |
|
120 | 146 |
my $sth = $dbh->prepare($query); |
121 | 147 |
$sth->execute(@values) || |
122 | 148 |
$form->dberror($query . " (" . join(", ", @values) . ")"); |
123 | 149 |
|
124 | 150 |
my %id = (); |
151 |
$form->{OE} = []; |
|
125 | 152 |
while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { |
126 | 153 |
$ref->{exchangerate} = 1 unless $ref->{exchangerate}; |
127 | 154 |
push @{ $form->{OE} }, $ref if $ref->{id} != $id{ $ref->{id} }; |
... | ... | |
142 | 169 |
# connect to database, turn off autocommit |
143 | 170 |
my $dbh = $form->dbconnect_noauto($myconfig); |
144 | 171 |
|
145 |
my ($query, $sth, $null); |
|
172 |
my ($query, @values, $sth, $null);
|
|
146 | 173 |
my $exchangerate = 0; |
147 | 174 |
|
148 |
my $service_units = AM->retrieve_units($myconfig,$form,"service"); |
|
149 |
my $part_units = AM->retrieve_units($myconfig,$form,"dimension"); |
|
150 |
$form->{service_units} =$service_units; |
|
151 |
$form->{part_units} =$part_units; |
|
175 |
my $all_units = AM->retrieve_units($myconfig, $form); |
|
176 |
$form->{all_units} = $all_units; |
|
152 | 177 |
|
153 | 178 |
($null, $form->{employee_id}) = split /--/, $form->{employee}; |
154 | 179 |
unless ($form->{employee_id}) { |
155 | 180 |
$form->get_employee($dbh); |
156 | 181 |
} |
157 | 182 |
|
158 |
$form->{payment_id} *= 1; |
|
159 |
$form->{language_id} *= 1; |
|
160 |
$form->{shipto_id} *= 1; |
|
161 |
$form->{delivery_customer_id} *= 1; |
|
162 |
$form->{delivery_vendor_id} *= 1; |
|
163 |
|
|
164 | 183 |
my $ml = ($form->{type} eq 'sales_order') ? 1 : -1; |
165 | 184 |
|
166 | 185 |
if ($form->{id}) { |
167 | 186 |
|
168 | 187 |
&adj_onhand($dbh, $form, $ml) if $form->{type} =~ /_order$/; |
169 | 188 |
|
170 |
$query = qq|DELETE FROM orderitems |
|
171 |
WHERE trans_id = $form->{id}|; |
|
172 |
$dbh->do($query) || $form->dberror($query); |
|
189 |
$query = qq|DELETE FROM orderitems WHERE trans_id = ?|; |
|
190 |
do_query($form, $dbh, $query, $form->{id}); |
|
173 | 191 |
|
174 |
$query = qq|DELETE FROM shipto |
|
175 |
WHERE trans_id = $form->{id} AND module = 'OE'|;
|
|
176 |
$dbh->do($query) || $form->dberror($query);
|
|
192 |
$query = qq|DELETE FROM shipto | .
|
|
193 |
qq|WHERE trans_id = ? AND module = 'OE'|;
|
|
194 |
do_query($form, $dbh, $query, $form->{id});
|
|
177 | 195 |
|
178 | 196 |
} else { |
179 | 197 |
|
180 |
my $uid = rand() . time; |
|
181 |
|
|
182 |
$uid .= $form->{login}; |
|
183 |
|
|
184 |
$uid = substr($uid, 2, 75); |
|
185 |
|
|
186 |
$query = qq|INSERT INTO oe (ordnumber, employee_id) |
|
187 |
VALUES ('$uid', $form->{employee_id})|; |
|
188 |
$dbh->do($query) || $form->dberror($query); |
|
189 |
|
|
190 |
$query = qq|SELECT o.id FROM oe o |
|
191 |
WHERE o.ordnumber = '$uid'|; |
|
192 |
$sth = $dbh->prepare($query); |
|
193 |
$sth->execute || $form->dberror($query); |
|
198 |
$query = qq|SELECT nextval('id')|; |
|
199 |
($form->{id}) = selectrow_query($form, $dbh, $query); |
|
194 | 200 |
|
195 |
($form->{id}) = $sth->fetchrow_array;
|
|
196 |
$sth->finish;
|
|
201 |
$query = qq|INSERT INTO oe (id, ordnumber, employee_id) VALUES (?, '', ?)|;
|
|
202 |
do_query($form, $dbh, $query, $form->{id}, $form->{employee_id});
|
|
197 | 203 |
} |
198 | 204 |
|
199 |
map { $form->{$_} =~ s/\'/\'\'/g } |
|
200 |
qw(ordnumber quonumber shippingpoint shipvia notes intnotes message); |
|
201 |
|
|
202 | 205 |
my $amount; |
203 | 206 |
my $linetotal; |
204 | 207 |
my $discount; |
... | ... | |
214 | 217 |
|
215 | 218 |
for my $i (1 .. $form->{rowcount}) { |
216 | 219 |
|
217 |
map { |
|
218 |
$form->{"${_}_$i"} = |
|
219 |
$form->parse_amount($myconfig, $form->{"${_}_$i"}) |
|
220 |
} qw(qty ship); |
|
220 |
map({ $form->{"${_}_$i"} = |
|
221 |
$form->parse_amount($myconfig, $form->{"${_}_$i"}) } qw(qty ship)); |
|
221 | 222 |
|
222 | 223 |
if ($form->{"id_$i"}) { |
223 | 224 |
|
224 | 225 |
# get item baseunit |
225 |
$query = qq|SELECT p.unit |
|
226 |
FROM parts p |
|
227 |
WHERE p.id = $form->{"id_$i"}|; |
|
228 |
$sth = $dbh->prepare($query); |
|
229 |
$sth->execute || $form->dberror($query); |
|
230 |
|
|
231 |
my ($item_unit) = $sth->fetchrow_array(); |
|
232 |
$sth->finish; |
|
233 |
|
|
234 |
if ($form->{"inventory_accno_$i"}) { |
|
235 |
if (defined($part_units->{$item_unit}->{factor}) && $part_units->{$item_unit}->{factor} ne '' && $part_units->{$item_unit}->{factor} ne '0') { |
|
236 |
$basefactor = $part_units->{$form->{"unit_$i"}}->{factor} / $part_units->{$item_unit}->{factor}; |
|
237 |
} else { |
|
238 |
$basefactor = 1; |
|
239 |
} |
|
240 |
$baseqty = $form->{"qty_$i"} * $basefactor; |
|
241 |
} else { |
|
242 |
if (defined($service_units->{$item_unit}->{factor}) && $service_units->{$item_unit}->{factor} ne '' && $service_units->{$item_unit}->{factor} ne '0') { |
|
243 |
$basefactor = $service_units->{$form->{"unit_$i"}}->{factor} / $service_units->{$item_unit}->{factor}; |
|
244 |
} else { |
|
245 |
$basefactor = 1; |
|
246 |
} |
|
247 |
$baseqty = $form->{"qty_$i"} * $basefactor; |
|
226 |
$query = qq|SELECT unit FROM parts WHERE id = ?|; |
|
227 |
my ($item_unit) = selectrow_query($form, $dbh, $query, $form->{"id_$i"}); |
|
228 |
|
|
229 |
my $basefactor = 1; |
|
230 |
if (defined($all_units->{$item_unit}->{factor}) && |
|
231 |
(($all_units->{$item_unit}->{factor} * 1) != 0)) { |
|
232 |
$basefactor = $all_units->{$form->{"unit_$i"}}->{factor} / |
|
233 |
$all_units->{$item_unit}->{factor}; |
|
248 | 234 |
} |
249 |
|
|
250 |
map { $form->{"${_}_$i"} =~ s/\'/\'\'/g } |
|
251 |
qw(partnumber description unit); |
|
235 |
my $baseqty = $form->{"qty_$i"} * $basefactor; |
|
252 | 236 |
|
253 | 237 |
# set values to 0 if nothing entered |
254 | 238 |
$form->{"discount_$i"} = |
... | ... | |
259 | 243 |
$fxsellprice = $form->{"sellprice_$i"}; |
260 | 244 |
|
261 | 245 |
my ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); |
262 |
$dec = length $dec;
|
|
246 |
$dec = length($dec);
|
|
263 | 247 |
my $decimalplaces = ($dec > 2) ? $dec : 2; |
264 | 248 |
|
265 | 249 |
$discount = |
... | ... | |
275 | 259 |
$linetotal = |
276 | 260 |
$form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"}, 2); |
277 | 261 |
|
278 |
@taxaccounts = split / /, $form->{"taxaccounts_$i"};
|
|
262 |
@taxaccounts = split(/ /, $form->{"taxaccounts_$i"});
|
|
279 | 263 |
$taxrate = 0; |
280 | 264 |
$taxdiff = 0; |
281 | 265 |
|
... | ... | |
324 | 308 |
$netamount += $form->{"sellprice_$i"} * $form->{"qty_$i"}; |
325 | 309 |
|
326 | 310 |
$reqdate = |
327 |
($form->{"reqdate_$i"}) ? qq|'$form->{"reqdate_$i"}'| : "NULL";
|
|
311 |
($form->{"reqdate_$i"}) ? $form->{"reqdate_$i"} : undef;
|
|
328 | 312 |
|
329 | 313 |
# get pricegroup_id and save ist |
330 |
($null, my $pricegroup_id) = split /--/, $form->{"sellprice_pg_$i"};
|
|
314 |
($null, my $pricegroup_id) = split(/--/, $form->{"sellprice_pg_$i"});
|
|
331 | 315 |
$pricegroup_id *= 1; |
332 | 316 |
$subtotal = $form->{"subtotal_$i"} * 1; |
333 | 317 |
|
334 | 318 |
# save detail record in orderitems table |
319 |
@values = (); |
|
335 | 320 |
$query = qq|INSERT INTO orderitems (|; |
336 |
$query .= "id, " if $form->{"orderitems_id_$i"}; |
|
337 |
$query .= qq|trans_id, parts_id, description, longdescription, qty, base_qty, sellprice, discount, |
|
338 |
unit, reqdate, project_id, serialnumber, ship, pricegroup_id, |
|
339 |
ordnumber, transdate, cusordnumber, subtotal) |
|
340 |
VALUES (|; |
|
341 |
$query .= qq|$form->{"orderitems_id_$i"},| |
|
342 |
if $form->{"orderitems_id_$i"}; |
|
343 |
$query .= qq|$form->{id}, $form->{"id_$i"}, |
|
344 |
'$form->{"description_$i"}', '$form->{"longdescription_$i"}', $form->{"qty_$i"}, $baseqty, |
|
345 |
$fxsellprice, $form->{"discount_$i"}, |
|
346 |
'$form->{"unit_$i"}', $reqdate, | . conv_i($form->{"project_id_$i"}, 'NULL') . qq|, |
|
347 |
'$form->{"serialnumber_$i"}', $form->{"ship_$i"}, '$pricegroup_id', |
|
348 |
'$form->{"ordnumber_$i"}', '$form->{"transdate_$i"}', '$form->{"cusordnumber_$i"}', '$subtotal')|; |
|
349 |
$dbh->do($query) || $form->dberror($query); |
|
321 |
if ($form->{"orderitems_id_$i"}) { |
|
322 |
$query .= "id, "; |
|
323 |
} |
|
324 |
$query .= qq|trans_id, parts_id, description, longdescription, qty, base_qty, | . |
|
325 |
qq|sellprice, discount, unit, reqdate, project_id, serialnumber, ship, | . |
|
326 |
qq|pricegroup_id, ordnumber, transdate, cusordnumber, subtotal) | . |
|
327 |
qq|VALUES (|; |
|
328 |
if($form->{"orderitems_id_$i"}) { |
|
329 |
$query .= qq|?,|; |
|
330 |
push(@values, $form->{"orderitems_id_$i"}); |
|
331 |
} |
|
332 |
$query .= qq|?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|; |
|
333 |
push(@values, |
|
334 |
conv_i($form->{id}), conv_i($form->{"id_$i"}), |
|
335 |
$form->{"description_$i"}, $form->{"longdescription_$i"}, |
|
336 |
$form->{"qty_$i"}, $baseqty, |
|
337 |
$fxsellprice, $form->{"discount_$i"}, |
|
338 |
$form->{"unit_$i"}, conv_date($reqdate), conv_i($form->{"project_id_$i"}), |
|
339 |
$form->{"serialnumber_$i"}, $form->{"ship_$i"}, conv_i($pricegroup_id), |
|
340 |
$form->{"ordnumber_$i"}, conv_date($form->{"transdate_$i"}), |
|
341 |
$form->{"cusordnumber_$i"}, $subtotal); |
|
342 |
do_query($form, $dbh, $query, @values); |
|
350 | 343 |
|
351 | 344 |
$form->{"sellprice_$i"} = $fxsellprice; |
352 | 345 |
$form->{"discount_$i"} *= 100; |
353 | 346 |
} |
354 | 347 |
} |
355 | 348 |
|
356 |
# set values which could be empty |
|
357 |
map { $form->{$_} *= 1 } |
|
358 |
qw(vendor_id customer_id taxincluded closed quotation); |
|
359 |
|
|
360 |
$reqdate = ($form->{reqdate}) ? qq|'$form->{reqdate}'| : "NULL"; |
|
349 |
$reqdate = ($form->{reqdate}) ? $form->{reqdate} : undef; |
|
361 | 350 |
|
362 | 351 |
# add up the tax |
363 | 352 |
my $tax = 0; |
... | ... | |
409 | 398 |
Message: $form->{message}\r| if $form->{message}; |
410 | 399 |
|
411 | 400 |
($null, $form->{department_id}) = split(/--/, $form->{department}); |
412 |
$form->{department_id} *= 1; |
|
413 |
$form->{payment_id} *= 1; |
|
414 |
$form->{language_id} *= 1; |
|
415 |
$form->{taxzone_id} *= 1; |
|
416 |
$form->{proforma} *= 1; |
|
417 |
|
|
418 |
|
|
419 | 401 |
|
420 | 402 |
# save OE record |
421 |
$query = qq|UPDATE oe set |
|
422 |
ordnumber = '$form->{ordnumber}', |
|
423 |
quonumber = '$form->{quonumber}', |
|
424 |
cusordnumber = '$form->{cusordnumber}', |
|
425 |
transdate = '$form->{transdate}', |
|
426 |
vendor_id = $form->{vendor_id}, |
|
427 |
customer_id = $form->{customer_id}, |
|
428 |
amount = $amount, |
|
429 |
netamount = $netamount, |
|
430 |
reqdate = $reqdate, |
|
431 |
taxincluded = '$form->{taxincluded}', |
|
432 |
shippingpoint = '$form->{shippingpoint}', |
|
433 |
shipvia = '$form->{shipvia}', |
|
434 |
notes = '$form->{notes}', |
|
435 |
intnotes = '$form->{intnotes}', |
|
436 |
curr = '$form->{currency}', |
|
437 |
closed = '$form->{closed}', |
|
438 |
delivered = '| . ($form->{delivered} ? "t" : "f") . qq|', |
|
439 |
proforma = '$form->{proforma}', |
|
440 |
quotation = '$quotation', |
|
441 |
department_id = $form->{department_id}, |
|
442 |
language_id = $form->{language_id}, |
|
443 |
taxzone_id = $form->{taxzone_id}, |
|
444 |
shipto_id = $form->{shipto_id}, |
|
445 |
payment_id = $form->{payment_id}, |
|
446 |
delivery_vendor_id = $form->{delivery_vendor_id}, |
|
447 |
delivery_customer_id = $form->{delivery_customer_id}, |
|
448 |
globalproject_id = | . conv_i($form->{"globalproject_id"}, 'NULL') . qq|, |
|
449 |
employee_id = $form->{employee_id}, |
|
450 |
salesman_id = | . conv_i($form->{salesman_id}, 'NULL') . qq|, |
|
451 |
cp_id = | . conv_i($form->{cp_id}, 'NULL') . qq| |
|
452 |
WHERE id = $form->{id}|; |
|
453 |
$dbh->do($query) || $form->dberror($query); |
|
403 |
$query = |
|
404 |
qq|UPDATE oe set | . |
|
405 |
qq|ordnumber = ?, quonumber = ?, cusordnumber = ?, transdate = ?, vendor_id = ?, | . |
|
406 |
qq|customer_id = ?, amount = ?, netamount = ?, reqdate = ?, taxincluded = ?, | . |
|
407 |
qq|shippingpoint = ?, shipvia = ?, notes = ?, intnotes = ?, curr = ?, closed = ?, | . |
|
408 |
qq|delivered = ?, proforma = ?, quotation = ?, department_id = ?, language_id = ?, | . |
|
409 |
qq|taxzone_id = ?, shipto_id = ?, payment_id = ?, delivery_vendor_id = ?, delivery_customer_id = ?, | . |
|
410 |
qq|globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ? | . |
|
411 |
qq|WHERE id = ?|; |
|
412 |
|
|
413 |
@values = ($form->{ordnumber}, $form->{quonumber}, |
|
414 |
$form->{cusordnumber}, conv_date($form->{transdate}), |
|
415 |
conv_i($form->{vendor_id}), conv_i($form->{customer_id}), |
|
416 |
$amount, $netamount, conv_date($reqdate), |
|
417 |
$form->{taxincluded} ? 't' : 'f', $form->{shippingpoint}, |
|
418 |
$form->{shipvia}, $form->{notes}, $form->{intnotes}, |
|
419 |
$form->{currency}, $form->{closed} ? 't' : 'f', |
|
420 |
$form->{delivered} ? "t" : "f", $form->{proforma} ? 't' : 'f', |
|
421 |
$quotation, conv_i($form->{department_id}), |
|
422 |
conv_i($form->{language_id}), conv_i($form->{taxzone_id}), |
|
423 |
conv_i($form->{shipto_id}), conv_i($form->{payment_id}), |
|
424 |
conv_i($form->{delivery_vendor_id}), |
|
425 |
conv_i($form->{delivery_customer_id}), |
|
426 |
conv_i($form->{globalproject_id}), conv_i($form->{employee_id}), |
|
427 |
conv_i($form->{salesman_id}), conv_i($form->{cp_id}), |
|
428 |
conv_i($form->{id})); |
|
429 |
do_query($form, $dbh, $query, @values); |
|
454 | 430 |
|
455 | 431 |
$form->{ordtotal} = $amount; |
456 | 432 |
|
... | ... | |
508 | 484 |
(1 .. $form->{rowcount}); |
509 | 485 |
|
510 | 486 |
my $dbh = $form->dbconnect($myconfig); |
511 |
$query = qq|UPDATE oe SET |
|
512 |
closed = TRUE
|
|
513 |
WHERE ordnumber IN (|
|
|
487 |
$query = qq|UPDATE oe SET | .
|
|
488 |
qq|closed = TRUE | .
|
|
489 |
qq|WHERE ordnumber IN (|
|
|
514 | 490 |
. join(', ', map { $dbh->quote($_) } @ids) . qq|)|; |
515 | 491 |
$dbh->do($query) || $form->dberror($query); |
516 | 492 |
$dbh->disconnect; |
... | ... | |
542 | 518 |
my $dbh = $form->dbconnect_noauto($myconfig); |
543 | 519 |
|
544 | 520 |
# delete spool files |
545 |
my $query = qq|SELECT s.spoolfile FROM status s |
|
546 |
WHERE s.trans_id = $form->{id}|; |
|
521 |
my $query = qq|SELECT s.spoolfile FROM status s | . |
|
522 |
qq|WHERE s.trans_id = ?|; |
|
523 |
my @values = (conv_i($form->{id})); |
|
547 | 524 |
$sth = $dbh->prepare($query); |
548 |
$sth->execute || $self->dberror($query); |
|
525 |
$sth->execute(@values) || $self->dberror($query);
|
|
549 | 526 |
|
550 | 527 |
my $spoolfile; |
551 | 528 |
my @spoolfiles = (); |
... | ... | |
555 | 532 |
} |
556 | 533 |
$sth->finish; |
557 | 534 |
|
558 |
$query = qq|SELECT o.parts_id, o.ship FROM orderitems o |
|
559 |
WHERE o.trans_id = $form->{id}|; |
|
535 |
$query = qq|SELECT o.parts_id, o.ship FROM orderitems o | . |
|
536 |
qq|WHERE o.trans_id = ?|; |
|
537 |
@values = (conv_i($form->{id})); |
|
560 | 538 |
$sth = $dbh->prepare($query); |
561 |
$sth->execute || $self->dberror($query); |
|
539 |
$sth->execute(@values) || $self->dberror($query);
|
|
562 | 540 |
|
563 | 541 |
while (my ($id, $ship) = $sth->fetchrow_array) { |
564 | 542 |
$form->update_balance($dbh, "parts", "onhand", qq|id = $id|, $ship * -1); |
565 | 543 |
} |
566 | 544 |
$sth->finish; |
567 | 545 |
|
546 |
# delete-values |
|
547 |
@values = (conv_i($form->{id})); |
|
548 |
|
|
568 | 549 |
# delete inventory |
569 |
$query = qq|DELETE FROM inventory |
|
570 |
WHERE oe_id = $form->{id}|;
|
|
571 |
$dbh->do($query) || $form->dberror($query);
|
|
550 |
$query = qq|DELETE FROM inventory | .
|
|
551 |
qq|WHERE oe_id = ?|;
|
|
552 |
do_query($form, $dbh, $query, @values);
|
|
572 | 553 |
|
573 | 554 |
# delete status entries |
574 |
$query = qq|DELETE FROM status |
|
575 |
WHERE trans_id = $form->{id}|;
|
|
576 |
$dbh->do($query) || $form->dberror($query);
|
|
555 |
$query = qq|DELETE FROM status | .
|
|
556 |
qq|WHERE trans_id = ?|;
|
|
557 |
do_query($form, $dbh, $query, @values);
|
|
577 | 558 |
|
578 | 559 |
# delete OE record |
579 |
$query = qq|DELETE FROM oe |
|
580 |
WHERE id = $form->{id}|;
|
|
581 |
$dbh->do($query) || $form->dberror($query);
|
|
560 |
$query = qq|DELETE FROM oe | .
|
|
561 |
qq|WHERE id = ?|;
|
|
562 |
do_query($form, $dbh, $query, @values);
|
|
582 | 563 |
|
583 | 564 |
# delete individual entries |
584 |
$query = qq|DELETE FROM orderitems |
|
585 |
WHERE trans_id = $form->{id}|;
|
|
586 |
$dbh->do($query) || $form->dberror($query);
|
|
565 |
$query = qq|DELETE FROM orderitems | .
|
|
566 |
qq|WHERE trans_id = ?|;
|
|
567 |
do_query($form, $dbh, $query, @values);
|
|
587 | 568 |
|
588 |
$query = qq|DELETE FROM shipto |
|
589 |
WHERE trans_id = $form->{id} AND module = 'OE'|;
|
|
590 |
$dbh->do($query) || $form->dberror($query);
|
|
569 |
$query = qq|DELETE FROM shipto | .
|
|
570 |
qq|WHERE trans_id = ? AND module = 'OE'|;
|
|
571 |
do_query($form, $dbh, $query, @values);
|
|
591 | 572 |
|
592 | 573 |
my $rc = $dbh->commit; |
593 | 574 |
$dbh->disconnect; |
... | ... | |
611 | 592 |
# connect to database |
612 | 593 |
my $dbh = $form->dbconnect_noauto($myconfig); |
613 | 594 |
|
614 |
my $query, @ids;
|
|
595 |
my ($query, @values, @ids);
|
|
615 | 596 |
|
616 | 597 |
# translate the ids (given by id_# and trans_id_#) into one array of ids, so we can join them later |
617 | 598 |
map { |
618 | 599 |
push @ids, $form->{"trans_id_$_"} |
619 |
if ($form->{"id_$_"} and $form->{"trans_id_$_"}) |
|
600 |
if ($form->{"multi_id_$_"} and $form->{"trans_id_$_"})
|
|
620 | 601 |
} (1 .. $form->{"rowcount"}); |
621 | 602 |
|
622 | 603 |
# if called in multi id mode, and still only got one id, switch back to single id |
... | ... | |
628 | 609 |
if ($form->{id}) { |
629 | 610 |
|
630 | 611 |
# get default accounts and last order number |
631 |
$query = qq|SELECT (SELECT c.accno FROM chart c |
|
632 |
WHERE d.inventory_accno_id = c.id) AS inventory_accno, |
|
633 |
(SELECT c.accno FROM chart c |
|
634 |
WHERE d.income_accno_id = c.id) AS income_accno, |
|
635 |
(SELECT c.accno FROM chart c |
|
636 |
WHERE d.expense_accno_id = c.id) AS expense_accno, |
|
637 |
(SELECT c.accno FROM chart c |
|
638 |
WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, |
|
639 |
(SELECT c.accno FROM chart c |
|
640 |
WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, |
|
641 |
d.curr AS currencies |
|
642 |
FROM defaults d|; |
|
612 |
$query = |
|
613 |
qq|SELECT (SELECT c.accno FROM chart c | . |
|
614 |
qq| WHERE d.inventory_accno_id = c.id) AS inventory_accno, | . |
|
615 |
qq| (SELECT c.accno FROM chart c | . |
|
616 |
qq| WHERE d.income_accno_id = c.id) AS income_accno, | . |
|
617 |
qq| (SELECT c.accno FROM chart c | . |
|
618 |
qq| WHERE d.expense_accno_id = c.id) AS expense_accno, | . |
|
619 |
qq| (SELECT c.accno FROM chart c | . |
|
620 |
qq| WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, | . |
|
621 |
qq| (SELECT c.accno FROM chart c | . |
|
622 |
qq| WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, | . |
|
623 |
qq|d.curr AS currencies | . |
|
624 |
qq|FROM defaults d|; |
|
643 | 625 |
} else { |
644 |
$query = qq|SELECT (SELECT c.accno FROM chart c |
|
645 |
WHERE d.inventory_accno_id = c.id) AS inventory_accno, |
|
646 |
(SELECT c.accno FROM chart c |
|
647 |
WHERE d.income_accno_id = c.id) AS income_accno, |
|
648 |
(SELECT c.accno FROM chart c |
|
649 |
WHERE d.expense_accno_id = c.id) AS expense_accno, |
|
650 |
(SELECT c.accno FROM chart c |
|
651 |
WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, |
|
652 |
(SELECT c.accno FROM chart c |
|
653 |
WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, |
|
654 |
d.curr AS currencies, |
|
655 |
current_date AS transdate, current_date AS reqdate |
|
656 |
FROM defaults d|; |
|
626 |
$query = |
|
627 |
qq|SELECT (SELECT c.accno FROM chart c | . |
|
628 |
qq| WHERE d.inventory_accno_id = c.id) AS inventory_accno, | . |
|
629 |
qq| (SELECT c.accno FROM chart c | . |
|
630 |
qq| WHERE d.income_accno_id = c.id) AS income_accno, | . |
|
631 |
qq| (SELECT c.accno FROM chart c | . |
|
632 |
qq| WHERE d.expense_accno_id = c.id) AS expense_accno, | . |
|
633 |
qq| (SELECT c.accno FROM chart c | . |
|
634 |
qq| WHERE d.fxgain_accno_id = c.id) AS fxgain_accno, | . |
|
635 |
qq| (SELECT c.accno FROM chart c | . |
|
636 |
qq| WHERE d.fxloss_accno_id = c.id) AS fxloss_accno, | . |
|
637 |
qq|d.curr AS currencies, | . |
|
638 |
qq|current_date AS transdate, current_date AS reqdate | . |
|
639 |
qq|FROM defaults d|; |
|
657 | 640 |
} |
658 | 641 |
my $sth = $dbh->prepare($query); |
659 | 642 |
$sth->execute || $form->dberror($query); |
... | ... | |
662 | 645 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
663 | 646 |
$sth->finish; |
664 | 647 |
|
665 |
($form->{currency}) = split /:/, $form->{currencies};
|
|
648 |
($form->{currency}) = split(/:/, $form->{currencies});
|
|
666 | 649 |
|
667 | 650 |
# set reqdate if this is an invoice->order conversion. If someone knows a better check to ensure |
668 | 651 |
# we come from invoices, feel free. |
... | ... | |
670 | 653 |
if ( $form->{deliverydate} |
671 | 654 |
and $form->{callback} =~ /action=ar_transactions/); |
672 | 655 |
|
656 |
my $vc = $form->{vc} eq "customer" ? "customer" : "vendor"; |
|
657 |
|
|
673 | 658 |
if ($form->{id} or @ids) { |
674 | 659 |
|
675 | 660 |
# retrieve order for single id |
676 | 661 |
# NOTE: this query is intended to fetch all information only ONCE. |
677 | 662 |
# so if any of these infos is important (or even different) for any item, |
678 | 663 |
# it will be killed out and then has to be fetched from the item scope query further down |
679 |
$query = qq|SELECT o.cp_id, o.ordnumber, o.transdate, o.reqdate, |
|
680 |
o.taxincluded, o.shippingpoint, o.shipvia, o.notes, o.intnotes, |
|
681 |
o.curr AS currency, e.name AS employee, o.employee_id, o.salesman_id, |
|
682 |
o.$form->{vc}_id, cv.name AS $form->{vc}, o.amount AS invtotal, |
|
683 |
o.closed, o.reqdate, o.quonumber, o.department_id, o.cusordnumber, |
|
684 |
d.description AS department, o.payment_id, o.language_id, o.taxzone_id, |
|
685 |
o.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id, |
|
686 |
o.globalproject_id, |
|
687 |
o.delivered |
|
688 |
FROM oe o |
|
689 |
JOIN $form->{vc} cv ON (o.$form->{vc}_id = cv.id) |
|
690 |
LEFT JOIN employee e ON (o.employee_id = e.id) |
|
691 |
LEFT JOIN department d ON (o.department_id = d.id) |
|
692 |
| |
|
693 |
. ($form->{id} |
|
694 |
? qq|WHERE o.id = $form->{id}| |
|
695 |
: qq|WHERE o.id IN (| . join(', ', @ids) . qq|)|); |
|
696 |
|
|
697 |
#$main::lxdebug->message(0, $query); |
|
698 |
|
|
699 |
$sth = $dbh->prepare($query); |
|
700 |
$sth->execute || $form->dberror($query); |
|
664 |
$query = |
|
665 |
qq|SELECT o.cp_id, o.ordnumber, o.transdate, o.reqdate, | . |
|
666 |
qq| o.taxincluded, o.shippingpoint, o.shipvia, o.notes, o.intnotes, | . |
|
667 |
qq| o.curr AS currency, e.name AS employee, o.employee_id, o.salesman_id, | . |
|
668 |
qq| o.${vc}_id, cv.name AS ${vc}, o.amount AS invtotal, | . |
|
669 |
qq| o.closed, o.reqdate, o.quonumber, o.department_id, o.cusordnumber, | . |
|
670 |
qq| d.description AS department, o.payment_id, o.language_id, o.taxzone_id, | . |
|
671 |
qq| o.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id, | . |
|
672 |
qq| o.globalproject_id, o.delivered | . |
|
673 |
qq|FROM oe o | . |
|
674 |
qq|JOIN ${vc} cv ON (o.${vc}_id = cv.id) | . |
|
675 |
qq|LEFT JOIN employee e ON (o.employee_id = e.id) | . |
|
676 |
qq|LEFT JOIN department d ON (o.department_id = d.id) | . |
|
677 |
($form->{id} ? qq|WHERE o.id = ?| : |
|
678 |
qq|WHERE o.id IN (| . join(', ', map("? ", @ids)) . qq|)|); |
|
679 |
@values = $form->{id} ? ($form->{id}) : @ids; |
|
680 |
$sth = prepare_execute_query($form, $dbh, $query, @values); |
|
701 | 681 |
|
702 | 682 |
$ref = $sth->fetchrow_hashref(NAME_lc); |
703 | 683 |
map { $form->{$_} = $ref->{$_} } keys %$ref; |
... | ... | |
717 | 697 |
$sth->finish; |
718 | 698 |
|
719 | 699 |
if ($form->{delivery_customer_id}) { |
720 |
$query = qq|SELECT name FROM customer WHERE id=$form->{delivery_customer_id}|; |
|
721 |
$sth = $dbh->prepare($query); |
|
722 |
$sth->execute || $form->dberror($query); |
|
723 |
($form->{delivery_customer_string}) = $sth->fetchrow_array(); |
|
724 |
$sth->finish; |
|
700 |
$query = qq|SELECT name FROM customer WHERE id = ?|; |
|
701 |
($form->{delivery_customer_string}) = |
|
702 |
selectrow_query($form, $dbh, $query, $form->{delivery_customer_id}); |
|
725 | 703 |
} |
726 | 704 |
|
727 | 705 |
if ($form->{delivery_vendor_id}) { |
728 |
$query = qq|SELECT name FROM customer WHERE id=$form->{delivery_vendor_id}|; |
|
729 |
$sth = $dbh->prepare($query); |
|
730 |
$sth->execute || $form->dberror($query); |
|
731 |
($form->{delivery_vendor_string}) = $sth->fetchrow_array(); |
|
732 |
$sth->finish; |
|
706 |
$query = qq|SELECT name FROM customer WHERE id = ?|; |
|
707 |
($form->{delivery_vendor_string}) = |
|
708 |
selectrow_query($form, $dbh, $query, $form->{delivery_vendor_id}); |
|
733 | 709 |
} |
734 | 710 |
|
735 | 711 |
# shipto and pinted/mailed/queued status makes only sense for single id retrieve |
736 | 712 |
if (!@ids) { |
737 |
$query = qq|SELECT s.* FROM shipto s |
|
738 |
WHERE s.trans_id = $form->{id} AND s.module = 'OE'|; |
|
739 |
$sth = $dbh->prepare($query); |
|
740 |
$sth->execute || $form->dberror($query); |
|
713 |
$query = qq|SELECT s.* FROM shipto s | . |
|
714 |
qq|WHERE s.trans_id = ? AND s.module = 'OE'|; |
|
715 |
$sth = prepare_execute_query($form, $dbh, $query, $form->{id}); |
|
741 | 716 |
|
742 | 717 |
$ref = $sth->fetchrow_hashref(NAME_lc); |
743 | 718 |
delete($ref->{id}); |
... | ... | |
745 | 720 |
$sth->finish; |
746 | 721 |
|
747 | 722 |
# get printed, emailed and queued |
748 |
$query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname |
|
749 |
FROM status s |
|
750 |
WHERE s.trans_id = $form->{id}|; |
|
751 |
$sth = $dbh->prepare($query); |
|
752 |
$sth->execute || $form->dberror($query); |
|
723 |
$query = qq|SELECT s.printed, s.emailed, s.spoolfile, s.formname | . |
|
724 |
qq|FROM status s | . |
|
725 |
qq|WHERE s.trans_id = ?|; |
|
726 |
$sth = prepare_execute_query($form, $dbh, $query, $form->{id}); |
|
753 | 727 |
|
754 | 728 |
while ($ref = $sth->fetchrow_hashref(NAME_lc)) { |
755 | 729 |
$form->{printed} .= "$ref->{formname} " if $ref->{printed}; |
... | ... | |
767 | 741 |
my $transdate = |
768 | 742 |
$form->{transdate} ? $dbh->quote($form->{transdate}) : "current_date"; |
769 | 743 |
|
770 |
if(!$form->{taxzone_id}) { |
|
771 |
$form->{taxzone_id} = 0; |
|
772 |
} |
|
744 |
$form->{taxzone_id} = 0 unless ($form->{taxzone_id}); |
|
745 |
|
|
773 | 746 |
# retrieve individual items |
774 | 747 |
# this query looks up all information about the items |
775 | 748 |
# stuff different from the whole will not be overwritten, but saved with a suffix. |
776 |
$query = qq|SELECT o.id AS orderitems_id, |
|
777 |
c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, |
|
778 |
c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from as income_valid, |
|
779 |
c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from as expense_valid, |
|
780 |
oe.ordnumber AS ordnumber_oe, oe.transdate AS transdate_oe, oe.cusordnumber AS cusordnumber_oe, |
|
781 |
p.partnumber, p.assembly, o.description, o.qty, |
|
782 |
o.sellprice, o.parts_id AS id, o.unit, o.discount, p.bin, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id, |
|
783 |
o.reqdate, o.project_id, o.serialnumber, o.ship, |
|
784 |
o.ordnumber, o.transdate, o.cusordnumber, o.subtotal, o.longdescription, |
|
785 |
pr.projectnumber, p.formel, |
|
786 |
pg.partsgroup, o.pricegroup_id, (SELECT pricegroup FROM pricegroup WHERE id=o.pricegroup_id) as pricegroup |
|
787 |
FROM orderitems o |
|
788 |
JOIN parts p ON (o.parts_id = p.id) |
|
789 |
JOIN oe ON (o.trans_id = oe.id) |
|
790 |
LEFT JOIN chart c1 ON ((select inventory_accno_id from buchungsgruppen where id=p.buchungsgruppen_id) = c1.id) |
|
791 |
LEFT JOIN chart c2 ON ((select income_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c2.id) |
|
792 |
LEFT JOIN chart c3 ON ((select expense_accno_id_$form->{taxzone_id} from buchungsgruppen where id=p.buchungsgruppen_id) = c3.id) |
|
793 |
LEFT JOIN project pr ON (o.project_id = pr.id) |
|
794 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) |
|
795 |
| |
|
796 |
. ($form->{id} |
|
797 |
? qq|WHERE o.trans_id = $form->{id}| |
|
798 |
: qq|WHERE o.trans_id IN (| . join(", ", @ids) . qq|)|) |
|
799 |
. qq| |
|
800 |
ORDER BY o.$oid{$myconfig->{dbdriver}}|; |
|
801 |
|
|
802 |
$sth = $dbh->prepare($query); |
|
803 |
$sth->execute || $form->dberror($query); |
|
749 |
$query = |
|
750 |
qq|SELECT o.id AS orderitems_id, | . |
|
751 |
qq| c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, | . |
|
752 |
qq| c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from as income_valid, | . |
|
753 |
qq| c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from as expense_valid, | . |
|
754 |
qq| oe.ordnumber AS ordnumber_oe, oe.transdate AS transdate_oe, oe.cusordnumber AS cusordnumber_oe, | . |
|
755 |
qq| p.partnumber, p.assembly, o.description, o.qty, | . |
|
756 |
qq| o.sellprice, o.parts_id AS id, o.unit, o.discount, p.bin, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id, | . |
|
757 |
qq| o.reqdate, o.project_id, o.serialnumber, o.ship, | . |
|
758 |
qq| o.ordnumber, o.transdate, o.cusordnumber, o.subtotal, o.longdescription, | . |
|
759 |
qq| pr.projectnumber, p.formel, | . |
|
760 |
qq| pg.partsgroup, o.pricegroup_id, (SELECT pricegroup FROM pricegroup WHERE id=o.pricegroup_id) as pricegroup | . |
|
761 |
qq|FROM orderitems o | . |
|
762 |
qq|JOIN parts p ON (o.parts_id = p.id) | . |
|
763 |
qq|JOIN oe ON (o.trans_id = oe.id) | . |
|
764 |
qq|LEFT JOIN chart c1 ON ((SELECT inventory_accno_id FROM buchungsgruppen WHERE id=p.buchungsgruppen_id) = c1.id) | . |
|
765 |
qq|LEFT JOIN chart c2 ON ((SELECT income_accno_id_$form->{taxzone_id} FROM buchungsgruppen WHERE id=p.buchungsgruppen_id) = c2.id) | . |
|
766 |
qq|LEFT JOIN chart c3 ON ((SELECT expense_accno_id_$form->{taxzone_id} FROM buchungsgruppen WHERE id=p.buchungsgruppen_id) = c3.id) | . |
|
767 |
qq|LEFT JOIN project pr ON (o.project_id = pr.id) | . |
|
768 |
qq|LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) | . |
|
769 |
($form->{id} ? qq|WHERE o.trans_id = ?| : |
|
770 |
qq|WHERE o.trans_id IN (| . join(", ", map("?", @ids)) . qq|)|) . |
|
771 |
qq|ORDER BY o.$oid{$myconfig->{dbdriver}}|; |
|
772 |
|
|
773 |
@ids = $form->{id} ? ($form->{id}) : @ids; |
|
774 |
$sth = prepare_execute_query($form, $dbh, $query, @values); |
|
804 | 775 |
|
805 | 776 |
while ($ref = $sth->fetchrow_hashref(NAME_lc)) { |
806 | 777 |
if (!$ref->{"part_inventory_accno_id"}) { |
... | ... | |
818 | 789 |
|
819 | 790 |
|
820 | 791 |
|
821 |
while ($ref->{inventory_new_chart} && ($ref->{inventory_valid} >=0)) { |
|
822 |
my $query = qq| SELECT accno AS inventory_accno, new_chart_id AS inventory_new_chart, date($transdate) - valid_from AS inventory_valid FROM chart WHERE id = $ref->{inventory_new_chart}|; |
|
823 |
my $stw = $dbh->prepare($query); |
|
824 |
$stw->execute || $form->dberror($query); |
|
825 |
($ref->{inventory_accno}, $ref->{inventory_new_chart}, $ref->{inventory_valid}) = $stw->fetchrow_array; |
|
826 |
$stw->finish; |
|
827 |
} |
|
792 |
while ($ref->{inventory_new_chart} && ($ref->{inventory_valid} >= 0)) { |
|
793 |
my $query = |
|
794 |
qq|SELECT accno AS inventory_accno, | . |
|
795 |
qq| new_chart_id AS inventory_new_chart, | . |
|
796 |
qq| date($transdate) - valid_from AS inventory_valid | . |
|
797 |
qq|FROM chart WHERE id = $ref->{inventory_new_chart}|; |
|
798 |
($ref->{inventory_accno}, $ref->{inventory_new_chart}, |
|
799 |
$ref->{inventory_valid}) = selectrow_query($form, $dbh, $query); |
|
800 |
} |
|
828 | 801 |
|
829 |
while ($ref->{income_new_chart} && ($ref->{income_valid} >=0)) { |
|
830 |
my $query = qq| SELECT accno AS income_accno, new_chart_id AS income_new_chart, date($transdate) - valid_from AS income_valid FROM chart WHERE id = $ref->{income_new_chart}|; |
|
831 |
my $stw = $dbh->prepare($query); |
|
832 |
$stw->execute || $form->dberror($query); |
|
833 |
($ref->{income_accno}, $ref->{income_new_chart}, $ref->{income_valid}) = $stw->fetchrow_array; |
|
834 |
$stw->finish; |
|
835 |
} |
|
802 |
while ($ref->{income_new_chart} && ($ref->{income_valid} >= 0)) { |
|
803 |
my $query = |
|
804 |
qq|SELECT accno AS income_accno, | . |
|
805 |
qq| new_chart_id AS income_new_chart, | . |
|
806 |
qq| date($transdate) - valid_from AS income_valid | . |
|
807 |
qq|FROM chart WHERE id = $ref->{income_new_chart}|; |
|
808 |
($ref->{income_accno}, $ref->{income_new_chart}, |
|
809 |
$ref->{income_valid}) = selectrow_query($form, $dbh, $query); |
|
810 |
} |
|
836 | 811 |
|
837 |
while ($ref->{expense_new_chart} && ($ref->{expense_valid} >=0)) { |
|
838 |
my $query = qq| SELECT accno AS expense_accno, new_chart_id AS expense_new_chart, date($transdate) - valid_from AS expense_valid FROM chart WHERE id = $ref->{expense_new_chart}|; |
|
839 |
my $stw = $dbh->prepare($query); |
|
840 |
$stw->execute || $form->dberror($query); |
|
841 |
($ref->{expense_accno}, $ref->{expense_new_chart}, $ref->{expense_valid}) = $stw->fetchrow_array; |
|
842 |
$stw->finish; |
|
843 |
} |
|
812 |
while ($ref->{expense_new_chart} && ($ref->{expense_valid} >= 0)) { |
|
813 |
my $query = |
|
814 |
qq|SELECT accno AS expense_accno, | . |
|
815 |
qq| new_chart_id AS expense_new_chart, | . |
|
816 |
qq| date($transdate) - valid_from AS expense_valid | . |
|
817 |
qq|FROM chart WHERE id = $ref->{expense_new_chart}|; |
|
818 |
($ref->{expense_accno}, $ref->{expense_new_chart}, |
|
819 |
$ref->{expense_valid}) = selectrow_query($form, $dbh, $query); |
|
820 |
} |
|
844 | 821 |
|
845 | 822 |
# delete orderitems_id in collective orders, so that they get cloned no matter what |
846 | 823 |
delete $ref->{orderitems_id} if (@ids); |
... | ... | |
848 | 825 |
# get tax rates and description |
849 | 826 |
$accno_id = |
850 | 827 |
($form->{vc} eq "customer") ? $ref->{income_accno} : $ref->{expense_accno}; |
851 |
$query = qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber |
|
852 |
FROM tax t LEFT JOIN chart c on (c.id=t.chart_id) |
|
853 |
WHERE t.id in (SELECT tk.tax_id from taxkeys tk where tk.chart_id = (SELECT id from chart WHERE accno='$accno_id') AND startdate<=$transdate ORDER BY startdate desc LIMIT 1) |
|
854 |
ORDER BY c.accno|; |
|
855 |
$stw = $dbh->prepare($query); |
|
856 |
$stw->execute || $form->dberror($query); |
|
828 |
$query = |
|
829 |
qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber | . |
|
830 |
qq|FROM tax t LEFT JOIN chart c on (c.id = t.chart_id) | . |
|
831 |
qq|WHERE t.id IN (SELECT tk.tax_id FROM taxkeys tk | . |
|
832 |
qq| WHERE tk.chart_id = (SELECT id FROM chart WHERE accno = ?) | . |
|
833 |
qq| AND startdate <= $transdate ORDER BY startdate DESC LIMIT 1) | . |
|
834 |
qq|ORDER BY c.accno|; |
|
835 |
$stw = prepare_execute_query($form, $dbh, $query, $accno_id); |
|
857 | 836 |
$ref->{taxaccounts} = ""; |
858 | 837 |
my $i = 0; |
859 | 838 |
while ($ptr = $stw->fetchrow_hashref(NAME_lc)) { |
860 |
|
|
861 |
# if ($customertax{$ref->{accno}}) { |
|
862 | 839 |
if (($ptr->{accno} eq "") && ($ptr->{rate} == 0)) { |
863 | 840 |
$i++; |
864 | 841 |
$ptr->{accno} = $i; |
... | ... | |
894 | 871 |
Common::webdav_folder($form) if ($main::webdav); |
895 | 872 |
|
896 | 873 |
# get tax zones |
897 |
$query = qq|SELECT id, description |
|
898 |
FROM tax_zones|; |
|
899 |
$sth = $dbh->prepare($query); |
|
900 |
$sth->execute || $form->dberror($query); |
|
901 |
|
|
902 |
|
|
903 |
while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { |
|
904 |
push @{ $form->{TAXZONE} }, $ref; |
|
905 |
} |
|
906 |
$sth->finish; |
|
907 |
|
|
874 |
$query = qq|SELECT id, description FROM tax_zones|; |
|
875 |
$form->{TAXZONE} = selectall_hashref_query($form, $dbh, $query); |
|
908 | 876 |
|
909 | 877 |
my $rc = $dbh->commit; |
910 | 878 |
$dbh->disconnect; |
... | ... | |
922 | 890 |
# connect to database |
923 | 891 |
my $dbh = $form->dbconnect($myconfig); |
924 | 892 |
my $query; |
893 |
my @values = (); |
|
925 | 894 |
my $sth; |
926 | 895 |
my $nodiscount; |
927 | 896 |
my $yesdiscount; |
... | ... | |
954 | 923 |
|
955 | 924 |
if (@project_ids) { |
956 | 925 |
$query = "SELECT id, projectnumber FROM project WHERE id IN (" . |
957 |
join(", ", map({ "?" } @project_ids)) . ")"; |
|
958 |
$sth = $dbh->prepare($query); |
|
959 |
$sth->execute(@project_ids) || |
|
960 |
$form->dberror($query . " (" . join(", ", @project_ids) . ")"); |
|
926 |
join(", ", map("?", @project_ids)) . ")"; |
|
927 |
$sth = prepare_execute_query($form, $dbh, $query, @project_ids); |
|
961 | 928 |
while (my $ref = $sth->fetchrow_hashref()) { |
962 | 929 |
$projectnumbers{$ref->{id}} = $ref->{projectnumber}; |
963 | 930 |
} |
... | ... | |
1093 | 1060 |
my ($taxamount, $taxbase); |
1094 | 1061 |
my $taxrate = 0; |
1095 | 1062 |
|
1096 |
map { $taxrate += $form->{"${_}_rate"} } split / /, |
|
1097 |
$form->{"taxaccounts_$i"}; |
|
1063 |
map { $taxrate += $form->{"${_}_rate"} } split(/ /, $form->{"taxaccounts_$i"}); |
|
1098 | 1064 |
|
1099 | 1065 |
if ($form->{taxincluded}) { |
1100 | 1066 |
|
... | ... | |
1129 | 1095 |
$sortorder = qq|ORDER BY a.$oid{$myconfig->{dbdriver}}|; |
1130 | 1096 |
} |
1131 | 1097 |
|
1132 |
$query = qq|SELECT p.partnumber, p.description, p.unit, a.qty, |
|
1133 |
pg.partsgroup
|
|
1134 |
FROM assembly a
|
|
1135 |
JOIN parts p ON (a.parts_id = p.id)
|
|
1136 |
LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
|
|
1137 |
WHERE a.bom = '1'
|
|
1138 |
AND a.id = '$form->{"id_$i"}'
|
|
1139 |
$sortorder|;
|
|
1098 |
$query = qq|SELECT p.partnumber, p.description, p.unit, a.qty, | .
|
|
1099 |
qq|pg.partsgroup | .
|
|
1100 |
qq|FROM assembly a | .
|
|
1101 |
qq| JOIN parts p ON (a.parts_id = p.id) | .
|
|
1102 |
qq| LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id) | .
|
|
1103 |
qq| WHERE a.bom = '1' | .
|
|
1104 |
qq| AND a.id = ? | . $sortorder;
|
|
1105 |
@values = ($form->{"id_$i"});
|
|
1140 | 1106 |
$sth = $dbh->prepare($query); |
1141 |
$sth->execute || $form->dberror($query); |
|
1107 |
$sth->execute(@values) || $form->dberror($query);
|
|
1142 | 1108 |
|
1143 | 1109 |
while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { |
1144 | 1110 |
if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { |
... | ... | |
1208 | 1174 |
|
1209 | 1175 |
my ($self, $dbh, $id) = @_; |
1210 | 1176 |
|
1211 |
my $query = qq|SELECT p.description |
|
1212 |
FROM project p |
|
1213 |
WHERE p.id = $id|; |
|
1214 |
my $sth = $dbh->prepare($query); |
|
1215 |
$sth->execute || $form->dberror($query); |
|
1216 |
|
|
1217 |
($_) = $sth->fetchrow_array; |
|
1218 |
|
|
1219 |
$sth->finish; |
|
1177 |
my $query = qq|SELECT description FROM project WHERE id = ?|; |
|
1178 |
my ($value) = selectrow_query($form, $dbh, $query, $id); |
|
1220 | 1179 |
|
1221 | 1180 |
$main::lxdebug->leave_sub(); |
1222 | 1181 |
|
1223 |
return $_;
|
|
1182 |
return $value;
|
|
1224 | 1183 |
} |
1225 | 1184 |
|
1226 | 1185 |
sub adj_onhand { |
... | ... | |
1228 | 1187 |
|
1229 | 1188 |
my ($dbh, $form, $ml) = @_; |
1230 | 1189 |
|
1231 |
my $service_units = $form->{service_units}; |
|
1232 |
my $part_units = $form->{part_units}; |
|
1190 |
my $all_units = $form->{all_units}; |
|
1233 | 1191 |
|
1234 |
my $query = qq|SELECT oi.parts_id, oi.ship, oi.unit, p.inventory_accno_id, p.assembly |
|
1235 |
FROM orderitems oi |
|
1236 |
JOIN parts p ON (p.id = oi.parts_id) |
|
1237 |
WHERE oi.trans_id = $form->{id}|; |
|
1192 |
my $query = |
|
1193 |
qq|SELECT oi.parts_id, oi.ship, oi.unit, p.inventory_accno_id, p.assembly | . |
|
1194 |
qq| FROM orderitems oi | . |
|
1195 |
qq| JOIN parts p ON (p.id = oi.parts_id) | . |
|
1196 |
qq| WHERE oi.trans_id = ?|; |
|
1197 |
my @values = ($form->{id}); |
|
1238 | 1198 |
my $sth = $dbh->prepare($query); |
1239 |
$sth->execute || $form->dberror($query); |
|
1199 |
$sth->execute(@values) || $form->dberror($query);
|
|
1240 | 1200 |
|
1241 |
$query = qq|SELECT sum(p.inventory_accno_id) |
|
1242 |
FROM parts p |
|
1243 |
JOIN assembly a ON (a.parts_id = p.id) |
|
1244 |
WHERE a.id = ?|; |
|
1201 |
$query = |
|
1202 |
qq|SELECT sum(p.inventory_accno_id) | . |
|
1203 |
qq|FROM parts p | . |
|
1204 |
qq|JOIN assembly a ON (a.parts_id = p.id) | . |
|
1205 |
qq|WHERE a.id = ?|; |
|
1245 | 1206 |
my $ath = $dbh->prepare($query) || $form->dberror($query); |
1246 | 1207 |
|
1247 | 1208 |
my $ispa; |
1248 | 1209 |
|
1249 | 1210 |
while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { |
1250 |
#print(STDERR "Bin in Schleife $ref->{inventory_accno_id}\n"); |
|
1251 |
|
|
1252 | 1211 |
if ($ref->{inventory_accno_id} || $ref->{assembly}) { |
1253 | 1212 |
|
1254 | 1213 |
# do not update if assembly consists of all services |
... | ... | |
1263 | 1222 |
} |
1264 | 1223 |
|
1265 | 1224 |
# get item baseunit |
1266 |
$query = qq|SELECT p.unit |
|
1267 |
FROM parts p |
|
1268 |
WHERE p.id = $ref->{parts_id}|; |
|
1269 |
my $stw = $dbh->prepare($query); |
|
1270 |
$stw->execute || $form->dberror($query); |
|
1271 |
|
|
1272 |
my ($item_unit) = $stw->fetchrow_array(); |
|
1273 |
$stw->finish; |
|
1274 |
|
|
1275 |
if ($ref->{inventory_accno_id}) { |
|
1276 |
if (defined($part_units->{$item_unit}->{factor}) && $part_units->{$item_unit}->{factor} ne '' && $part_units->{$item_unit}->{factor} ne '0') { |
|
1277 |
$basefactor = $part_units->{$ref->{unit}}->{factor} / $part_units->{$item_unit}->{factor}; |
|
1278 |
} else { |
|
1279 |
$basefactor = 1; |
|
1280 |
} |
|
1281 |
$baseqty = $ref->{ship} * $basefactor; |
|
1282 |
} else { |
|
1283 |
if (defined($service_units->{$item_unit}->{factor}) && $service_units->{$item_unit}->{factor} ne '' && $service_units->{$item_unit}->{factor} ne '0') { |
|
1284 |
$basefactor = $service_units->{$ref->{unit}}->{factor} / $part_units->{$item_unit}->{factor}; |
|
1285 |
} else { |
|
1286 |
$basefactor = 1; |
|
1287 |
} |
|
1288 |
$baseqty = $ref->{ship} * $basefactor; |
|
1289 |
} |
|
1290 |
#print(STDERR "$baseqty Basismenge\n"); |
|
1225 |
$query = qq|SELECT unit FROM parts WHERE id = ?|; |
|
1226 |
my ($item_unit) = selectrow_query($form, $dbh, $query, $ref->{parts_id}); |
|
1227 |
|
|
1228 |
my $basefactor = 1; |
|
1229 |
if (defined($all_units->{$item_unit}->{factor}) && |
|
1230 |
(($all_units->{$item_unit}->{factor} * 1) != 0)) { |
|
1231 |
$basefactor = $all_units->{$ref->{unit}}->{factor} / |
|
1232 |
$all_units->{$item_unit}->{factor}; |
|
1233 |
} |
|
1234 |
my $baseqty = $ref->{ship} * $basefactor; |
|
1291 | 1235 |
|
1292 | 1236 |
# adjust onhand in parts table |
1293 | 1237 |
$form->update_balance($dbh, "parts", "onhand", |
... | ... | |
1302 | 1246 |
} |
1303 | 1247 |
|
1304 | 1248 |
1; |
1305 |
|
Auch abrufbar als: Unified diff
OE.pm: Keine Daten aus $form direkt in SQL-Anfragen einsetzen und statt dessen parametrisierte Anfragen benutzen. Außerdem einen SQL-Fehler behoben, wenn mehrere Auftrage zu einem zusammengefasst werden. Behebt Bug #609.