Merge branch 'b-3.6.1' into mebil
[kivitendo-erp.git] / SL / Controller / CsvImport / AdditionalBillingAddress.pm
1 package SL::Controller::CsvImport::AdditionalBillingAddress;
2
3 use strict;
4
5 use SL::Helper::Csv;
6
7 use parent qw(SL::Controller::CsvImport::Base);
8
9 use Rose::Object::MakeMethods::Generic
10 (
11  scalar => [ qw(table) ],
12 );
13
14 sub set_profile_defaults {
15 };
16
17 sub init_class {
18   my ($self) = @_;
19   $self->class('SL::DB::AdditionalBillingAddress');
20 }
21
22 sub _hash_object {
23   my ($o) = @_;
24   return join('--', map({ s/[\s,\.\-]//g; $_ } ($o->name, $o->street)));
25 }
26
27 sub check_objects {
28   my ($self) = @_;
29
30   $self->controller->track_progress(phase => 'building data', progress => 0);
31
32   my %existing_by_id_name_street = map { (_hash_object($_) => $_) } @{ $self->existing_objects };
33   my $methods                    = $self->controller->headers->{methods};
34
35   my $i = 0;
36   my $num_data = scalar @{ $self->controller->data };
37   foreach my $entry (@{ $self->controller->data }) {
38     $self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0;
39
40     $self->check_vc($entry, 'customer_id');
41
42     next if @{ $entry->{errors} };
43
44     my $object   = $entry->{object};
45     my $idx      = _hash_object($object);
46     my $existing = $existing_by_id_name_street{$idx};
47
48     if (!$existing) {
49       $existing_by_id_name_street{$idx} = $object;
50     } else {
51       $entry->{object_to_save} = $existing;
52
53       $existing->$_( $object->$_ ) for @{ $methods };
54
55       push @{ $entry->{information} }, $::locale->text('Updating existing entry in database');
56     }
57
58   } continue {
59     $i++;
60   }
61
62   $self->add_info_columns({ header => $::locale->text('Customer/Vendor'), method => 'vc_name' });
63 }
64
65 sub setup_displayable_columns {
66   my ($self) = @_;
67
68   $self->SUPER::setup_displayable_columns;
69
70   $self->add_displayable_columns(
71     { name => 'default_address', description => $::locale->text('Default address flag') },
72     { name => 'name',            description => $::locale->text('Name')                 },
73     { name => 'department_1',    description => $::locale->text('Department 1')         },
74     { name => 'department_2',    description => $::locale->text('Department 2')         },
75     { name => 'street',          description => $::locale->text('Street')               },
76     { name => 'zipcode',         description => $::locale->text('Zipcode')              },
77     { name => 'city',            description => $::locale->text('City')                 },
78     { name => 'country',         description => $::locale->text('Country')              },
79     { name => 'contact',         description => $::locale->text('Contact')              },
80     { name => 'email',           description => $::locale->text('E-mail')               },
81     { name => 'fax',             description => $::locale->text('Fax')                  },
82     { name => 'gln',             description => $::locale->text('GLN')                  },
83     { name => 'phone',           description => $::locale->text('Phone')                },
84     { name => 'customer_id',     description => $::locale->text('Customer')             },
85     { name => 'customer',        description => $::locale->text('Customer (name)')      },
86     { name => 'customernumber',  description => $::locale->text('Customer Number')      },
87   );
88 }
89
90 1;