use Rose::Object::MakeMethods::Generic
(
- 'scalar --get_set_init' => [ qw(models price_rule vc pricegroups partsgroups businesses) ],
+ 'scalar --get_set_init' => [ qw(models price_rule vc pricegroups partsgroups businesses cvar_configs) ],
);
# __PACKAGE__->run_before('check_auth');
my $price_rules = $self->models->get;
+ $self->setup_search_action_bar;
+
$self->prepare_report;
$self->report_generator_list_objects(report => $self->{report}, objects => $price_rules, $::form->{inline} ? (layout => 0, header => 0) : ());
sub action_add_item_row {
my ($self, %params) = @_;
- my $item = SL::DB::PriceRuleItem->new(type => $::form->{type});
+ my $item = $::form->{type} =~ m{cvar/(\d+)}
+ ? SL::DB::PriceRuleItem->new(type => 'cvar', custom_variable_configs_id => $1)
+ : SL::DB::PriceRuleItem->new(type => $::form->{type});
my $html = $self->render('price_rule/item', { output => 0 }, item => $item);
my ($self, %params) = @_;
my $is_new = !$self->price_rule->id;
my $title = $self->form_title(($is_new ? 'create' : 'edit'), $self->price_rule->type);
+ $self->setup_form_action_bar;
$self->render('price_rule/form',
title => $title,
%params
if ( $report->{options}{output_format} =~ /^(pdf|csv)$/i ) {
$self->models->disable_plugin('paginated');
}
+
+ my $title = t8('Price Rules');
+ $report->{title} = $title; #for browser titlebar (title-tag)
+
$report->set_options(
std_column_visibility => 1,
controller_class => 'PriceRule',
}
sub all_price_rule_item_types {
- SL::DB::Manager::PriceRuleItem->get_all_types($_[0]->vc || $_[0]->price_rule->type);
+ my $item_types = SL::DB::Manager::PriceRuleItem->get_all_types($_[0]->vc || $_[0]->price_rule->type);
+ my @cvar_types = map [ "cvar/" . $_->id, $_->presenter->description_with_module ], @{$_[0]->cvar_configs };
+
+ [ @$item_types, @cvar_types ];
}
sub add_javascripts {
- $::request->{layout}->add_javascripts(qw(kivi.PriceRule.js autocomplete_customer.js autocomplete_vendor.js autocomplete_part.js));
+ $::request->{layout}->add_javascripts(qw(kivi.PriceRule.js autocomplete_vendor.js kivi.Part.js kivi.CustomerVendor.js));
}
sub init_price_rule {
my @items;
for my $raw_item (@$items) {
- my $item = $raw_item->{id} ? $old_items{ $raw_item->{id} } || SL::DB::PriceRuleItem->new(id => $raw_item->{id})->load : SL::DB::PriceRuleItem->new;
+ my $item = $raw_item->{id}
+ ? $old_items{ $raw_item->{id} } || SL::DB::PriceRuleItem->new(id => $raw_item->{id})->load
+ : SL::DB::PriceRuleItem->new;
$item->assign_attributes(%$raw_item);
push @items, $item;
}
SL::DB::Manager::PartsGroup->get_all;
}
+sub init_cvar_configs {
+ # eligible cvars for this are all that are reachable from a record or recorditem (all modules but requirement spec)
+ # and of a type that price rules support (currently: id-based with picker, numeric or date) and by special request select
+ SL::DB::Manager::CustomVariableConfig->get_all(where => [
+ "!module" => 'RequirementSpecs',
+ type => [ qw(timestamp date number integer customer vendor part select) ],
+ ]) ;
+}
+
+
sub all_price_types {
SL::DB::Manager::PriceRule->all_price_types;
}
);
}
+sub setup_search_action_bar {
+ my ($self, %params) = @_;
+
+ return if $::form->{inline};
+
+ for my $bar ($::request->layout->get('actionbar')) {
+ $bar->add(
+ action => [
+ t8('Update'),
+ submit => [ '#search_form', { action => 'PriceRule/list' } ],
+ accesskey => 'enter',
+ ],
+
+ combobox => [
+ action => [
+ t8('Add'),
+ ],
+ link => [
+ t8('New Sales Price Rule'),
+ link => $self->url_for(action => 'new', 'price_rule.type' => 'customer', callback => $self->models->get_callback),
+ ],
+ link => [
+ t8('New Purchase Price Rule'),
+ link => $self->url_for(action => 'new', 'price_rule.type' => 'vendor', callback => $self->models->get_callback),
+ ],
+ ], # end of combobox "Add"
+ );
+ }
+}
+
+sub setup_form_action_bar {
+ my ($self) = @_;
+
+ my $is_new = !$self->price_rule->id;
+
+ for my $bar ($::request->layout->get('actionbar')) {
+ $bar->add(
+ combobox => [
+ action => [
+ $is_new ? t8('Create') : t8('Save'),
+ submit => [ '#form', { action => 'PriceRule/' . ($is_new ? 'create' : 'update') } ],
+ accesskey => 'enter',
+ ],
+ action => [
+ t8('Use as new'),
+ submit => [ '#form', { action => 'PriceRule/create' } ],
+ disabled => $is_new ? t8('The object has not been saved yet.') : undef,
+ ],
+ ], # end of combobox "Save"
+
+ action => [
+ t8('Delete'),
+ submit => [ '#form', { action => 'PriceRule/destroy' } ],
+ confirm => t8('Do you really want to delete this object?'),
+ disabled => $is_new ? t8('The object has not been saved yet.')
+ : $self->price_rule->in_use ? t8('This object has already been used.')
+ : undef,
+ ],
+
+ link => [
+ t8('Abort'),
+ link => $self->url_for(action => 'list', 'filter.type' => $self->price_rule->type),
+ ],
+ );
+ }
+}
+
1;