epic-ts
[kivitendo-erp.git] / SL / DB / CsvImportReport.pm
index 879c040..b3cdf3b 100644 (file)
@@ -4,8 +4,10 @@
 package SL::DB::CsvImportReport;
 
 use strict;
+use SL::DBUtils;
 
 use SL::DB::MetaSetup::CsvImportReport;
+use SL::DB::Manager::CsvImportReport;
 
 __PACKAGE__->meta->add_relationships(
   rows => {
@@ -13,30 +15,61 @@ __PACKAGE__->meta->add_relationships(
     class        => 'SL::DB::CsvImportReportRow',
     column_map   => { id => 'csv_import_report_id' },
   },
+  status => {
+    type         => 'one to many',
+    class        => 'SL::DB::CsvImportReportStatus',
+    column_map   => { id => 'csv_import_report_id' },
+  },
 );
 
-__PACKAGE__->meta->make_manager_class;
 __PACKAGE__->meta->initialize;
 
 sub folded_rows {
-  my ($self) = @_;
+  my ($self, %params) = @_;
 
-  $self->_fold_rows unless $self->{folded_rows};
+  my $folded_rows = {};
 
-  return $self->{folded_rows};
+  for my $row_obj (@{ $params{rows} || $self->rows }) {
+    $folded_rows->{ $row_obj->row } ||= [];
+    $folded_rows->{ $row_obj->row }[ $row_obj->col ] = $row_obj->value;
+  }
+
+  $folded_rows;
 }
 
-sub _fold_rows {
+sub folded_status {
+  my ($self, %params) = @_;
+
+  my $folded_status = {};
+
+  for my $status_obj (@{ $params{status} || $self->status }) {
+    $folded_status->{ $status_obj->row } ||= {};
+    $folded_status->{ $status_obj->row }{information} ||= [];
+    $folded_status->{ $status_obj->row }{errors} ||= [];
+    push @{ $folded_status->{ $status_obj->row }{ $status_obj->type } }, $status_obj->value;
+  }
+
+  $folded_status;
+}
+
+# implementes cascade delete as per documentation
+sub destroy {
   my ($self) = @_;
 
-  $self->{folded_rows} = [];
+  my $dbh = $self->db->dbh;
 
-  for my $row_obj (@{ $self->rows }) {
-    $::lxdebug->dump(0,  "adding", $row_obj->row . ' ' . $row_obj->col . ' ' . $row_obj->value);
-    $self->{folded_rows}->[ $row_obj->row ] ||= [];
-    $self->{folded_rows}->[ $row_obj->row ][ $row_obj->col ] = $row_obj->value;
-    $::lxdebug->dump(0,  "now", $self->{folded_rows});
+  $dbh->begin_work;
+
+  do_query($::form, $dbh, 'DELETE FROM csv_import_report_status WHERE csv_import_report_id = ?', $self->id);
+  do_query($::form, $dbh, 'DELETE FROM csv_import_report_rows WHERE csv_import_report_id = ?', $self->id);
+  do_query($::form, $dbh, 'DELETE FROM csv_import_reports WHERE id = ?', $self->id);
+
+  if ($self->profile_id) {
+    do_query($::form, $dbh, 'DELETE FROM csv_import_profile_settings WHERE csv_import_profile_id = ?', $self->profile_id);
+    do_query($::form, $dbh, 'DELETE FROM csv_import_profiles WHERE id = ?', $self->profile_id);
   }
+
+  $dbh->commit;
 }
 
 1;