# Quotation module
#======================================================================
+
+use Carp;
use POSIX qw(strftime);
use SL::DO;
use SL::PE;
use SL::ReportGenerator;
use List::MoreUtils qw(any none);
-use List::Util qw(max reduce sum);
+use List::Util qw(min max reduce sum);
use Data::Dumper;
+use SL::DB::Customer;
+
require "bin/mozilla/io.pl";
require "bin/mozilla/arap.pl";
require "bin/mozilla/reportgenerator.pl";
# emulate click for resubmitting actions
$dispatch_to_popup = "document.oe.${_}.click(); " for grep { /^action_/ } keys %$form;
} elsif ($creditwarning) {
- $::request->{layout}->add_javascripts_inline("alert('$credittext')");
+ $::request->{layout}->add_javascripts_inline("alert('$credittext');");
}
$::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup})");
$TMPL_VAR{notes} = qq|<textarea name=notes rows="$rows" cols="25">| . H($form->{notes}) . qq|</textarea>|;
$TMPL_VAR{intnotes} = qq|<textarea name=intnotes rows="$introws" cols="35">| . H($form->{intnotes}) . qq|</textarea>|;
- my $paymet_id = $::form->{payment_id};
- IS->get_customer(\%myconfig, $::form) if $form->{type} =~ /sales_(order|quotation)/;
- $::form->{payment_id} = $paymet_id;
-
- if ( $form->{vc} eq 'customer' && !$form->{taxincluded_changed_by_user} ) {
- $form->{taxincluded} = defined($form->{taxincluded_checked}) ? $form->{taxincluded_checked} : $myconfig{taxincluded_checked};
+ if( $form->{customer_id} && !$form->{taxincluded_changed_by_user} ) {
+ my $customer = SL::DB::Customer->new(id => $form->{customer_id})->load();
+ $form->{taxincluded} = defined($customer->taxincluded_checked) ? $customer->taxincluded_checked : $myconfig{taxincluded_checked};
}
if (!$form->{taxincluded}) {
}
+ # value of $ordnumber is ordnumber or quonumber
$form->{$ordnumber} = $form->update_defaults(\%myconfig, $numberfld)
unless $form->{$ordnumber};
# saving the history
if(!exists $form->{addition}) {
- $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
+ if ( $form->{formname} eq 'sales_quotation' or $form->{formname} eq 'request_quotation' ) {
+ $form->{snumbers} = qq|quonumber_| . $form->{quonumber};
+ } elsif ( $form->{formname} eq 'sales_order' or $form->{formname} eq 'purchase_order') {
+ $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
+ };
+ $form->{what_done} = $form->{formname};
$form->{addition} = "SAVED";
$form->save_history;
}
::end_of_request();
}
+ _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'billed');
+
$form->{cp_id} *= 1;
for my $i (1 .. $form->{rowcount}) {
$form->{saveasnew} = 1;
map { delete $form->{$_} } qw(printed emailed queued delivered closed);
- # Let Lx-Office assign a new order number if the user hasn't changed the
+ # Let kivitendo assign a new order number if the user hasn't changed the
# previous one. If it has been changed manually then use it as-is.
my $idx = $form->{type} =~ /_quotation$/ ? "quonumber" : "ordnumber";
$form->{$idx} =~ s/^\s*//g;
$form->{old_employee_id} = $form->{employee_id};
$form->{old_salesman_id} = $form->{salesman_id};
+ _oe_remove_delivered_or_billed_rows(id => $form->{id}, type => 'delivered');
+
# reset
delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)};
$::lxdebug->leave_sub();
}
+sub _oe_remove_delivered_or_billed_rows {
+ my (%params) = @_;
+
+ return if !$params{id} || !$params{type};
+
+ my $ord_quot = SL::DB::Order->new(id => $params{id})->load;
+ return if !$ord_quot;
+
+ my %args = (
+ direction => 'to',
+ to => $params{type} eq 'delivered' ? 'DeliveryOrder' : 'Invoice',
+ via => [ $params{type} eq 'delivered' ? qw(Order) : qw(Order DeliveryOrder) ],
+ );
+
+ my %handled_base_qtys;
+ foreach my $record (@{ $ord_quot->linked_records(%args) }) {
+ next if $ord_quot->is_sales != $record->is_sales;
+
+ foreach my $item (@{ $record->items }) {
+ $handled_base_qtys{ $item->parts_id } += $item->qty * $item->unit_obj->base_factor;
+ }
+ }
+
+ _remove_billed_or_delivered_rows(quantities => \%handled_base_qtys);
+}
+
sub dispatcher {
foreach my $action (qw(delete delivery_order e_mail invoice print purchase_order purchase_order quotation
request_for_quotation sales_order sales_order save save_and_close save_as_new ship_to update)) {