CSV-Import: Projekte
[kivitendo-erp.git] / SL / Controller / CsvImport / Project.pm
1 package SL::Controller::CsvImport::Project;
2
3 use strict;
4
5 use SL::Helper::Csv;
6 use SL::DB::CustomVariable;
7 use SL::DB::CustomVariableConfig;
8
9 use parent qw(SL::Controller::CsvImport::Base);
10
11 use Rose::Object::MakeMethods::Generic
12 (
13  scalar => [ qw(table) ],
14 );
15
16 sub init_class {
17   my ($self) = @_;
18   $self->class('SL::DB::Project');
19 }
20
21 sub init_all_cvar_configs {
22   my ($self) = @_;
23
24   return SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'Projects' ]);
25 }
26
27 sub check_objects {
28   my ($self) = @_;
29
30   foreach my $entry (@{ $self->controller->data }) {
31     $self->handle_cvars($entry);
32   }
33
34   $self->add_cvar_raw_data_columns;
35 }
36
37 sub check_duplicates {
38   my $self = shift;
39
40   my %duplicates_by_number;
41
42   if ( $self->controller->profile->get('duplicates') eq 'check_db' ) {
43     foreach my $object (@{$self->existing_objects}) {
44       $duplicates_by_number{$object->{projectnumber}} = 'db';
45     }
46   }
47
48   foreach my $entry (@{ $self->controller->data }) {
49
50     my $object = $entry->{object};
51
52     if ( $duplicates_by_number{$object->projectnumber()} )
53     {
54       push( @{$entry->{errors}},
55             $duplicates_by_number{$object->projectnumber()} eq 'db' ? $::locale->text('Duplicate in database') : $::locale->text('Duplicate in CSV file')
56       );
57     } else {
58       $duplicates_by_number{$object->projectnumber()} = 'csv';
59     }
60
61   }
62 }
63
64 sub setup_displayable_columns {
65   my ($self) = @_;
66
67   $self->SUPER::setup_displayable_columns;
68   $self->add_cvar_columns_to_displayable_columns;
69
70   $self->add_displayable_columns({ name => 'projectnumber', description => $::locale->text('number') },
71                                  { name => 'description',   description => $::locale->text('Description') },
72                                  { name => 'active',        description => $::locale->text('Active') },
73                                 );
74 }
75
76 1;