Skip to content

Commit

Permalink
Varianten: alle Artikeltypen ermöglichen
Browse files Browse the repository at this point in the history
  • Loading branch information
z4m1n0 committed Jan 2, 2024
1 parent 93b347a commit 0044516
Show file tree
Hide file tree
Showing 18 changed files with 78 additions and 76 deletions.
23 changes: 13 additions & 10 deletions SL/Controller/Part.pm
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ sub action_add_parent_variant {
my ($self, %params) = @_;

$self->part( SL::DB::Part->new_parent_variant );
$self->part->part_type($::form->{part_type});
$self->add;
}

Expand All @@ -117,8 +118,6 @@ sub action_add {
$self->action_add_service if $::form->{part_type} eq 'service';
$self->action_add_assembly if $::form->{part_type} eq 'assembly';
$self->action_add_assortment if $::form->{part_type} eq 'assortment';
$self->action_add_parent_variant if $::form->{part_type} eq 'parent_variant';
$self->action_add_variant if $::form->{part_type} eq 'variant';
};

sub action_save {
Expand Down Expand Up @@ -337,7 +336,7 @@ sub action_create_variants {
for @variant_property_values_lists;
1;
}) or do {
return $self->js->error(t8('Error while creating variants: ' . @_))->render();
die t8('Error while creating variants: '), $@;
};

