X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=bin%2Fmozilla%2Foe.pl;h=8a14425d5da3442eade6cf24ea08a4bb1960f28c;hb=b8125c17c8add08c9b84fb054f797547a853dd3a;hp=2d82b9d17500be4e344e8ae824253cbe6c09c80a;hpb=3da73190b8f201bfb33e3b6d96bbc6330142e922;p=kivitendo-erp.git
diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl
index 2d82b9d17..8a14425d5 100644
--- a/bin/mozilla/oe.pl
+++ b/bin/mozilla/oe.pl
@@ -44,7 +44,7 @@ use SL::IS;
use SL::MoreCommon qw(ary_diff);
use SL::PE;
use SL::ReportGenerator;
-use List::MoreUtils qw(any none);
+use List::MoreUtils qw(uniq any none);
use List::Util qw(min max reduce sum);
use Data::Dumper;
@@ -240,7 +240,7 @@ sub order_links {
# get customer/vendor
$form->all_vc(\%myconfig, $form->{vc}, ($form->{vc} eq 'customer') ? "AR" : "AP");
- # retrieve order/quotation
+ # retrieve order/quotation and webdav config
$form->{webdav} = $::instance_conf->get_webdav;
my $editing = $form->{id};
@@ -257,7 +257,6 @@ sub order_links {
$form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"};
$form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id delivery_term_id currency));
- $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
# get customer / vendor
IR->get_vendor(\%myconfig, \%$form) if $form->{type} =~ /(purchase_order|request_quotation)/;
@@ -344,19 +343,14 @@ sub form_header {
# openclosed checkboxes
my @tmp;
push @tmp, sprintf qq||,
- $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order created') if $form->{"type"} =~ /_order$/;
+ $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order(s) for full qty created') if $form->{"type"} =~ /_order$/;
push @tmp, sprintf qq||,
$form->{"closed"} ? "checked" : "", $locale->text('Closed') if $form->{id};
$TMPL_VAR{openclosed} = sprintf qq|
%s |
\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp;
- # project ids
- my @old_project_ids = ($form->{"globalproject_id"}, grep { $_ } map { $form->{"project_id_$_"} } 1..$form->{"rowcount"});
-
my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
- $form->get_lists("projects" => { "key" => "ALL_PROJECTS",
- "all" => 0,
- "old_id" => \@old_project_ids },
- "taxzones" => "ALL_TAXZONES",
+
+ $form->get_lists("taxzones" => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"),
"payments" => "ALL_PAYMENTS",
"currencies" => "ALL_CURRENCIES",
"departments" => "ALL_DEPARTMENTS",
@@ -364,6 +358,25 @@ sub form_header {
limit => $myconfig{vclimit} + 1 },
"price_factors" => "ALL_PRICE_FACTORS");
+ # Projects
+ my @old_project_ids = uniq grep { $_ } map { $_ * 1 } ($form->{"globalproject_id"}, map { $form->{"project_id_$_"} } 1..$form->{"rowcount"});
+ my @old_ids_cond = @old_project_ids ? (id => \@old_project_ids) : ();
+ my @customer_cond;
+ if (($vc eq 'customers') && $::instance_conf->get_customer_projects_only_in_sales) {
+ @customer_cond = (
+ or => [
+ customer_id => $::form->{customer_id},
+ billable_customer_id => $::form->{customer_id},
+ ]);
+ }
+ my @conditions = (
+ or => [
+ and => [ active => 1, @customer_cond ],
+ @old_ids_cond,
+ ]);
+
+ $TMPL_VAR{ALL_PROJECTS} = SL::DB::Manager::Project->get_all_sorted(query => \@conditions);
+
# label subs
my $employee_list_query_gen = sub { $::form->{$_[0]} ? [ or => [ id => $::form->{$_[0]}, deleted => 0 ] ] : [ deleted => 0 ] };
$TMPL_VAR{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all_sorted(query => $employee_list_query_gen->('employee_id'));
@@ -452,7 +465,7 @@ sub form_header {
}
}
- $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery));
+ $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase show_form_details show_history show_vc_details ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part));
$form->header;
if ($form->{CFDD_shipto} && $form->{CFDD_shipto_id} ) {
@@ -551,9 +564,12 @@ sub form_footer {
$TMPL_VAR{ALL_DELIVERY_TERMS} = SL::DB::Manager::DeliveryTerm->get_all_sorted();
+ my $tpca_reminder;
+ $tpca_reminder = check_transport_cost_reminder_article_number() if $::instance_conf->get_transport_cost_reminder_article_number_id;
print $form->parse_html_template("oe/form_footer", {
%TMPL_VAR,
webdav => $::instance_conf->get_webdav,
+ tpca_reminder => $tpca_reminder,
print_options => print_options(inline => 1),
label_edit => $locale->text("Edit the $form->{type}"),
label_workflow => $locale->text("Workflow $form->{type}"),
@@ -662,7 +678,20 @@ sub update {
if ($sellprice) {
$form->{"sellprice_$i"} = $sellprice;
} else {
- $form->{"sellprice_$i"} *= (1 - $form->{tradediscount});
+ my $record = _make_record();
+ my $price_source = SL::PriceSource->new(record_item => $record->items->[$i-1], record => $record);
+ my $best_price = $price_source->best_price;
+ my $best_discount = $price_source->best_discount;
+
+ if ($best_price) {
+ $::form->{"sellprice_$i"} = $best_price->price;
+ $::form->{"active_price_source_$i"} = $best_price->source;
+ }
+ if ($best_discount) {
+ $::form->{"discount_$i"} = $best_discount->discount;
+ $::form->{"active_discount_source_$i"} = $best_discount->source;
+ }
+
$form->{"sellprice_$i"} /= $exchangerate; # if there is an exchange rate adjust sellprice
}
@@ -676,12 +705,6 @@ sub update {
$form->{"sellprice_$i"} = $form->format_amount(\%myconfig, $form->{"sellprice_$i"}, $decimalplaces);
$form->{"lastcost_$i"} = $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, $decimalplaces);
$form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
-
- # get pricegroups for parts
- IS->get_pricegroups_for_parts(\%myconfig, \%$form);
-
- # build up html code for prices_$i
- &set_pricegroup($i);
}
display_form();
@@ -868,7 +891,7 @@ sub orders {
push @hidden_variables, "l_subtotal", $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered ordnumber quonumber cusordnumber
transaction_description transdatefrom transdateto type vc employee_id salesman_id
reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive
- business_id shippingpoint taxzone_id
+ business_id shippingpoint taxzone_id reqdate_unset_or_old
order_probability_op order_probability_value expected_billing_date_from expected_billing_date_to);
my @keys_for_url = grep { $form->{$_} } @hidden_variables;
@@ -933,6 +956,7 @@ sub orders {
push @options, $locale->text('Customer') . " : $form->{customer}" if $form->{customer};
push @options, $locale->text('Vendor') . " : $form->{vendor}" if $form->{vendor};
+ push @options, $locale->text('Contact Person') . " : $form->{cp_name}" if $form->{cp_name};
push @options, $locale->text('Department') . " : $department" if $form->{department};
push @options, $locale->text('Order Number') . " : $form->{ordnumber}" if $form->{ordnumber};
push @options, $locale->text('Customer Order Number') . " : $form->{cusordnumber}" if $form->{cusordnumber};
@@ -954,6 +978,7 @@ sub orders {
push @options, $locale->text('Delivery Order created') if $form->{delivered};
push @options, $locale->text('Not delivered') if $form->{notdelivered};
push @options, $locale->text('Periodic invoices active') if $form->{periodic_invoices_active};
+ push @options, $locale->text('Reqdate not set or before current month') if $form->{reqdate_unset_or_old};
if ($form->{business_id}) {
my $vc_type_label = $form->{vc} eq 'customer' ? $locale->text('Customer type') : $locale->text('Vendor type');
@@ -1326,9 +1351,14 @@ sub delete {
if (OE->delete(\%myconfig, \%$form)){
# saving the history
if(!exists $form->{addition}) {
- $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
- $form->{addition} = "DELETED";
- $form->save_history;
+ 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} = "DELETED";
+ $form->save_history;
}
# /saving the history
$form->info($msg);
@@ -1393,6 +1423,7 @@ sub invoice {
for (qw(ship qty sellprice listprice basefactor)) {
$form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if $form->{"${_}_${i}"};
}
+ $form->{"converted_from_orderitems_id_$i"} = delete $form->{"orderitems_id_$i"};
}
my ($buysell, $orddate, $exchangerate);
@@ -1413,7 +1444,6 @@ sub invoice {
$form->{convert_from_oe_ids} = $form->{id};
$form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig);
$form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
- $form->{shipto} = 1;
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
delete @{$form}{qw(id closed)};
@@ -1488,10 +1518,6 @@ sub invoice {
$form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty);
}
- # show pricegroup in newly loaded invoice when creating invoice from quotation/order
- IS->get_pricegroups_for_parts(\%myconfig, \%$form);
- set_pricegroup($_) for 1 .. $form->{rowcount};
-
&display_form;
$main::lxdebug->leave_sub();
@@ -1595,6 +1621,7 @@ sub save_as_new {
$form->{saveasnew} = 1;
map { delete $form->{$_} } qw(printed emailed queued delivered closed);
+ $form->{"converted_from_orderitems_id_$_"} = delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
# 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.
@@ -1610,21 +1637,14 @@ sub save_as_new {
if ( $form->{reqdate} && $form->{id} ) {
my $saved_order = OE->retrieve_simple(id => $form->{id});
if ( $saved_order && $saved_order->{reqdate} eq $form->{reqdate} && $saved_order->{transdate} eq $form->{transdate} ) {
+ my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1;
+ my $next_workday = DateTime->today_local->add(days => $extra_days);
+ my $day_of_week = $next_workday->day_of_week;
- my $dbh = $form->get_standard_dbh;
+ $next_workday->add(days => (8 - $day_of_week)) if $day_of_week >= 6;
- my $wday = (localtime(time))[6];
- my $next_workday = $wday == 5 ? 3 : $wday == 6 ? 2 : 1;
-
- my $query = 'SELECT
- date(current_date + interval \''. $next_workday .' days\') AS reqdate,
- date(current_date) AS transdate';
- my $ref = selectfirst_hashref_query($form, $dbh, $query);
-
- map(
- { $form->{$_} = $ref->{$_} }
- keys %{$ref}
- );
+ $form->{transdate} = DateTime->today_local->to_kivitendo;
+ $form->{reqdate} = $next_workday->to_kivitendo;
}
}
@@ -1646,7 +1666,6 @@ sub check_for_direct_delivery_yes {
$form->{direct_delivery_checked} = 1;
delete @{$form}{grep /^shipto/, keys %{ $form }};
map { s/^CFDD_//; $form->{$_} = $form->{"CFDD_${_}"} } grep /^CFDD_/, keys %{ $form };
- $form->{shipto} = 1;
$form->{CFDD_shipto} = 1;
purchase_order();
$main::lxdebug->leave_sub();
@@ -1716,6 +1735,8 @@ sub purchase_order {
if ($form->{type} =~ /^sales_/) {
delete($form->{ordnumber});
+ delete($form->{payment_id});
+ delete($form->{delivery_term_id});
}
$form->{cp_id} *= 1;
@@ -1745,6 +1766,7 @@ sub sales_order {
if ($form->{type} eq "purchase_order") {
delete($form->{ordnumber});
+ $form->{"lastcost_$_"} = $form->{"sellprice_$_"} for (1..$form->{rowcount});
}
$form->{cp_id} *= 1;
@@ -1787,6 +1809,8 @@ sub poso {
# reset
map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal delivered ordnumber);
+ # this converted variable is also used for sales_order to purchase order and vice versa
+ $form->{"converted_from_orderitems_id_$_"} = delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
# if purchase_order was generated from sales_order, use lastcost_$i as sellprice_$i
# also reset discounts
@@ -1861,6 +1885,7 @@ sub delivery_order {
for my $i (1 .. $form->{rowcount}) {
map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice lastcost basefactor discount);
+ $form->{"converted_from_orderitems_id_$i"} = delete $form->{"orderitems_id_$i"};
}
my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor shipto_id);
@@ -2059,9 +2084,27 @@ sub _oe_remove_delivered_or_billed_rows {
_remove_billed_or_delivered_rows(quantities => \%handled_base_qtys);
}
+# iterate all positions and match articlenumber
+sub check_transport_cost_reminder_article_number {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;
+
+ check_oe_access();
+
+ my $transport_article_id = $::instance_conf->get_transport_cost_reminder_article_number_id;
+ for my $i (1 .. $form->{rowcount}) {
+ return if $form->{"id_${i}"} eq $transport_article_id;
+ }
+
+ # simply return the name of the part
+ return SL::DB::Part->new(id => $transport_article_id)->load()->partnumber;
+
+ $main::lxdebug->leave_sub();
+}
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)) {
+ foreach my $action (qw(delete delivery_order e_mail invoice print purchase_order quotation
+ request_for_quotation sales_order save save_and_close save_as_new ship_to update)) {
if ($::form->{"action_${action}"}) {
call_sub($action);
return;
@@ -2070,3 +2113,4 @@ sub dispatcher {
$::form->error($::locale->text('No action defined.'));
}
+