["sales_all_edit", $locale->text("View/edit all employees sales documents")],
["edit_prices", $locale->text("Edit prices and discount (if not used, textfield is ONLY set readonly)")],
["show_ar_transactions", $locale->text("Show AR transactions as part of AR invoice report")],
+ ["delivery_plan", $locale->text("Show delivery plan")],
["--ap", $locale->text("AP")],
["request_quotation_edit", $locale->text("Create and edit RFQs")],
["purchase_order_edit", $locale->text("Create and edit purchase orders")],
$self->edit_user_form(title => t8('Edit User'));
}
+sub action_save_newuser {
+ my ($self) = @_;
+ $::form->{user}{clients} = 0;
+ $self->action_save_user();
+}
+
sub action_save_user {
my ($self) = @_;
my $params = delete($::form->{user}) || { };
use Rose::Object::MakeMethods::Generic (
scalar => [ qw(db_args flat_filter) ],
- 'scalar --get_set_init' => [ qw(models) ],
+ 'scalar --get_set_init' => [ qw(models all_edit_right) ],
);
-__PACKAGE__->run_before(sub { $::auth->assert('sales_order_edit'); });
+__PACKAGE__->run_before(sub { $::auth->assert('delivery_plan'); });
my %sort_columns = (
reqdate => t8('Reqdate'),
customer => t8('Customer'),
);
-my $delivery_plan_query = [
- 'order.customer_id' => { gt => 0 },
- 'order.closed' => 0,
- or => [ 'order.quotation' => 0, 'order.quotation' => undef ],
-
- # filter by shipped_qty < qty, read from innermost to outermost
- 'id' => [ \"
- -- 3. resolve the desired information about those
- SELECT oi.id FROM (
- -- 2. slice only part, orderitem and both quantities from it
- SELECT parts_id, trans_id, qty, SUM(doi_qty) AS doi_qty FROM (
- -- 1. join orderitems and deliverorder items via record_links.
- -- also add customer data to filter for sales_orders
- SELECT oi.parts_id, oi.trans_id, oi.id, oi.qty, doi.qty AS doi_qty
- FROM orderitems oi, oe, record_links rl, delivery_order_items doi
- WHERE
- oe.id = oi.trans_id AND
- oe.customer_id IS NOT NULL AND
- (oe.quotation = 'f' OR oe.quotation IS NULL) AND
- NOT oe.closed AND
- rl.from_id = oe.id AND
- rl.from_id = oi.trans_id AND
- oe.id = oi.trans_id AND
- rl.from_table = 'oe' AND
- rl.to_table = 'delivery_orders' AND
- rl.to_id = doi.delivery_order_id AND
- oi.parts_id = doi.parts_id
- ) tuples GROUP BY parts_id, trans_id, qty
- ) partials
- LEFT JOIN orderitems oi ON partials.parts_id = oi.parts_id AND partials.trans_id = oi.trans_id
- WHERE oi.qty > doi_qty
-
- UNION ALL
-
- -- 4. since the join over record_links fails for sales_orders wihtout any delivery order
- -- retrieve those without record_links at all
- SELECT oi.id FROM orderitems oi, oe
- WHERE
- oe.id = oi.trans_id AND
- oe.customer_id IS NOT NULL AND
- (oe.quotation = 'f' OR oe.quotation IS NULL) AND
- NOT oe.closed AND
- oi.trans_id NOT IN (
- SELECT from_id
- FROM record_links rl
- WHERE
- rl.from_table ='oe' AND
- rl.to_table = 'delivery_orders'
- )
-
- UNION ALL
-
- -- 5. In case someone deleted a line of the delivery_order there will be a record_link (4 fails)
- -- but there won't be a delivery_order_items to find (3 fails too). Search for orphaned orderitems this way
- SELECT oi.id FROM orderitems AS oi, oe, record_links AS rl
- WHERE
- rl.from_table = 'oe' AND
- rl.to_table = 'delivery_orders' AND
-
- oi.trans_id = rl.from_id AND
- oi.parts_id NOT IN (
- SELECT doi.parts_id FROM delivery_order_items AS doi WHERE doi.delivery_order_id = rl.to_id
- ) AND
-
- oe.id = oi.trans_id AND
-
- oe.customer_id IS NOT NULL AND
- (oe.quotation = 'f' OR oe.quotation IS NULL) AND
- NOT oe.closed
- " ],
-];
-
sub action_list {
my ($self) = @_;
$self->{filter_summary} = join ', ', @filter_strings;
}
+sub delivery_plan_query {
+ my $employee_id = SL::DB::Manager::Employee->current->id;
+ my $oe_owner = $_[0]->all_edit_right ? '' : " oe.eployee_id = $employee_id AND";
+ [
+ 'order.customer_id' => { gt => 0 },
+ 'order.closed' => 0,
+ or => [ 'order.quotation' => 0, 'order.quotation' => undef ],
+
+ # filter by shipped_qty < qty, read from innermost to outermost
+ 'id' => [ \"
+ -- 3. resolve the desired information about those
+ SELECT oi.id FROM (
+ -- 2. slice only part, orderitem and both quantities from it
+ SELECT parts_id, trans_id, qty, SUM(doi_qty) AS doi_qty FROM (
+ -- 1. join orderitems and deliverorder items via record_links.
+ -- also add customer data to filter for sales_orders
+ SELECT oi.parts_id, oi.trans_id, oi.id, oi.qty, doi.qty AS doi_qty
+ FROM orderitems oi, oe, record_links rl, delivery_order_items doi
+ WHERE
+ oe.id = oi.trans_id AND
+ oe.customer_id IS NOT NULL AND
+ (oe.quotation = 'f' OR oe.quotation IS NULL) AND
+ NOT oe.closed AND
+ $oe_owner
+ rl.from_id = oe.id AND
+ rl.from_id = oi.trans_id AND
+ oe.id = oi.trans_id AND
+ rl.from_table = 'oe' AND
+ rl.to_table = 'delivery_orders' AND
+ rl.to_id = doi.delivery_order_id AND
+ oi.parts_id = doi.parts_id
+ ) tuples GROUP BY parts_id, trans_id, qty
+ ) partials
+ LEFT JOIN orderitems oi ON partials.parts_id = oi.parts_id AND partials.trans_id = oi.trans_id
+ WHERE oi.qty > doi_qty
+
+ UNION ALL
+
+ -- 4. since the join over record_links fails for sales_orders wihtout any delivery order
+ -- retrieve those without record_links at all
+ SELECT oi.id FROM orderitems oi, oe
+ WHERE
+ oe.id = oi.trans_id AND
+ oe.customer_id IS NOT NULL AND
+ (oe.quotation = 'f' OR oe.quotation IS NULL) AND
+ NOT oe.closed AND
+ $oe_owner
+ oi.trans_id NOT IN (
+ SELECT from_id
+ FROM record_links rl
+ WHERE
+ rl.from_table ='oe' AND
+ rl.to_table = 'delivery_orders'
+ )
+
+ UNION ALL
+
+ -- 5. In case someone deleted a line of the delivery_order there will be a record_link (4 fails)
+ -- but there won't be a delivery_order_items to find (3 fails too). Search for orphaned orderitems this way
+ SELECT oi.id FROM orderitems AS oi, oe, record_links AS rl
+ WHERE
+ rl.from_table = 'oe' AND
+ rl.to_table = 'delivery_orders' AND
+
+ oi.trans_id = rl.from_id AND
+ oi.parts_id NOT IN (
+ SELECT doi.parts_id FROM delivery_order_items AS doi WHERE doi.delivery_order_id = rl.to_id
+ ) AND
+
+ oe.id = oi.trans_id AND
+
+ oe.customer_id IS NOT NULL AND
+ (oe.quotation = 'f' OR oe.quotation IS NULL) AND
+ $oe_owner
+ NOT oe.closed
+ " ],
+ ]
+}
+
sub init_models {
my ($self) = @_;
},
%sort_columns,
},
- query => $delivery_plan_query,
+ query => $self->delivery_plan_query,
with_objects => [ 'order', 'order.customer', 'part' ],
);
}
+sub init_all_edit_right {
+ $::auth->assert('sales_all_edit', 1)
+}
+
sub link_to {
my ($self, $object, %params) = @_;
goto &text_value; # text, textfield, date and select
}
+sub value_as_text {
+ my $self = $_[0];
+ my $type = $self->config->type;
+
+ die 'not an accessor' if @_ > 1;
+
+ if ($type eq 'boolean') {
+ return $self->bool_value ? $::locale->text('Yes') : $::locale->text('No');
+ } elsif ($type eq 'timestamp') {
+ return $::locale->reformat_date( { dateformat => 'yy-mm-dd' }, $self->timestamp_value->ymd, $::myconfig{dateformat});
+ } elsif ($type eq 'number') {
+ return $::form->format_amount(\%::myconfig, $self->number_value, $self->config->processed_options->{PRECISION});
+ } elsif ( $type eq 'customer' ) {
+ require SL::DB::Customer;
+
+ my $id = int($self->number_value);
+ my $customer = $id ? SL::DB::Customer->new(id => $id)->load() : 0;
+ return $customer ? $customer->name : '';
+ } elsif ( $type eq 'vendor' ) {
+ require SL::DB::Vendor;
+
+ my $id = int($self->number_value);
+ return $id ? SL::DB::Vendor->new(id => $id)->load() : 0;
+ } elsif ( $type eq 'part' ) {
+ require SL::DB::Part;
+
+ my $id = int($self->number_value);
+ my $vendor = $id ? SL::DB::Part->new(id => $id)->load() : 0;
+ return $vendor ? $vendor->name : '';
+ }
+
+ goto &text_value; # text, textfield, date and select
+}
+
sub is_valid {
my ($self) = @_;
require SL::DB::Default;
require SL::DB::Business;
- my %conditions = ( query => [ $scoping_conditions ? $scoping_conditions->($spec_type) : () ] );
+ my %conditions = ( query => [ $scoping_conditions ? $scoping_conditions->($spec_type) : () ] );
+ my %conditions_for_in_use = ( query => [ $scoping_conditions ? $scoping_conditions->($spec_type) : () ] );
my $business;
if ($spec_type =~ m{^(?:customer|vendor)$}) {
}
}
- my @numbers = map { $_->$number_column } @{ $self->_get_manager_class->get_all(%conditions) };
- my %numbers_in_use = map { ( $_ => 1 ) } @numbers;
+ my %numbers_in_use = map { ( $_->$number_column => 1 ) } @{ $self->_get_manager_class->get_all(%conditions_for_in_use) };
my $range_table = $business ? $business : SL::DB::Default->get;
my $start_number = $range_table->$number_range_column;
$start_number = $range_table->articlenumber if ($number_range_column eq 'assemblynumber') && (length($start_number) < 1);
my $sequence = SL::PrefixedNumber->new(number => $start_number);
- $sequence->set_to_max(@numbers) if !$fill_holes_in_range;
+ if (!$fill_holes_in_range) {
+ my @numbers = map { $_->$number_column } @{ $self->_get_manager_class->get_all(%conditions) };
+ $sequence->set_to_max(@numbers) ;
+ }
my $new_number = $sequence->get_next;
$new_number = $sequence->get_next while $numbers_in_use{$new_number};
use SL::DB::Manager::Project;
use SL::DB::Helper::CustomVariables(
- module => 'Project',
+ module => 'Projects',
cvars_alias => 1,
);
my $vc = $form->{vc} eq "customer" ? "customer" : "vendor";
my $query =
- qq|SELECT dord.id, dord.donumber, dord.ordnumber,
+ qq|SELECT dord.id, dord.donumber, dord.ordnumber, dord.cusordnumber,
dord.transdate, dord.reqdate,
ct.${vc}number, ct.name, dord.${vc}_id, dord.globalproject_id,
dord.closed, dord.delivered, dord.shippingpoint, dord.shipvia,
my $rc = $dbh->commit();
$form->{saved_donumber} = $form->{donumber};
-
+ $form->{saved_ordnumber} = $form->{ordnumber};
+ $form->{saved_cusordnumber} = $form->{cusordnumber};
+
Common::webdav_folder($form);
$main::lxdebug->leave_sub();
$sth = prepare_execute_query($form, $dbh, $query, @do_ids);
delete $form->{"${vc}_id"};
+ my $pos = 0;
+ $form->{ordnumber_array} = ' ';
+ $form->{cusordnumber_array} = ' ';
while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
if ($form->{"${vc}_id"} && ($ref->{"${vc}_id"} != $form->{"${vc}_id"})) {
$sth->finish();
map { $form->{$_} = $ref->{$_} } keys %$ref if ($ref);
$form->{donumber_array} .= $form->{donumber} . ' ';
+ $pos = index($form->{ordnumber_array},' ' . $form->{ordnumber} . ' ');
+ if ($pos == -1) {
+ $form->{ordnumber_array} .= $form->{ordnumber} . ' ';
+ }
+ $pos = index($form->{cusordnumber_array},' ' . $form->{cusordnumber} . ' ');
+ if ($pos == -1) {
+ $form->{cusordnumber_array} .= $form->{cusordnumber} . ' ';
+ }
}
$sth->finish();
$form->{donumber_array} =~ s/\s*$//g;
+ $form->{ordnumber_array} =~ s/ //;
+ $form->{ordnumber_array} =~ s/\s*$//g;
+ $form->{cusordnumber_array} =~ s/ //;
+ $form->{cusordnumber_array} =~ s/\s*$//g;
$form->{saved_donumber} = $form->{donumber};
+ $form->{saved_ordnumber} = $form->{ordnumber};
+ $form->{saved_cusordnumber} = $form->{cusordnumber};
# if not given, fill transdate with current_date
$form->{transdate} = $form->current_date($myconfig) unless $form->{transdate};
my $subtotal_header = 0;
my $subposition = 0;
- my (@project_ids, %projectnumbers, %projectdescriptions);
+ my (@project_ids);
push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"});
push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"});
}
+ my $projects = [];
+ my %projects_by_id;
if (@project_ids) {
- $query = "SELECT id, projectnumber, description FROM project WHERE id IN (" .
- join(", ", map("?", @project_ids)) . ")";
- $sth = prepare_execute_query($form, $dbh, $query, @project_ids);
- while (my $ref = $sth->fetchrow_hashref()) {
- $projectnumbers{$ref->{id}} = $ref->{projectnumber};
- $projectdescriptions{$ref->{id}} = $ref->{description};
- }
- $sth->finish();
+ $projects = SL::DB::Manager::Project->get_all(query => [ id => \@project_ids ]);
+ %projects_by_id = map { $_->id => $_ } @$projects;
}
- $form->{"globalprojectnumber"} =
- $projectnumbers{$form->{"globalproject_id"}};
- $form->{"globalprojectdescription"} =
- $projectdescriptions{$form->{"globalproject_id"}};
+ if ($projects_by_id{$form->{"globalproject_id"}}) {
+ $form->{globalprojectnumber} = $projects_by_id{$form->{"globalproject_id"}}->projectnumber;
+ $form->{globalprojectdescription} = $projects_by_id{$form->{"globalproject_id"}}->description;
+
+ for (@{ $projects_by_id{$form->{"globalproject_id"}}->cvars_by_config }) {
+ $form->{"project_cvar_" . $_->config->name} = $_->value_as_text;
+ }
+ }
my $q_pg = qq|SELECT p.partnumber, p.description, p.unit, a.qty, pg.partsgroup
FROM assembly a
my $num_si = 0;
my $ic_cvar_configs = CVar->get_configs(module => 'IC');
+ my $project_cvar_configs = CVar->get_configs(module => 'Projects');
$form->{TEMPLATE_ARRAYS} = { };
IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form);
map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays);
push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
+ push @arrays, map { "project_cvar_$_->{name}" } @{ $project_cvar_configs };
$form->get_lists('price_factors' => 'ALL_PRICE_FACTORS');
my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} };
}
my $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || { 'factor' => 1 };
+ my $project = $projects_by_id{$form->{"project_id_$i"}} || SL::DB::Project->new;
push @{ $form->{TEMPLATE_ARRAYS}{runningnumber} }, $position;
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"};
push @{ $form->{TEMPLATE_ARRAYS}{partnotes} }, $form->{"partnotes_$i"};
push @{ $form->{TEMPLATE_ARRAYS}{serialnumber} }, $form->{"serialnumber_$i"};
push @{ $form->{TEMPLATE_ARRAYS}{reqdate} }, $form->{"reqdate_$i"};
- push @{ $form->{TEMPLATE_ARRAYS}{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}};
- push @{ $form->{TEMPLATE_ARRAYS}{projectdescription} },
- $projectdescriptions{$form->{"project_id_$i"}};
+ push @{ $form->{TEMPLATE_ARRAYS}{projectnumber} }, $project->projectnumber;
+ push @{ $form->{TEMPLATE_ARRAYS}{projectdescription} }, $project->description;
if ($form->{"subtotal_$i"} && $subtotal_header && ($subtotal_header != $i)) {
$subtotal_header = 0;
push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} },
CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_)
for @{ $ic_cvar_configs };
+
+ push @{ $form->{TEMPLATE_ARRAYS}->{"project_cvar_" . $_->config->name} }, $_->value_as_text for @{ $project->cvars_by_config };
}
$form->{totalweight} = $form->format_amount($myconfig, $totalweight, 3);
sub _get_employees {
$main::lxdebug->enter_sub();
- my ($self, $dbh, $default_key, $key) = @_;
+ my ($self, $dbh, $params) = @_;
+
+ my $deleted = 0;
+
+ my $key;
+ if (ref $params eq 'HASH') {
+ $key = $params->{key};
+ $deleted = $params->{deleted};
+
+ } else {
+ $key = $params;
+ }
- $key = $default_key unless ($key);
- $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee ORDER BY lower(name)|);
+ $key ||= "all_employees";
+ my $filter = $deleted ? '' : 'WHERE NOT COALESCE(deleted, FALSE)';
+ $self->{$key} = selectall_hashref_query($self, $dbh, qq|SELECT * FROM employee $filter ORDER BY lower(name)|);
$main::lxdebug->leave_sub();
}
}
if ($params{"employees"}) {
- $self->_get_employees($dbh, "all_employees", $params{"employees"});
+ $self->_get_employees($dbh, $params{"employees"});
}
if ($params{"salesmen"}) {
# add assembly records
if ($form->{item} eq 'assembly') {
+ # check additional assembly row
+ my $i = $form->{assembly_rows};
+ # if last row is not empty add them
+ if ($form->{"partnumber_$i"} ne "") {
+ $query = qq|SELECT id FROM parts WHERE partnumber = ?|;
+ my ($partid) = selectrow_query($form, $dbh, $query,$form->{"partnumber_$i"} );
+ if ( $partid ) {
+ $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"});
+ $form->{"id_$i"} = $partid;
+ $form->{"bom_$i"} = 0;
+ $form->{assembly_rows}++;
+ }
+ else {
+ $::form->error($::locale->text("uncorrect partnumber ").$form->{"partnumber_$i"});
+ }
+ }
for my $i (1 .. $form->{assembly_rows}) {
$form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"});
do_query($form, $dbh, $query, @values);
}
}
-
my @a = localtime;
$a[5] += 1900;
$a[4]++;
my $query = qq|SELECT date | . conv_dateq($form->{duedate}) . qq| - date | . conv_dateq($form->{invdate}) . qq| AS terms|;
($form->{terms}) = selectrow_query($form, $dbh, $query);
- my (@project_ids, %projectnumbers, %projectdescriptions);
+ my (@project_ids);
$form->{TEMPLATE_ARRAYS} = {};
push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"});
push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"});
}
+ my $projects = [];
+ my %projects_by_id;
if (@project_ids) {
- $query = "SELECT id, projectnumber, description FROM project WHERE id IN (" .
- join(", ", map({ "?" } @project_ids)) . ")";
- $sth = $dbh->prepare($query);
- $sth->execute(@project_ids) ||
- $form->dberror($query . " (" . join(", ", @project_ids) . ")");
- while (my $ref = $sth->fetchrow_hashref()) {
- $projectnumbers{$ref->{id}} = $ref->{projectnumber};
- $projectdescriptions{$ref->{id}} = $ref->{description};
- }
- $sth->finish();
+ $projects = SL::DB::Manager::Project->get_all(query => [ id => \@project_ids ]);
+ %projects_by_id = map { $_->id => $_ } @$projects;
}
- $form->{"globalprojectnumber"} =
- $projectnumbers{$form->{"globalproject_id"}};
- $form->{"globalprojectdescription"} =
- $projectdescriptions{$form->{"globalproject_id"}};
+ if ($projects_by_id{$form->{"globalproject_id"}}) {
+ $form->{globalprojectnumber} = $projects_by_id{$form->{"globalproject_id"}}->projectnumber;
+ $form->{globalprojectdescription} = $projects_by_id{$form->{"globalproject_id"}}->description;
+
+ for (@{ $projects_by_id{$form->{"globalproject_id"}}->cvars_by_config }) {
+ $form->{"project_cvar_" . $_->config->name} = $_->value_as_text;
+ }
+ }
my $tax = 0;
my $item;
IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form);
my $ic_cvar_configs = CVar->get_configs(module => 'IC');
+ my $project_cvar_configs = CVar->get_configs(module => 'Projects');
my @arrays =
qw(runningnumber number description longdescription qty ship unit bin
price_factor price_factor_name partsgroup weight lineweight);
push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
+ push @arrays, map { "project_cvar_$_->{name}" } @{ $project_cvar_configs };
my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber);
push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2);
push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal_nofmt} }, $nodiscount_linetotal;
- push(@{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}});
- push(@{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $projectdescriptions{$form->{"project_id_$i"}});
+ my $project = $projects_by_id{$form->{"project_id_$i"}} || SL::DB::Project->new;
+
+ push @{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $project->projectnumber;
+ push @{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $project->description;
my $lineweight = $form->{"qty_$i"} * $form->{"weight_$i"};
$totalweight += $lineweight;
push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} },
CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_)
for @{ $ic_cvar_configs };
+
+ push @{ $form->{TEMPLATE_ARRAYS}->{"project_cvar_" . $_->config->name} }, $_->value_as_text for @{ $project->cvars_by_config };
}
}
my $menuitem = $menu->{$item};
my $olabel = apply { s/.*--// } $item;
my $ml = apply { s/--.*// } $item;
- my $icon_class = apply { y/ /-/ } $item;
+ my $icon_class = apply { $_ =lc $_; s/[^a-z0-9_-]/-/g } $item;
my $spacer = "s" . (0 + $item =~ s/--/--/g);
next if $level && $item ne "$level--$olabel";
my $tax_rate;
my $taxamount;
- my (@project_ids, %projectnumbers, %projectdescriptions);
+ my (@project_ids);
push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"});
push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"});
}
+ my $projects = [];
+ my %projects_by_id;
if (@project_ids) {
- $query = "SELECT id, projectnumber, description FROM project WHERE id IN (" .
- join(", ", map("?", @project_ids)) . ")";
- $sth = prepare_execute_query($form, $dbh, $query, @project_ids);
- while (my $ref = $sth->fetchrow_hashref()) {
- $projectnumbers{$ref->{id}} = $ref->{projectnumber};
- $projectdescriptions{$ref->{id}} = $ref->{description};
- }
- $sth->finish();
+ $projects = SL::DB::Manager::Project->get_all(query => [ id => \@project_ids ]);
+ %projects_by_id = map { $_->id => $_ } @$projects;
}
- $form->{"globalprojectnumber"} = $projectnumbers{$form->{"globalproject_id"}};
- $form->{"globalprojectdescription"} = $projectdescriptions{$form->{"globalproject_id"}};
+ if ($projects_by_id{$form->{"globalproject_id"}}) {
+ $form->{globalprojectnumber} = $projects_by_id{$form->{"globalproject_id"}}->projectnumber;
+ $form->{globalprojectdescription} = $projects_by_id{$form->{"globalproject_id"}}->description;
+
+ for (@{ $projects_by_id{$form->{"globalproject_id"}}->cvars_by_config }) {
+ $form->{"project_cvar_" . $_->config->name} = $_->value_as_text;
+ }
+ }
$form->{discount} = [];
IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form);
my $ic_cvar_configs = CVar->get_configs(module => 'IC');
+ my $project_cvar_configs = CVar->get_configs(module => 'Projects');
my @arrays =
qw(runningnumber number description longdescription qty ship unit bin
price_factor price_factor_name partsgroup weight lineweight);
push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
+ push @arrays, map { "project_cvar_$_->{name}" } @{ $project_cvar_configs };
my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber);
$nodiscount += $linetotal;
}
+ my $project = $projects_by_id{$form->{"project_id_$i"}} || SL::DB::Project->new;
+
push @{ $form->{TEMPLATE_ARRAYS}->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2);
push @{ $form->{TEMPLATE_ARRAYS}->{linetotal_nofmt} }, $linetotal_exact;
push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2);
push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal_nofmt} }, $nodiscount_linetotal;
- push(@{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}});
- push(@{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $projectdescriptions{$form->{"project_id_$i"}});
+ push @{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $project->projectnumber;
+ push @{ $form->{TEMPLATE_ARRAYS}->{projectdescription} }, $project->description;
my $lineweight = $form->{"qty_$i"} * $form->{"weight_$i"};
$totalweight += $lineweight;
push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} },
CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_)
for @{ $ic_cvar_configs };
+
+ push @{ $form->{TEMPLATE_ARRAYS}->{"project_cvar_" . $_->config->name} }, $_->value_as_text for @{ $project->cvars_by_config };
}
}
$form->{oldvcname} = $form->{"old$form->{vc}"};
$form->{oldvcname} =~ s/--.*//;
- if ($form->{resubmit}) {
- my $dispatch_to_popup = '';
- if ($form->{format} eq "html") {
- $dispatch_to_popup .= "window.open('about:blank','Beleg'); document.do.target = 'Beleg';";
- }
- # emulate click for resubmitting actions
- $dispatch_to_popup .= "document.do.${_}.click(); " for grep { /^action_/ } keys %$form;
+ my $dispatch_to_popup = '';
+ if ($form->{resubmit} && ($form->{format} eq "html")) {
+ $dispatch_to_popup = "window.open('about:blank','Beleg'); document.do.target = 'Beleg';";
$dispatch_to_popup .= "document.do.submit();";
- $::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup})");
+ } elsif ($form->{resubmit}) {
+ # emulate click for resubmitting actions
+ $dispatch_to_popup = "document.do.${_}.click(); " for grep { /^action_/ } keys %$form;
}
+ $::request->{layout}->add_javascripts_inline("\$(function(){$dispatch_to_popup})");
+
my $follow_up_vc = $form->{ $form->{vc} eq 'customer' ? 'customer' : 'vendor' };
$follow_up_vc =~ s/--\d*\s*$//;
my @columns = qw(
ids transdate reqdate
id donumber
- ordnumber customernumber
+ ordnumber customernumber cusordnumber
name employee salesman
shipvia globalprojectnumber
transaction_description department
my $report = SL::ReportGenerator->new(\%myconfig, $form);
my @hidden_variables = map { "l_${_}" } @columns;
- push @hidden_variables, $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered donumber ordnumber serialnumber
+ push @hidden_variables, $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered donumber ordnumber serialnumber cusordnumber
transaction_description transdatefrom transdateto reqdatefrom reqdateto
type vc employee_id salesman_id project_id);
'donumber' => { 'text' => $locale->text('Delivery Order'), },
'ordnumber' => { 'text' => $locale->text('Order'), },
'customernumber' => { 'text' => $locale->text('Customer Number'), },
+ 'cusordnumber' => { 'text' => $locale->text('Customer Order Number'), },
'name' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer') : $locale->text('Vendor'), },
'employee' => { 'text' => $locale->text('Employee'), },
'salesman' => { 'text' => $locale->text('Salesman'), },
# Hinweis: delete gibt den wert zurueck und loescht danach das element (nett und einfach)
# $shell: perldoc perlunc; /delete EXPR
$form->{donumber} = delete $form->{donumber_array};
+ $form->{ordnumber} = delete $form->{ordnumber_array};
+ $form->{cusordnumber} = delete $form->{cusordnumber_array};
$form->{deliverydate} = $form->{transdate};
$form->{transdate} = $form->current_date(\%myconfig);
$form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1);
$form->{rowcount}--;
$form->{invdate} = $form->current_date(\%myconfig);
$form->{duedate} = $form->get_duedate(\%myconfig, $form->{invdate}) || $form->{invdate};
+ $form->{employee_id} = SL::DB::Manager::Employee->current->id;
# remember pricegroups for "use as new"
IS->get_pricegroups_for_parts(\%myconfig, \%$form);
$::lxdebug->enter_sub;
$::auth->assert('report');
- my $defaults = SL::DB::Default->get;
- $::form->error($::locale->text('No print templates have been created for this client yet. Please do so in the client configuration.')) if !$defaults->templates;
- $::form->{templates} = $defaults->templates;
$::form->{decimalplaces} = $::form->{decimalplaces} * 1 || 2;
$::form->{padding} = " ";
$::form->{bold} = "<b>";
.icon16 { background: url(../image/maps/icons16.png) 16px 0px no-repeat; padding: 0; width: 16px; height: 16px; }
-.icon16.AP--Add-Purchase-Order { background-position: -0px 0px; }
-.icon16.AP--Add-RFQ { background-position: -16px 0px; }
-.icon16.AP { background-position: -32px 0px; }
-.icon16.AP--Reports { background-position: -48px 0px; }
-.icon16.AP--Reports--Purchase-Orders { background-position: -64px 0px; }
-.icon16.AP--Reports--RFQs { background-position: -80px 0px; }
-.icon16.AR--Add-Credit-Note { background-position: -96px 0px; }
-.icon16.AR--Add-Delivery-Order { background-position: -112px 0px; }
-.icon16.AR--Add-Dunning { background-position: -128px 0px; }
-.icon16.AR--Add-Quotation { background-position: -144px 0px; }
-.icon16.AR--Add-Sales-Invoice { background-position: -160px 0px; }
-.icon16.AR--Add-Sales-Order { background-position: -176px 0px; }
-.icon16.AR { background-position: -192px 0px; }
-.icon16.AR--Reports--Delivery-Orders { background-position: -208px 0px; }
-.icon16.AR--Reports--Dunnings { background-position: -224px 0px; }
-.icon16.AR--Reports--Invoices { background-position: -240px 0px; }
-.icon16.AR--Reports { background-position: -256px 0px; }
-.icon16.AR--Reports--Quotations { background-position: -272px 0px; }
-.icon16.AR--Reports--Sales-Orders { background-position: -288px 0px; }
-.icon16.Batch-Printing--Packing-Lists { background-position: -304px 0px; }
-.icon16.Batch-Printing { background-position: -320px 0px; }
-.icon16.Batch-Printing--Purchase-Orders { background-position: -336px 0px; }
-.icon16.Batch-Printing--Quotations { background-position: -352px 0px; }
-.icon16.Batch-Printing--Receipts { background-position: -368px 0px; }
-.icon16.Batch-Printing--RFQs { background-position: -384px 0px; }
-.icon16.Batch-Printing--Sales-Invoices { background-position: -400px 0px; }
-.icon16.Batch-Printing--Sales-Orders { background-position: -416px 0px; }
-.icon16.Cash--Payment { background-position: -432px 0px; }
-.icon16.Cash { background-position: -448px 0px; }
-.icon16.Cash--Receipt { background-position: -464px 0px; }
-.icon16.Cash--Reconciliation { background-position: -480px 0px; }
-.icon16.Cash--Reports--Payments { background-position: -496px 0px; }
-.icon16.Cash--Reports { background-position: -512px 0px; }
-.icon16.Cash--Reports--Receipts { background-position: -528px 0px; }
-.icon16.CRM--Admin--Benutzer { background-position: -544px 0px; }
-.icon16.CRM--Admin--Dokumentvorlage { background-position: -560px 0px; }
-.icon16.CRM--Admin--Etiketten { background-position: -576px 0px; }
-.icon16.CRM--Admin--Gruppen { background-position: -592px 0px; }
-.icon16.CRM--Admin--Mitteilungen { background-position: -608px 0px; }
-.icon16.CRM--Admin { background-position: -624px 0px; }
-.icon16.CRM--Admin--Status { background-position: -640px 0px; }
-.icon16.CRM--Auftragschance { background-position: -656px 0px; }
-.icon16.CRM--eMail { background-position: -672px 0px; }
-.icon16.CRM--Hilfe { background-position: -688px 0px; }
-.icon16.CRM--Kunden { background-position: -704px 0px; }
-.icon16.CRM--Lieferant { background-position: -720px 0px; }
-.icon16.CRM--Notizen { background-position: -736px 0px; }
-.icon16.CRM--Personen { background-position: -752px 0px; }
-.icon16.CRM { background-position: -768px 0px; }
-.icon16.CRM--Schnellsuche { background-position: -784px 0px; }
-.icon16.CRM--Service { background-position: -800px 0px; }
-.icon16.CRM--Termine { background-position: -816px 0px; }
-.icon16.CRM--Wiedervorlage { background-position: -832px 0px; }
-.icon16.CRM--Wissens-DB { background-position: -848px 0px; }
-.icon16.General-Ledger--Add-AP-Transaction { background-position: -864px 0px; }
-.icon16.General-Ledger--Add-AR-Transaction { background-position: -880px 0px; }
-.icon16.General-Ledger--Add-Transaction { background-position: -896px 0px; }
-.icon16.General-Ledger--DATEV---Export-Assistent { background-position: -912px 0px; }
-.icon16.General-Ledger { background-position: -928px 0px; }
-.icon16.General-Ledger--Reports--AP-Aging { background-position: -944px 0px; }
-.icon16.General-Ledger--Reports--AR-Aging { background-position: -960px 0px; }
-.icon16.General-Ledger--Reports--Journal { background-position: -976px 0px; }
-.icon16.General-Ledger--Reports { background-position: -992px 0px; }
-.icon16.Master-Data--Add-Assembly { background-position: -1008px 0px; }
-.icon16.Master-Data--Add-Customer { background-position: -1024px 0px; }
-.icon16.Master-Data--Add-License { background-position: -1040px 0px; }
-.icon16.Master-Data--Add-Part { background-position: -1056px 0px; }
-.icon16.Master-Data--Add-Project { background-position: -1072px 0px; }
-.icon16.Master-Data--Add-Service { background-position: -1088px 0px; }
-.icon16.Master-Data--Add-Vendor { background-position: -1104px 0px; }
-.icon16.Master-Data { background-position: -1120px 0px; }
-.icon16.Master-Data--Reports--Assemblies { background-position: -1136px 0px; }
-.icon16.Master-Data--Reports--Customers { background-position: -1152px 0px; }
-.icon16.Master-Data--Reports--Licenses { background-position: -1168px 0px; }
-.icon16.Master-Data--Reports--Parts { background-position: -1184px 0px; }
-.icon16.Master-Data--Reports { background-position: -1200px 0px; }
-.icon16.Master-Data--Reports--Projects { background-position: -1216px 0px; }
-.icon16.Master-Data--Reports--Projecttransactions { background-position: -1232px 0px; }
-.icon16.Master-Data--Reports--Services { background-position: -1248px 0px; }
-.icon16.Master-Data--Reports--Vendors { background-position: -1264px 0px; }
-.icon16.Master-Data--Update-Prices { background-position: -1280px 0px; }
-.icon16.MDI-Text-Editor-16x16 { background-position: -1296px 0px; }
-.icon16.Neues-Fenster { background-position: -1312px 0px; }
-.icon16.Program--Logout { background-position: -1328px 0px; }
-.icon16.Program { background-position: -1344px 0px; }
-.icon16.Program--Preferences { background-position: -1360px 0px; }
-.icon16.Program--Version { background-position: -1376px 0px; }
-.icon16.Reports--Balance-Sheet { background-position: -1392px 0px; }
-.icon16.Reports--Chart-of-Accounts { background-position: -1408px 0px; }
-.icon16.Reports--Income-Statement { background-position: -1424px 0px; }
-.icon16.Reports { background-position: -1440px 0px; }
-.icon16.Reports--UStVa { background-position: -1456px 0px; }
-.icon16.System { background-position: -1472px 0px; }
-.icon16.Warehouse { background-position: -1488px 0px; }
-.icon16.Warehouse--Produce-Assembly { background-position: -1504px 0px; }
+.icon16.ap--add-purchase-order { background-position: -0px 0px; }
+.icon16.ap--add-rfq { background-position: -16px 0px; }
+.icon16.ap { background-position: -32px 0px; }
+.icon16.ap--reports { background-position: -48px 0px; }
+.icon16.ap--reports--purchase-orders { background-position: -64px 0px; }
+.icon16.ap--reports--rfqs { background-position: -80px 0px; }
+.icon16.ar--add-credit-note { background-position: -96px 0px; }
+.icon16.ar--add-delivery-order { background-position: -112px 0px; }
+.icon16.ar--add-dunning { background-position: -128px 0px; }
+.icon16.ar--add-quotation { background-position: -144px 0px; }
+.icon16.ar--add-sales-invoice { background-position: -160px 0px; }
+.icon16.ar--add-sales-order { background-position: -176px 0px; }
+.icon16.ar { background-position: -192px 0px; }
+.icon16.ar--reports--delivery-orders { background-position: -208px 0px; }
+.icon16.ar--reports--dunnings { background-position: -224px 0px; }
+.icon16.ar--reports--invoices--credit-notes---ar-transactions { background-position: -240px 0px; }
+.icon16.ar--reports { background-position: -256px 0px; }
+.icon16.ar--reports--quotations { background-position: -272px 0px; }
+.icon16.ar--reports--sales-orders { background-position: -288px 0px; }
+.icon16.batch-printing--packing-lists { background-position: -304px 0px; }
+.icon16.batch-printing { background-position: -320px 0px; }
+.icon16.batch-printing--purchase-orders { background-position: -336px 0px; }
+.icon16.batch-printing--quotations { background-position: -352px 0px; }
+.icon16.batch-printing--receipts { background-position: -368px 0px; }
+.icon16.batch-printing--rfqs { background-position: -384px 0px; }
+.icon16.batch-printing--sales-invoices { background-position: -400px 0px; }
+.icon16.batch-printing--sales-orders { background-position: -416px 0px; }
+.icon16.cash--payment { background-position: -432px 0px; }
+.icon16.cash { background-position: -448px 0px; }
+.icon16.cash--receipt { background-position: -464px 0px; }
+.icon16.cash--reconciliation { background-position: -480px 0px; }
+.icon16.cash--reports--payments { background-position: -496px 0px; }
+.icon16.cash--reports { background-position: -512px 0px; }
+.icon16.cash--reports--receipts { background-position: -528px 0px; }
+.icon16.crm--add--customer { background-position: -544px 0px; }
+.icon16.crm--add--person { background-position: -560px 0px; }
+.icon16.crm--add--vendor { background-position: -576px 0px; }
+.icon16.crm--admin--document-template { background-position: -592px 0px; }
+.icon16.crm--admin--label { background-position: -608px 0px; }
+.icon16.crm--admin--message { background-position: -624px 0px; }
+.icon16.crm--admin { background-position: -640px 0px; }
+.icon16.crm--admin--status { background-position: -656px 0px; }
+.icon16.crm--admin--user-groups { background-position: -672px 0px; }
+.icon16.crm--admin--user { background-position: -688px 0px; }
+.icon16.crm--appointments { background-position: -704px 0px; }
+.icon16.crm--e-mail { background-position: -720px 0px; }
+.icon16.crm--follow-up { background-position: -736px 0px; }
+.icon16.crm--help { background-position: -752px 0px; }
+.icon16.crm--knowledge { background-position: -768px 0px; }
+.icon16.crm--memo { background-position: -784px 0px; }
+.icon16.crm--opportunity { background-position: -800px 0px; }
+.icon16.crm { background-position: -816px 0px; }
+.icon16.crm--search { background-position: -832px 0px; }
+.icon16.crm--service { background-position: -848px 0px; }
+.icon16.general-ledger--add-ap-transaction { background-position: -864px 0px; }
+.icon16.general-ledger--add-ar-transaction { background-position: -880px 0px; }
+.icon16.general-ledger--add-transaction { background-position: -896px 0px; }
+.icon16.general-ledger--datev---export-assistent { background-position: -912px 0px; }
+.icon16.general-ledger { background-position: -928px 0px; }
+.icon16.general-ledger--reports--ap-aging { background-position: -944px 0px; }
+.icon16.general-ledger--reports--ar-aging { background-position: -960px 0px; }
+.icon16.general-ledger--reports--journal { background-position: -976px 0px; }
+.icon16.general-ledger--reports { background-position: -992px 0px; }
+.icon16.master-data--add-assembly { background-position: -1008px 0px; }
+.icon16.master-data--add-customer { background-position: -1024px 0px; }
+.icon16.master-data--add-license { background-position: -1040px 0px; }
+.icon16.master-data--add-part { background-position: -1056px 0px; }
+.icon16.master-data--add-project { background-position: -1072px 0px; }
+.icon16.master-data--add-service { background-position: -1088px 0px; }
+.icon16.master-data--add-vendor { background-position: -1104px 0px; }
+.icon16.master-data { background-position: -1120px 0px; }
+.icon16.master-data--reports--assemblies { background-position: -1136px 0px; }
+.icon16.master-data--reports--customers { background-position: -1152px 0px; }
+.icon16.master-data--reports--licenses { background-position: -1168px 0px; }
+.icon16.master-data--reports--parts { background-position: -1184px 0px; }
+.icon16.master-data--reports { background-position: -1200px 0px; }
+.icon16.master-data--reports--projects { background-position: -1216px 0px; }
+.icon16.master-data--reports--projecttransactions { background-position: -1232px 0px; }
+.icon16.master-data--reports--services { background-position: -1248px 0px; }
+.icon16.master-data--reports--vendors { background-position: -1264px 0px; }
+.icon16.master-data--update-prices { background-position: -1280px 0px; }
+.icon16.mdi-text-editor-16x16 { background-position: -1296px 0px; }
+.icon16.neues-fenster { background-position: -1312px 0px; }
+.icon16.program--logout { background-position: -1328px 0px; }
+.icon16.program { background-position: -1344px 0px; }
+.icon16.program--preferences { background-position: -1360px 0px; }
+.icon16.program--version { background-position: -1376px 0px; }
+.icon16.reports--balance-sheet { background-position: -1392px 0px; }
+.icon16.reports--chart-of-accounts { background-position: -1408px 0px; }
+.icon16.reports--income-statement { background-position: -1424px 0px; }
+.icon16.reports { background-position: -1440px 0px; }
+.icon16.reports--ustva { background-position: -1456px 0px; }
+.icon16.system { background-position: -1472px 0px; }
+.icon16.warehouse { background-position: -1488px 0px; }
+.icon16.warehouse--produce-assembly { background-position: -1504px 0px; }
.icon24 { background: url(../image/maps/icons24.png) 24px 0px no-repeat; padding: 0; width: 24px; height: 24px; }
-.icon24.AP--Add-Purchase-Order { background-position: -0px 0px; }
-.icon24.AP--Add-RFQ { background-position: -24px 0px; }
-.icon24.AP { background-position: -48px 0px; }
-.icon24.AP--Reports { background-position: -72px 0px; }
-.icon24.AP--Reports--Purchase-Orders { background-position: -96px 0px; }
-.icon24.AP--Reports--RFQs { background-position: -120px 0px; }
-.icon24.AR--Add-Dunning { background-position: -144px 0px; }
-.icon24.AR--Add-Quotation { background-position: -168px 0px; }
-.icon24.AR--Add-Sales-Invoice { background-position: -192px 0px; }
-.icon24.AR--Add-Sales-Order { background-position: -216px 0px; }
-.icon24.AR { background-position: -240px 0px; }
-.icon24.AR--Reports--Dunnings { background-position: -264px 0px; }
-.icon24.AR--Reports--Invoices { background-position: -288px 0px; }
-.icon24.AR--Reports { background-position: -312px 0px; }
-.icon24.AR--Reports--Quotations { background-position: -336px 0px; }
-.icon24.AR--Reports--Sales-Orders { background-position: -360px 0px; }
-.icon24.Batch-Printing--Packing-Lists { background-position: -384px 0px; }
-.icon24.Batch-Printing { background-position: -408px 0px; }
-.icon24.Batch-Printing--Purchase-Orders { background-position: -432px 0px; }
-.icon24.Batch-Printing--Quotations { background-position: -456px 0px; }
-.icon24.Batch-Printing--Receipts { background-position: -480px 0px; }
-.icon24.Batch-Printing--RFQs { background-position: -504px 0px; }
-.icon24.Batch-Printing--Sales-Invoices { background-position: -528px 0px; }
-.icon24.Batch-Printing--Sales-Orders { background-position: -552px 0px; }
-.icon24.Cash--Payment { background-position: -576px 0px; }
-.icon24.Cash { background-position: -600px 0px; }
-.icon24.Cash--Receipt { background-position: -624px 0px; }
-.icon24.Cash--Reconciliation { background-position: -648px 0px; }
-.icon24.Cash--Reports--Payments { background-position: -672px 0px; }
-.icon24.Cash--Reports { background-position: -696px 0px; }
-.icon24.Cash--Reports--Receipts { background-position: -720px 0px; }
-.icon24.CRM--Admin--Benutzer { background-position: -744px 0px; }
-.icon24.CRM--Admin--Dokumentvorlage { background-position: -768px 0px; }
-.icon24.CRM--Admin--Etiketten { background-position: -792px 0px; }
-.icon24.CRM--Admin--Gruppen { background-position: -816px 0px; }
-.icon24.CRM--Admin--Mitteilungen { background-position: -840px 0px; }
-.icon24.CRM--Admin { background-position: -864px 0px; }
-.icon24.CRM--Admin--Status { background-position: -888px 0px; }
-.icon24.CRM--Auftragschance { background-position: -912px 0px; }
-.icon24.CRM--eMail { background-position: -936px 0px; }
-.icon24.CRM--Hilfe { background-position: -960px 0px; }
-.icon24.CRM--Kunden { background-position: -984px 0px; }
-.icon24.CRM--Lieferant { background-position: -1008px 0px; }
-.icon24.CRM--Notizen { background-position: -1032px 0px; }
-.icon24.CRM--Personen { background-position: -1056px 0px; }
-.icon24.CRM { background-position: -1080px 0px; }
-.icon24.CRM--Schnellsuche { background-position: -1104px 0px; }
-.icon24.CRM--Service { background-position: -1128px 0px; }
-.icon24.CRM--Termine { background-position: -1152px 0px; }
-.icon24.CRM--Wiedervorlage { background-position: -1176px 0px; }
-.icon24.CRM--Wissens-DB { background-position: -1200px 0px; }
-.icon24.General-Ledger--Add-AP-Transaction { background-position: -1224px 0px; }
-.icon24.General-Ledger--Add-AR-Transaction { background-position: -1248px 0px; }
-.icon24.General-Ledger--Add-Transaction { background-position: -1272px 0px; }
-.icon24.General-Ledger--DATEV---Export-Assistent { background-position: -1296px 0px; }
-.icon24.General-Ledger { background-position: -1320px 0px; }
-.icon24.General-Ledger--Reports--AP-Aging { background-position: -1344px 0px; }
-.icon24.General-Ledger--Reports--AR-Aging { background-position: -1368px 0px; }
-.icon24.General-Ledger--Reports--Journal { background-position: -1392px 0px; }
-.icon24.General-Ledger--Reports { background-position: -1416px 0px; }
+.icon24.ap--add-purchase-order { background-position: -0px 0px; }
+.icon24.ap--add-rfq { background-position: -24px 0px; }
+.icon24.ap { background-position: -48px 0px; }
+.icon24.ap--reports { background-position: -72px 0px; }
+.icon24.ap--reports--purchase-orders { background-position: -96px 0px; }
+.icon24.ap--reports--rfqs { background-position: -120px 0px; }
+.icon24.ar--add-dunning { background-position: -144px 0px; }
+.icon24.ar--add-quotation { background-position: -168px 0px; }
+.icon24.ar--add-sales-invoice { background-position: -192px 0px; }
+.icon24.ar--add-sales-order { background-position: -216px 0px; }
+.icon24.ar { background-position: -240px 0px; }
+.icon24.ar--reports--dunnings { background-position: -264px 0px; }
+.icon24.ar--reports--invoices { background-position: -288px 0px; }
+.icon24.ar--reports { background-position: -312px 0px; }
+.icon24.ar--reports--quotations { background-position: -336px 0px; }
+.icon24.ar--reports--sales-orders { background-position: -360px 0px; }
+.icon24.batch-printing--packing-lists { background-position: -384px 0px; }
+.icon24.batch-printing { background-position: -408px 0px; }
+.icon24.batch-printing--purchase-orders { background-position: -432px 0px; }
+.icon24.batch-printing--quotations { background-position: -456px 0px; }
+.icon24.batch-printing--receipts { background-position: -480px 0px; }
+.icon24.batch-printing--rfqs { background-position: -504px 0px; }
+.icon24.batch-printing--sales-invoices { background-position: -528px 0px; }
+.icon24.batch-printing--sales-orders { background-position: -552px 0px; }
+.icon24.cash--payment { background-position: -576px 0px; }
+.icon24.cash { background-position: -600px 0px; }
+.icon24.cash--receipt { background-position: -624px 0px; }
+.icon24.cash--reconciliation { background-position: -648px 0px; }
+.icon24.cash--reports--payments { background-position: -672px 0px; }
+.icon24.cash--reports { background-position: -696px 0px; }
+.icon24.cash--reports--receipts { background-position: -720px 0px; }
+.icon24.crm--add--customer { background-position: -744px 0px; }
+.icon24.crm--add--person { background-position: -768px 0px; }
+.icon24.crm--add--vendor { background-position: -792px 0px; }
+.icon24.crm--admin--document-template { background-position: -816px 0px; }
+.icon24.crm--admin--label { background-position: -840px 0px; }
+.icon24.crm--admin--message { background-position: -864px 0px; }
+.icon24.crm--admin { background-position: -888px 0px; }
+.icon24.crm--admin--status { background-position: -912px 0px; }
+.icon24.crm--admin--user-groups { background-position: -936px 0px; }
+.icon24.crm--admin--user { background-position: -960px 0px; }
+.icon24.crm--appointments { background-position: -984px 0px; }
+.icon24.crm--email { background-position: -1008px 0px; }
+.icon24.crm--follow-up { background-position: -1032px 0px; }
+.icon24.crm--help { background-position: -1056px 0px; }
+.icon24.crm--knowledge { background-position: -1080px 0px; }
+.icon24.crm--memo { background-position: -1104px 0px; }
+.icon24.crm--opportunity { background-position: -1128px 0px; }
+.icon24.crm { background-position: -1152px 0px; }
+.icon24.crm--search { background-position: -1176px 0px; }
+.icon24.crm--service { background-position: -1200px 0px; }
+.icon24.general-ledger--add-ap-transaction { background-position: -1224px 0px; }
+.icon24.general-ledger--add-ar-transaction { background-position: -1248px 0px; }
+.icon24.general-ledger--add-transaction { background-position: -1272px 0px; }
+.icon24.general-ledger--datev---export-assistent { background-position: -1296px 0px; }
+.icon24.general-ledger { background-position: -1320px 0px; }
+.icon24.general-ledger--reports--ap-aging { background-position: -1344px 0px; }
+.icon24.general-ledger--reports--ar-aging { background-position: -1368px 0px; }
+.icon24.general-ledger--reports--journal { background-position: -1392px 0px; }
+.icon24.general-ledger--reports { background-position: -1416px 0px; }
.icon24.leftarrow_24 { background-position: -1440px 0px; }
-.icon24.Master-Data--Add-Assembly { background-position: -1464px 0px; }
-.icon24.Master-Data--Add-Customer { background-position: -1488px 0px; }
-.icon24.Master-Data--Add-License { background-position: -1512px 0px; }
-.icon24.Master-Data--Add-Part { background-position: -1536px 0px; }
-.icon24.Master-Data--Add-Project { background-position: -1560px 0px; }
-.icon24.Master-Data--Add-Service { background-position: -1584px 0px; }
-.icon24.Master-Data--Add-Vendor { background-position: -1608px 0px; }
-.icon24.Master-Data { background-position: -1632px 0px; }
-.icon24.Master-Data--Reports--Assemblies { background-position: -1656px 0px; }
-.icon24.Master-Data--Reports--Customers { background-position: -1680px 0px; }
-.icon24.Master-Data--Reports--Licenses { background-position: -1704px 0px; }
-.icon24.Master-Data--Reports--Parts { background-position: -1728px 0px; }
-.icon24.Master-Data--Reports { background-position: -1752px 0px; }
-.icon24.Master-Data--Reports--Projects { background-position: -1776px 0px; }
-.icon24.Master-Data--Reports--Projecttransactions { background-position: -1800px 0px; }
-.icon24.Master-Data--Reports--Services { background-position: -1824px 0px; }
-.icon24.Master-Data--Reports--Vendors { background-position: -1848px 0px; }
-.icon24.Neues-Fenster { background-position: -1872px 0px; }
-.icon24.Productivity { background-position: -1896px 0px; }
-.icon24.Program--Logout { background-position: -1920px 0px; }
-.icon24.Program { background-position: -1944px 0px; }
-.icon24.Program--Preferences { background-position: -1968px 0px; }
-.icon24.Program--Version { background-position: -1992px 0px; }
-.icon24.Reports--Balance-Sheet { background-position: -2016px 0px; }
-.icon24.Reports--Chart-of-Accounts { background-position: -2040px 0px; }
-.icon24.Reports--Income-Statement { background-position: -2064px 0px; }
-.icon24.Reports { background-position: -2088px 0px; }
-.icon24.Reports--UStVa { background-position: -2112px 0px; }
+.icon24.master-data--add-assembly { background-position: -1464px 0px; }
+.icon24.master-data--add-customer { background-position: -1488px 0px; }
+.icon24.master-data--add-license { background-position: -1512px 0px; }
+.icon24.master-data--add-part { background-position: -1536px 0px; }
+.icon24.master-data--add-project { background-position: -1560px 0px; }
+.icon24.master-data--add-service { background-position: -1584px 0px; }
+.icon24.master-data--add-vendor { background-position: -1608px 0px; }
+.icon24.master-data { background-position: -1632px 0px; }
+.icon24.master-data--reports--assemblies { background-position: -1656px 0px; }
+.icon24.master-data--reports--customers { background-position: -1680px 0px; }
+.icon24.master-data--reports--licenses { background-position: -1704px 0px; }
+.icon24.master-data--reports--parts { background-position: -1728px 0px; }
+.icon24.master-data--reports { background-position: -1752px 0px; }
+.icon24.master-data--reports--projects { background-position: -1776px 0px; }
+.icon24.master-data--reports--projecttransactions { background-position: -1800px 0px; }
+.icon24.master-data--reports--services { background-position: -1824px 0px; }
+.icon24.master-data--reports--vendors { background-position: -1848px 0px; }
+.icon24.neues-fenster { background-position: -1872px 0px; }
+.icon24.productivity { background-position: -1896px 0px; }
+.icon24.program--logout { background-position: -1920px 0px; }
+.icon24.program { background-position: -1944px 0px; }
+.icon24.program--preferences { background-position: -1968px 0px; }
+.icon24.program--version { background-position: -1992px 0px; }
+.icon24.reports--balance-sheet { background-position: -2016px 0px; }
+.icon24.reports--chart-of-accounts { background-position: -2040px 0px; }
+.icon24.reports--income-statement { background-position: -2064px 0px; }
+.icon24.reports { background-position: -2088px 0px; }
+.icon24.reports--ustva { background-position: -2112px 0px; }
.icon24.rightarrow_24 { background-position: -2136px 0px; }
-.icon24.System { background-position: -2160px 0px; }
-.icon24.Warehouse { background-position: -2184px 0px; }
+.icon24.system { background-position: -2160px 0px; }
+.icon24.warehouse { background-position: -2184px 0px; }
.icon32 { background: url(../image/maps/icons32.png) 32px 0px no-repeat; padding: 0; width: 32px; height: 32px; }
-.icon32.AP--Add-Purchase-Order { background-position: -0px 0px; }
-.icon32.AP--Add-RFQ { background-position: -32px 0px; }
-.icon32.AP { background-position: -64px 0px; }
-.icon32.AP--Reports { background-position: -96px 0px; }
-.icon32.AP--Reports--Purchase-Orders { background-position: -128px 0px; }
-.icon32.AP--Reports--RFQs { background-position: -160px 0px; }
-.icon32.AR--Add-Dunning { background-position: -192px 0px; }
-.icon32.AR--Add-Quotation { background-position: -224px 0px; }
-.icon32.AR--Add-Sales-Invoice { background-position: -256px 0px; }
-.icon32.AR--Add-Sales-Order { background-position: -288px 0px; }
-.icon32.AR { background-position: -320px 0px; }
-.icon32.AR--Reports--Dunnings { background-position: -352px 0px; }
-.icon32.AR--Reports--Invoices { background-position: -384px 0px; }
-.icon32.AR--Reports { background-position: -416px 0px; }
-.icon32.AR--Reports--Quotations { background-position: -448px 0px; }
-.icon32.AR--Reports--Sales-Orders { background-position: -480px 0px; }
-.icon32.Batch-Printing--Packing-Lists { background-position: -512px 0px; }
-.icon32.Batch-Printing { background-position: -544px 0px; }
-.icon32.Batch-Printing--Purchase-Orders { background-position: -576px 0px; }
-.icon32.Batch-Printing--Quotations { background-position: -608px 0px; }
-.icon32.Batch-Printing--Receipts { background-position: -640px 0px; }
-.icon32.Batch-Printing--RFQs { background-position: -672px 0px; }
-.icon32.Batch-Printing--Sales-Invoices { background-position: -704px 0px; }
-.icon32.Batch-Printing--Sales-Orders { background-position: -736px 0px; }
-.icon32.Cash--Payment { background-position: -768px 0px; }
-.icon32.Cash { background-position: -800px 0px; }
-.icon32.Cash--Receipt { background-position: -832px 0px; }
-.icon32.Cash--Reconciliation { background-position: -864px 0px; }
-.icon32.Cash--Reports--Payments { background-position: -896px 0px; }
-.icon32.Cash--Reports { background-position: -928px 0px; }
-.icon32.Cash--Reports--Receipts { background-position: -960px 0px; }
-.icon32.CRM--Admin--Benutzer { background-position: -992px 0px; }
-.icon32.CRM--Admin--Dokumentvorlage { background-position: -1024px 0px; }
-.icon32.CRM--Admin--Etiketten { background-position: -1056px 0px; }
-.icon32.CRM--Admin--Gruppen { background-position: -1088px 0px; }
-.icon32.CRM--Admin--Mitteilungen { background-position: -1120px 0px; }
-.icon32.CRM--Admin { background-position: -1152px 0px; }
-.icon32.CRM--Admin--Status { background-position: -1184px 0px; }
-.icon32.CRM--Auftragschance { background-position: -1216px 0px; }
-.icon32.CRM--eMail { background-position: -1248px 0px; }
-.icon32.CRM--Hilfe { background-position: -1280px 0px; }
-.icon32.CRM--Kunden { background-position: -1312px 0px; }
-.icon32.CRM--Lieferant { background-position: -1344px 0px; }
-.icon32.CRM--Notizen { background-position: -1376px 0px; }
-.icon32.CRM--Personen { background-position: -1408px 0px; }
-.icon32.CRM { background-position: -1440px 0px; }
-.icon32.CRM--Schnellsuche { background-position: -1472px 0px; }
-.icon32.CRM--Service { background-position: -1504px 0px; }
-.icon32.CRM--Termine { background-position: -1536px 0px; }
-.icon32.CRM--Wiedervorlage { background-position: -1568px 0px; }
-.icon32.CRM--Wissens-DB { background-position: -1600px 0px; }
-.icon32.General-Ledger--Add-AP-Transaction { background-position: -1632px 0px; }
-.icon32.General-Ledger--Add-AR-Transaction { background-position: -1664px 0px; }
-.icon32.General-Ledger--Add-Transaction { background-position: -1696px 0px; }
-.icon32.General-Ledger--DATEV---Export-Assistent { background-position: -1728px 0px; }
-.icon32.General-Ledger { background-position: -1760px 0px; }
-.icon32.General-Ledger--Reports--AP-Aging { background-position: -1792px 0px; }
-.icon32.General-Ledger--Reports--AR-Aging { background-position: -1824px 0px; }
-.icon32.General-Ledger--Reports--Journal { background-position: -1856px 0px; }
-.icon32.General-Ledger--Reports { background-position: -1888px 0px; }
-.icon32.Master-Data--Add-Assembly { background-position: -1920px 0px; }
-.icon32.Master-Data--Add-Customer { background-position: -1952px 0px; }
-.icon32.Master-Data--Add-License { background-position: -1984px 0px; }
-.icon32.Master-Data--Add-Part { background-position: -2016px 0px; }
-.icon32.Master-Data--Add-Project { background-position: -2048px 0px; }
-.icon32.Master-Data--Add-Service { background-position: -2080px 0px; }
-.icon32.Master-Data--Add-Vendor { background-position: -2112px 0px; }
-.icon32.Master-Data { background-position: -2144px 0px; }
-.icon32.Master-Data--Reports--Assemblies { background-position: -2176px 0px; }
-.icon32.Master-Data--Reports--Customers { background-position: -2208px 0px; }
-.icon32.Master-Data--Reports--Licenses { background-position: -2240px 0px; }
-.icon32.Master-Data--Reports--Parts { background-position: -2272px 0px; }
-.icon32.Master-Data--Reports { background-position: -2304px 0px; }
-.icon32.Master-Data--Reports--Projects { background-position: -2336px 0px; }
-.icon32.Master-Data--Reports--Projecttransactions { background-position: -2368px 0px; }
-.icon32.Master-Data--Reports--Services { background-position: -2400px 0px; }
-.icon32.Master-Data--Reports--Vendors { background-position: -2432px 0px; }
-.icon32.Neues-Fenster { background-position: -2464px 0px; }
-.icon32.Program--Logout { background-position: -2496px 0px; }
-.icon32.Program { background-position: -2528px 0px; }
-.icon32.Program--Preferences { background-position: -2560px 0px; }
-.icon32.Program--Version { background-position: -2592px 0px; }
-.icon32.Reports--Balance-Sheet { background-position: -2624px 0px; }
-.icon32.Reports--Chart-of-Accounts { background-position: -2656px 0px; }
-.icon32.Reports--Income-Statement { background-position: -2688px 0px; }
-.icon32.Reports { background-position: -2720px 0px; }
-.icon32.Reports--UStVa { background-position: -2752px 0px; }
-.icon32.System { background-position: -2784px 0px; }
-.icon32.Warehouse--Produce-Assembly { background-position: -2816px 0px; }
+.icon32.ap--add-purchase-order { background-position: -0px 0px; }
+.icon32.ap--add-rfq { background-position: -32px 0px; }
+.icon32.ap { background-position: -64px 0px; }
+.icon32.ap--reports { background-position: -96px 0px; }
+.icon32.ap--reports--purchase-orders { background-position: -128px 0px; }
+.icon32.ap--reports--rfqs { background-position: -160px 0px; }
+.icon32.ar--add-dunning { background-position: -192px 0px; }
+.icon32.ar--add-quotation { background-position: -224px 0px; }
+.icon32.ar--add-sales-invoice { background-position: -256px 0px; }
+.icon32.ar--add-sales-order { background-position: -288px 0px; }
+.icon32.ar { background-position: -320px 0px; }
+.icon32.ar--reports--dunnings { background-position: -352px 0px; }
+.icon32.ar--reports--invoices { background-position: -384px 0px; }
+.icon32.ar--reports { background-position: -416px 0px; }
+.icon32.ar--reports--quotations { background-position: -448px 0px; }
+.icon32.ar--reports--sales-orders { background-position: -480px 0px; }
+.icon32.batch-printing--packing-lists { background-position: -512px 0px; }
+.icon32.batch-printing { background-position: -544px 0px; }
+.icon32.batch-printing--purchase-orders { background-position: -576px 0px; }
+.icon32.batch-printing--quotations { background-position: -608px 0px; }
+.icon32.batch-printing--receipts { background-position: -640px 0px; }
+.icon32.batch-printing--rfqs { background-position: -672px 0px; }
+.icon32.batch-printing--sales-invoices { background-position: -704px 0px; }
+.icon32.batch-printing--sales-orders { background-position: -736px 0px; }
+.icon32.cash--payment { background-position: -768px 0px; }
+.icon32.cash { background-position: -800px 0px; }
+.icon32.cash--receipt { background-position: -832px 0px; }
+.icon32.cash--reconciliation { background-position: -864px 0px; }
+.icon32.cash--reports--payments { background-position: -896px 0px; }
+.icon32.cash--reports { background-position: -928px 0px; }
+.icon32.cash--reports--receipts { background-position: -960px 0px; }
+.icon32.crm--add--customer { background-position: -992px 0px; }
+.icon32.crm--add--person { background-position: -1024px 0px; }
+.icon32.crm--add--vendor { background-position: -1056px 0px; }
+.icon32.crm--admin--document-template { background-position: -1088px 0px; }
+.icon32.crm--admin--label { background-position: -1120px 0px; }
+.icon32.crm--admin--message { background-position: -1152px 0px; }
+.icon32.crm--admin { background-position: -1184px 0px; }
+.icon32.crm--admin--status { background-position: -1216px 0px; }
+.icon32.crm--admin--user-groups { background-position: -1248px 0px; }
+.icon32.crm--admin--user { background-position: -1280px 0px; }
+.icon32.crm--appointments { background-position: -1312px 0px; }
+.icon32.crm--email { background-position: -1344px 0px; }
+.icon32.crm--follow-up { background-position: -1376px 0px; }
+.icon32.crm--help { background-position: -1408px 0px; }
+.icon32.crm--knowledge { background-position: -1440px 0px; }
+.icon32.crm--memo { background-position: -1472px 0px; }
+.icon32.crm--opportunity { background-position: -1504px 0px; }
+.icon32.crm { background-position: -1536px 0px; }
+.icon32.crm--search { background-position: -1568px 0px; }
+.icon32.crm--service { background-position: -1600px 0px; }
+.icon32.general-ledger--add-ap-transaction { background-position: -1632px 0px; }
+.icon32.general-ledger--add-ar-transaction { background-position: -1664px 0px; }
+.icon32.general-ledger--add-transaction { background-position: -1696px 0px; }
+.icon32.general-ledger--datev---export-assistent { background-position: -1728px 0px; }
+.icon32.general-ledger { background-position: -1760px 0px; }
+.icon32.general-ledger--reports--ap-aging { background-position: -1792px 0px; }
+.icon32.general-ledger--reports--ar-aging { background-position: -1824px 0px; }
+.icon32.general-ledger--reports--journal { background-position: -1856px 0px; }
+.icon32.general-ledger--reports { background-position: -1888px 0px; }
+.icon32.master-data--add-assembly { background-position: -1920px 0px; }
+.icon32.master-data--add-customer { background-position: -1952px 0px; }
+.icon32.master-data--add-license { background-position: -1984px 0px; }
+.icon32.master-data--add-part { background-position: -2016px 0px; }
+.icon32.master-data--add-project { background-position: -2048px 0px; }
+.icon32.master-data--add-service { background-position: -2080px 0px; }
+.icon32.master-data--add-vendor { background-position: -2112px 0px; }
+.icon32.master-data { background-position: -2144px 0px; }
+.icon32.master-data--reports--assemblies { background-position: -2176px 0px; }
+.icon32.master-data--reports--customers { background-position: -2208px 0px; }
+.icon32.master-data--reports--licenses { background-position: -2240px 0px; }
+.icon32.master-data--reports--parts { background-position: -2272px 0px; }
+.icon32.master-data--reports { background-position: -2304px 0px; }
+.icon32.master-data--reports--projects { background-position: -2336px 0px; }
+.icon32.master-data--reports--projecttransactions { background-position: -2368px 0px; }
+.icon32.master-data--reports--services { background-position: -2400px 0px; }
+.icon32.master-data--reports--vendors { background-position: -2432px 0px; }
+.icon32.neues-fenster { background-position: -2464px 0px; }
+.icon32.program--logout { background-position: -2496px 0px; }
+.icon32.program { background-position: -2528px 0px; }
+.icon32.program--preferences { background-position: -2560px 0px; }
+.icon32.program--version { background-position: -2592px 0px; }
+.icon32.reports--balance-sheet { background-position: -2624px 0px; }
+.icon32.reports--chart-of-accounts { background-position: -2656px 0px; }
+.icon32.reports--income-statement { background-position: -2688px 0px; }
+.icon32.reports { background-position: -2720px 0px; }
+.icon32.reports--ustva { background-position: -2752px 0px; }
+.icon32.system { background-position: -2784px 0px; }
+.icon32.warehouse--produce-assembly { background-position: -2816px 0px; }
<sect2 id="Vorlagenverzeichnis-anlegen" xreflabel="Vorlagenverzeichnis anlegen">
<title>Vorlagenverzeichnis anlegen</title>
- <para>Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu
- druckenden Dokumente auswählen. Rufen Sie dazu die <guimenu>Benutzerverwaltung</guimenu> auf.</para>
+ <para>Es lässt sich ein initialer Vorlagensatz erstellen. Die LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:</para>
- <para>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
- angeben:</para>
+ <programlisting>./scripts/installation_check.pl -lv</programlisting>
+
+ <para>Der Angemmeldete Benutzer muss in einer Gruppe sein, die über das
+ Recht "Konfiguration -> Mandantenverwaltung" verfügt. Siehe auch <xref linkend="Gruppen-anlegen"/>.
+ </para>
+ <para>Im Userbereich lässt sich unter:
+ "<guimenu>System</guimenu> ->
+ <guisubmenu>Mandantenverwaltung</guisubmenu> -> <guimenuitem>Verschiedenes</guimenuitem>" die Option
+ "Neue Druckvorlagen aus Vorlagensatz erstellen" auswählen.</para>
<orderedlist>
- <listitem><para><option>Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
- Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
<listitem><para><option>Vorlagen auswählen</option>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
(<filename>Standard</filename>, <filename>f-tex</filename> oder <filename>RB</filename>.)</para></listitem>
+ <listitem><para><option>Neuer Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
+ Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
</orderedlist>
- <para>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</para>
-
- <para>Die Abhängigkeiten kann man prüfen mit:</para>
+ <para>Nach dem Speichern wird das Vorlagenverzeichnis angelegt und ist für den aktuellen Mandanten ausgewählt.
+ Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Mandanten verwendet werden.
+ Eventuell muessen Anpassungen (Logo, Erscheinungsbild, etc) noch vorgenommen werden. Den Ordner findet man im Dateisistem unter
+ <filename>./templates/[Neuer Name]</filename></para>
- <programlisting>/scripts/installation_check.pl -l</programlisting>
</sect2>
<sect2 id="Vorlagen-Standard">
'Show delete button in purchase orders?' => 'Soll der "Löschen"-Knopf bei Lieferantenaufträgen angezeigt werden?',
'Show delete button in sales delivery orders?' => 'Soll der "Löschen"-Knopf bei Verkaufslieferscheinen angezeigt werden?',
'Show delete button in sales orders?' => 'Soll der "Löschen"-Knopf bei Kundenaufträgen angezeigt werden?',
+ 'Show delivery plan' => 'Lieferplan anzeigen',
'Show details' => 'Detailsanzeige',
'Show details and reports of parts, services, assemblies' => 'Details und Berichte von Waren, Dienstleistungen und Erzeugnissen anzeigen',
'Show fields used for the best before date?' => 'Felder zur Eingabe des Mindesthaltbarkeitsdatums anzeigen?',
'transferred out' => 'ausgelagert',
'trial_balance' => 'susa',
'unconfigured' => 'unkonfiguriert',
+ 'uncorrect partnumber ' => 'Unbekannte Teilenummer ',
'up' => 'hoch',
'use program settings' => 'benutze Programmeinstellungen',
'use user config' => 'Verwende Benutzereinstellung',
action=search
[AR--Reports--Delivery Plan]
-ACCESS=sales_order_edit
+ACCESS=delivery_plan
module=controller.pl
action=DeliveryPlan/list
for (@gd_images) {
my $name = fileparse($_->{filename}, ".png");
- $name =~ s/ /-/g;
+
+ # the full grammar for valid css class names is completely bonkers (to put it mildly).
+ # so instead of trying to punch filenames into those class names, we'll
+ # just reduce them to a nice minimal set of lower case /[a-z0-9_-]*/
+ $name = lc $name;
+ $name =~ s/[^a-z0-9_-]/-/g;
print $file ".$class_for_map.$name { background-position: -$_->{h_offset}px 0px; }\n";
}
}
Getopt::Long::Configure ("bundling");
GetOptions(
"v|verbose" => \ my $v,
+ "V|no-verbose" => \ my $nv,
"a|all" => \ $check{a},
"o|optional!" => \ $check{o},
"d|devel!" => \ $check{d},
"c|color!" => \ ( my $c = 1 ),
);
+# verbos is default
+if ( $v && $nv ){
+ $v = 1;
+}elsif ($nv){
+ undef $v;
+}else{
+ $v = 1;
+}
+
# if nothing is requested check "required"
my $default_run;
if (!defined $check{a}
Don't probe for LaTeX document classes and packages in master templates. (Useful in combination with --all)
-=item C<-v. --verbose>
+=item C<-v, --verbose>
+
+Print additional info for missing dependancies (enabled by default)
+
+=item C<-V, --no-verbose>
-Print additional info for missing dependancies
+Disable verbosity
=back
--- /dev/null
+# @tag: delivery_plan_rights
+# @description: Setzt das neue Recht den Lieferplan anzuzeigen
+# @depends: release_3_0_0
+package SL::DBUpgrade2::delivery_plan_rights;
+
+use strict;
+use utf8;
+
+use parent qw(SL::DBUpgrade2::Base);
+
+use SL::DBUtils;
+
+sub run {
+ my ($self) = @_;
+
+ my $groups = $main::auth->read_groups();
+
+ foreach my $group (values %{$groups}) {
+ $group->{rights}->{delivery_plan_rights} = $group->{rights}->{sales_order_edit};
+ $main::auth->save_group($group);
+ }
+
+ return 1;
+} # end run
+
+1;
--- /dev/null
+# @tag: custom_variables_delete_via_trigger_2
+# @description: Benutzerdefinierte Variablen werden nun via Trigger gelöscht (beim Löschen von Kunden, Lieferanten, Kontaktpersonen, Waren, Dienstleistungen, Erzeugnissen und Projekten).
+# @depends: custom_variables_delete_via_trigger
+
+package SL::DBUpgrade2::custom_variables_delete_via_trigger_2;
+
+use utf8;
+use strict;
+
+use parent qw(SL::DBUpgrade2::Base);
+
+sub run {
+ my ($self) = @_;
+
+ my @queries = (
+ #Delete orphaned entries
+ q|DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id NOT IN (SELECT id FROM customer UNION SELECT id FROM vendor)
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'CT'|,
+ q|DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id NOT IN (SELECT id FROM contacts)
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'Contacts'|,
+ q|DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id NOT IN (SELECT id FROM parts)
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'IC'|,
+ q|DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id NOT IN (SELECT id FROM project)
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'Projects'|,
+
+ #Create trigger
+ q|CREATE OR REPLACE FUNCTION delete_cv_custom_variables_trigger() RETURNS trigger AS $$
+ BEGIN
+ DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id = OLD.id
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'CT';
+
+ RETURN OLD;
+ END;
+ $$ LANGUAGE plpgsql|,
+
+ q|DROP TRIGGER IF EXISTS delete_cv_custom_variables ON customer|,
+ q|DROP TRIGGER IF EXISTS delete_cv_custom_variables ON vendor|,
+
+ q|CREATE TRIGGER delete_cv_custom_variables
+ BEFORE DELETE ON customer
+ FOR EACH ROW EXECUTE PROCEDURE delete_cv_custom_variables_trigger()|,
+ q|CREATE TRIGGER delete_cv_custom_variables
+ BEFORE DELETE ON vendor
+ FOR EACH ROW EXECUTE PROCEDURE delete_cv_custom_variables_trigger()|,
+
+ #Create trigger
+ q|CREATE OR REPLACE FUNCTION delete_contact_custom_variables_trigger() RETURNS trigger AS $$
+ BEGIN
+ DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id = OLD.cp_id
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'Contacts';
+
+ RETURN OLD;
+ END;
+ $$ LANGUAGE plpgsql|,
+
+ q|DROP TRIGGER IF EXISTS delete_contact_custom_variables ON contacts|,
+
+ q|CREATE TRIGGER delete_contact_custom_variables
+ BEFORE DELETE ON contacts
+ FOR EACH ROW EXECUTE PROCEDURE delete_contact_custom_variables_trigger()|,
+
+ #Create trigger
+ q|CREATE OR REPLACE FUNCTION delete_part_custom_variables_trigger() RETURNS trigger AS $$
+ BEGIN
+ DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id = OLD.id
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'IC';
+
+ RETURN OLD;
+ END;
+ $$ LANGUAGE plpgsql|,
+
+ q|DROP TRIGGER IF EXISTS delete_part_custom_variables ON parts|,
+
+ q|CREATE TRIGGER delete_part_custom_variables
+ BEFORE DELETE ON parts
+ FOR EACH ROW EXECUTE PROCEDURE delete_part_custom_variables_trigger()|,
+
+ #Create trigger
+ q|CREATE OR REPLACE FUNCTION delete_project_custom_variables_trigger() RETURNS trigger AS $$
+ BEGIN
+ DELETE FROM custom_variables WHERE (sub_module = '' OR sub_module IS NULL)
+ AND trans_id = OLD.id
+ AND (SELECT module FROM custom_variable_configs WHERE id = config_id) = 'Projects';
+
+ RETURN OLD;
+ END;
+ $$ LANGUAGE plpgsql|,
+
+ q|DROP TRIGGER IF EXISTS delete_project_custom_variables ON project|,
+
+ q|CREATE TRIGGER delete_project_custom_variables
+ BEFORE DELETE ON project
+ FOR EACH ROW EXECUTE PROCEDURE delete_project_custom_variables_trigger()|,
+
+ );
+
+ $self->db_query($_) for @queries;
+
+ return 1;
+}
+
+1;
function save_as_new() {
$("#user_id").val("");
- submit_with_action("save_user");
+ submit_with_action("save_newuser");
}
-->
</script>