$self->redirect_to(
Expand Down Expand Up @@ -447,16 +446,18 @@ sub render_form {
assembly => t8('Edit Assembly'),
service => t8('Edit Service'),
assortment => t8('Edit Assortment'),
parent_variant => t8('Edit Parent Variant'),
variant => t8('Edit Variant'),
);
my $title = $title_hash{$self->part->part_type};
$title .=
' (' . SL::Presenter::Part::variant_type_abbreviation($self->part->variant_type) . ')'
if $self->part->variant_type;

$self->part->prices([]) unless $self->part->prices;
$self->part->translations([]) unless $self->part->translations;

$self->render(
'part/form',
title => $title_hash{$self->part->part_type},
title => $title,
%assortment_vars,
%assembly_vars,
%parent_variant_vars,
Expand Down Expand Up @@ -1114,13 +1115,15 @@ sub add {
assembly => t8('Add Assembly'),
service => t8('Add Service'),
assortment => t8('Add Assortment'),
parent_variant => t8('Add Parent Variant'),
variant => t8('Add Variant'),
);
my $title = $title_hash{$self->part->part_type};
$title .=
' (' . SL::Presenter::Part::variant_type_abbreviation($self->part->variant_type) . ')'
if $self->part->variant_type;

$self->render(
'part/form',
title => $title_hash{$self->part->part_type},
title => $title,
);
}

Expand Down Expand Up @@ -1742,7 +1745,7 @@ sub check_form {
}

sub check_has_valid_part_type {
die "invalid part_type" unless $_[0] =~ /^(part|service|assembly|assortment|parent_variant|variant)$/;
Carp::confess "invalid part_type" unless $_[0] =~ /^(part|service|assembly|assortment)$/;
}


Expand Down
2 changes: 0 additions & 2 deletions SL/DB/Helper/TransNumberGenerator.pm
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ my %specs = ( ar => { number_column => 'invnumber',
service => { number_column => 'partnumber', number_range_column => 'servicenumber', },
assembly => { number_column => 'partnumber', number_range_column => 'assemblynumber', },
assortment => { number_column => 'partnumber', number_range_column => 'assortmentnumber', },
parent_variant => { number_column => 'partnumber', number_range_column => 'parent_variant_number', },
variant => { number_column => 'partnumber', number_range_column => 'variant_number', },
);

sub get_next_trans_number {
Expand Down
2 changes: 0 additions & 2 deletions SL/DB/MetaSetup/Default.pm
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ __PACKAGE__->meta->columns(
order_warn_no_cusordnumber => { type => 'boolean', default => 'false' },
order_warn_no_deliverydate => { type => 'boolean', default => 'true' },
p_reclamation_record_number => { type => 'text', default => '0', not_null => 1 },
parent_variant_number => { type => 'text' },
parts_image_css => { type => 'text', default => 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;' },
parts_listing_image => { type => 'boolean', default => 'true' },
parts_show_image => { type => 'boolean', default => 'true' },
Expand Down Expand Up @@ -222,7 +221,6 @@ __PACKAGE__->meta->columns(
transit_items_chart_id => { type => 'integer' },
transport_cost_reminder_article_number_id => { type => 'integer' },
undo_transfer_interval => { type => 'integer', default => 7 },
variant_number => { type => 'text' },
vc_greetings_use_textfield => { type => 'boolean' },
vendor_ustid_taxnummer_unique => { type => 'boolean', default => 'false' },
vendornumber => { type => 'text' },
Expand Down
3 changes: 2 additions & 1 deletion SL/DB/MetaSetup/Part.pm
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ __PACKAGE__->meta->columns(
obsolete => { type => 'boolean', default => 'false', not_null => 1 },
onhand => { type => 'numeric', default => '0', precision => 25, scale => 5 },
order_qty => { type => 'numeric', default => '0', not_null => 1, precision => 15, scale => 5 },
part_type => { type => 'enum', check_in => [ 'part', 'service', 'assembly', 'assortment', 'parent_variant', 'variant' ], db_type => 'part_type_enum', not_null => 1 },
part_type => { type => 'enum', check_in => [ 'part', 'service', 'assembly', 'assortment' ], db_type => 'part_type_enum', not_null => 1 },
partnumber => { type => 'text', not_null => 1 },
partsgroup_id => { type => 'integer' },
payment_id => { type => 'integer' },
Expand All @@ -44,6 +44,7 @@ __PACKAGE__->meta->columns(
stockable => { type => 'boolean', default => 'false' },
tariff_code => { type => 'text' },
unit => { type => 'varchar', length => 20, not_null => 1 },
variant_type => { type => 'enum', check_in => [ 'parent_variant', 'variant' ], db_type => 'part_variant_type' },
ve => { type => 'integer' },
warehouse_id => { type => 'integer' },
weight => { type => 'float', precision => 4, scale => 4 },
Expand Down
2 changes: 1 addition & 1 deletion SL/DB/MetaSetup/VariantPropertyValue.pm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ __PACKAGE__->meta->columns(
id => { type => 'serial', not_null => 1 },
itime => { type => 'timestamp', default => 'now()' },
mtime => { type => 'timestamp' },
sortkey => { type => 'integer', not_null => 1 },
sortkey => { type => 'integer' },
value => { type => 'text', not_null => 1 },
variant_property_id => { type => 'integer', not_null => 1 },
);
Expand Down
39 changes: 24 additions & 15 deletions SL/DB/Part.pm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use strict;

use Carp;
use List::MoreUtils qw(any uniq);
use List::Util qw(sum);
use List::Util qw(sum max);
use Rose::DB::Object::Helpers qw(as_tree);

use SL::Locale::String qw(t8);
Expand Down Expand Up @@ -215,8 +215,9 @@ sub is_part { $_[0]->part_type eq 'part' }
sub is_assembly { $_[0]->part_type eq 'assembly' }
sub is_service { $_[0]->part_type eq 'service' }
sub is_assortment { $_[0]->part_type eq 'assortment' }
sub is_parent_variant { $_[0]->part_type eq 'parent_variant' }
sub is_variant { $_[0]->part_type eq 'variant' }

sub is_parent_variant { $_[0]->variant_type eq 'parent_variant' }
sub is_variant { $_[0]->variant_type eq 'variant' }

sub type { return $_[0]->part_type; }

Expand All @@ -242,7 +243,7 @@ sub new_assortment {

sub new_parent_variant {
my ($class, %params) = @_;
$class->new(%params, part_type => 'parent_variant');
$class->new(%params, variant_type => 'parent_variant');
}

sub last_modification {
Expand Down Expand Up @@ -512,19 +513,25 @@ sub create_new_variant {
die "Given variant_property_values dosn't match the variant_properties of parent_variant part";
}
my $separator = '.'; # TODO: make configurable
my $last_variant_number =
max
map {
my $partnumber = $_->partnumber;
$partnumber =~ s/.*\Q$separator\E([0-9]*)/$1/; # escape chars between \Q \E
$partnumber;
}
$self->variants;
my $new_variant = $self->clone_and_reset;
# TODO set partnumber
$new_variant->part_type('variant');
$new_variant->save;
SL::DB::VariantPropertyValuePart->new(
part_id => $new_variant->id,
variant_property_value_id => $_->id,
)->save for @$variant_property_values;
SL::DB::PartParentVariantPartVariant->new(
variant_id => $new_variant->id,
parent_variant_id => $self->id,
)->save;
$new_variant->partnumber($self->partnumber . $separator . ($last_variant_number + 1));
$new_variant->variant_type('variant');
$new_variant->add_assemblies(map {$_->clone_and_reset} $self->assemblies) if ($self->is_assembly);
$new_variant->add_variant_property_values(@$variant_property_values);
$self->add_variants($new_variant);
$self->save;
return $new_variant;
}
Expand Down Expand Up @@ -644,6 +651,8 @@ sub variant_values {
sub variant_value {
my ($self, $variant_property) = @_;
die "only callable on parts of type parent_variant" unless $self->is_variant;
die "only callable with SL::DB::VariantProperty object" unless ref $variant_property eq 'SL::DB::VariantProperty';
my %property_id_to_values =
map {$_->variant_property_id => $_}
Expand Down
5 changes: 0 additions & 5 deletions SL/IC.pm
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,6 @@ sub all_parts {
$form->{l_assembly} = 1 if $form->{searchitems} eq 'assembly' || $form->{searchitems} eq '';
$form->{l_part} = 1 if $form->{searchitems} eq 'part' || $form->{searchitems} eq '';
$form->{l_assortment} = 1 if $form->{searchitems} eq 'assortment' || $form->{searchitems} eq '';
$form->{l_parent_variant} = 1 if $form->{searchitems} eq 'parent_variant' || $form->{searchitems} eq '';
$form->{l_variant} = 1 if $form->{searchitems} eq 'variant' || $form->{searchitems} eq '';
push @where_tokens, "p.partnumber ILIKE ? OR p.description ILIKE ?";
push @bind_vars, (like($form->{all})) x 2;
}
Expand Down Expand Up @@ -372,15 +370,12 @@ sub all_parts {
# Oder Bedingungen fuer Ware Dienstleistung Erzeugnis:
if ( $form->{l_part} || $form->{l_assembly}
|| $form->{l_service} || $form->{l_assortment}
|| $form->{l_parent_variant} || $form->{l_variant}
) {
my @or_tokens = ();
push @or_tokens, "p.part_type = 'service'" if $form->{l_service};
push @or_tokens, "p.part_type = 'assembly'" if $form->{l_assembly};
push @or_tokens, "p.part_type = 'part'" if $form->{l_part};
push @or_tokens, "p.part_type = 'assortment'" if $form->{l_assortment};
push @or_tokens, "p.part_type = 'parent_variant'" if $form->{l_parent_variant};
push @or_tokens, "p.part_type = 'variant'" if $form->{l_variant};
push @where_tokens, join ' OR ', map { "($_)" } @or_tokens;
}
else {
Expand Down
11 changes: 10 additions & 1 deletion SL/Presenter/Part.pm
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,20 @@ sub type_abbreviation {
assembly => t8('Assembly (typeabbreviation)'),
assortment => t8('Assortment (typeabbreviation)'),
service => t8('Service (typeabbreviation)'),
);

return $part_type_abbr{$part_type} || '';
}

sub variant_type_abbreviation {
my ($variant_type) = @_;

my %variant_type_abbr = (
parent_variant => t8('Parent Variant (typeabbreviation)'),
variant => t8('Variant (typeabbreviation)'),
);

return $part_type_abbr{$part_type} || '';
return $variant_type_abbr{$variant_type} || '';
}

#
Expand Down
4 changes: 1 addition & 3 deletions SL/TransNumber.pm
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,11 @@ sub _get_filters {
$filters{table} = "oe";
$filters{where} = 'COALESCE(quotation, FALSE) AND (vendor_id IS NOT NULL)';

} elsif ($type =~ /^(part|service|assembly|assortment|parent_variant|variant)$/) {
} elsif ($type =~ /^(part|service|assembly|assortment)$/) {
$filters{trans_number} = "partnumber";
my %numberfield_hash = ( service => 'servicenumber',
assembly => 'assemblynumber',
assortment => 'assortmentnumber',
parent_variant => 'parent_variant_number',
variant => 'variant_number',
part => 'articlenumber'
);
$filters{numberfield} = $numberfield_hash{$type};
Expand Down
19 changes: 19 additions & 0 deletions menus/user/00-erp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,27 @@
name: Add Parent Variant
order: 575
access: part_service_assembly_edit
- parent: master_data_add_parent_variant
id: master_data_add_parent_variant_part
name: Add Parent Variant Part
order: 100
params:
action: Part/add_parent_variant
part_type: part
- parent: master_data_add_parent_variant
id: master_data_add_parent_variant_service
name: Add Parent Variant Service
order: 200
params:
action: Part/add_parent_variant
part_type: service
- parent: master_data_add_parent_variant
id: master_data_add_parent_variant_assembly
name: Add Parent Variant Assembly
order: 300
params:
action: Part/add_parent_variant
part_type: assembly
- parent: master_data
id: master_data_add_project
name: Add Project
Expand Down
10 changes: 4 additions & 6 deletions sql/Pg-upgrade2/add_variants.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@
-- @depends: release_3_8_0
-- @ignore: 0

ALTER TYPE part_type_enum ADD VALUE 'parent_variant';
ALTER TYPE part_type_enum ADD VALUE 'variant';

ALTER TABLE defaults ADD parent_variant_number TEXT;
ALTER TABLE defaults ADD variant_number TEXT;
CREATE TYPE part_variant_type AS ENUM ('parent_variant', 'variant');
ALTER TABLE parts ADD COLUMN variant_type part_variant_type;

CREATE TABLE parts_parent_variant_id_parts_variant_id (
parent_variant_id INTEGER NOT NULL REFERENCES parts(id),
Expand All @@ -20,6 +17,7 @@ CREATE TABLE variant_properties (
name TEXT NOT NULL,
unique_name TEXT NOT NULL UNIQUE,
abbreviation VARCHAR(4) NOT NULL,
sortkey INTEGER,
itime TIMESTAMP DEFAULT now(),
mtime TIMESTAMP
);
Expand Down Expand Up @@ -50,7 +48,7 @@ CREATE TABLE variant_property_values (
variant_property_id INTEGER NOT NULL REFERENCES variant_properties(id),
value TEXT NOT NULL,
abbreviation VARCHAR(4) NOT NULL,
sortkey INTEGER NOT NULL,
sortkey INTEGER,
itime TIMESTAMP DEFAULT now(),
mtime TIMESTAMP
);
Expand Down
6 changes: 0 additions & 6 deletions sql/Pg-upgrade2/variant_properties_add_column_sortkey.sql

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,6 @@
<td>[% L.input_tag("defaults.assortmentnumber", SELF.defaults.assortmentnumber, size="15", class="wi-normal") %]</td>
[% END %]
</tr>
<tr>
<th>[% LxERP.t8('Parent Variant') %]</th>
<td>[% L.input_tag("defaults.parent_variant_number", SELF.defaults.parent_variant_number, size="15", class="wi-normal") %]</td>
</tr>
<tr>
<th>[% LxERP.t8('Variant') %]</th>
<td>[% L.input_tag("defaults.variant_number", SELF.defaults.variant_number, size="15", class="wi-normal") %]</td>
</tr>
</tbody>
</table>

Expand Down
4 changes: 0 additions & 4 deletions templates/design40_webpages/ic/search.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ <h1>[% title %]</h1>
<input name="l_assortment" id="l_assortment" type="checkbox" value="Y" checked>
<label for="l_assortment"> [% 'Assortment' | $T8 %] </label>
[% END %]
<input name="l_parent_variant" id="l_parent_variant" type="checkbox" value="Y" checked>
<label for="l_parent_variant"> [% 'Parent Variant' | $T8 %] </label>
<input name="l_variant" id="l_variant" type="checkbox" value="Y" checked>
<label for="l_variant"> [% 'Variant' | $T8 %] </label>
</td>
</tr>
<tr>
Expand Down
3 changes: 2 additions & 1 deletion templates/design40_webpages/part/form.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ <h1>[% FORM.title %] [% IF SELF.part.id %]: [% HTML.escape(SELF.part.displayable

[% INCLUDE 'common/flash.html' %]

[% L.hidden_tag('part.part_type' , SELF.part.part_type) %]
[% L.hidden_tag('part.id' , SELF.part.id) %]
[% L.hidden_tag('part.part_type' , SELF.part.part_type) %]
[% L.hidden_tag('part.variant_type', SELF.part.variant_type) %]
[% L.hidden_tag('last_modification', SELF.part.last_modification) %]
[% L.hidden_tag('callback' , FORM.callback) %]

Expand Down
4 changes: 0 additions & 4 deletions templates/webpages/client_config/_ranges_of_numbers.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,11 @@
<tr>
<td align="right" nowrap>[% LxERP.t8('Last Purchase Delivery Order Number') %]</td>
<td>[% L.input_tag("defaults.pdonumber", SELF.defaults.pdonumber, size="15") %]</td>
<td align="right" nowrap>[% LxERP.t8('Last Parent Variant Number') %]</td>
<td>[% L.input_tag("defaults.parent_variant_number", SELF.defaults.parent_variant_number, size="15") %]</td>
</tr>

<tr>
<td align="right" nowrap>[% LxERP.t8('Last Supplier Delivery Order Number') %]</td>
<td>[% L.input_tag("defaults.sudonumber", SELF.defaults.sudonumber, size="15") %]</td>
<td align="right" nowrap>[% LxERP.t8('Last Variant Number') %]</td>
<td>[% L.input_tag("defaults.variant_number", SELF.defaults.variant_number, size="15") %]</td>
</tr>

<tr>
Expand Down
Loading

0 comments on commit 0044516

Please sign in to comment.