Projekt: neue Spalten (Kunde, Typ, gültig)
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 14 Jan 2013 11:35:58 +0000 (12:35 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 24 Jan 2013 12:03:53 +0000 (13:03 +0100)
SL/DB/MetaSetup/Project.pm
SL/Projects.pm
bin/mozilla/projects.pl
locale/de/all
sql/Pg-upgrade2/project_customer_type_valid.sql [new file with mode: 0644]
templates/webpages/projects/project_form.html
templates/webpages/projects/search.html

index 6b3ab91..a492b46 100644 (file)
@@ -16,6 +16,9 @@ __PACKAGE__->meta->setup(
     itime         => { type => 'timestamp', default => 'now()' },
     mtime         => { type => 'timestamp' },
     active        => { type => 'boolean', default => 'true' },
+    customer_id   => { type => 'integer' },
+    type          => { type => 'text' },
+    valid         => { type => 'boolean', default => 'true' },
   ],
 
   primary_key_columns => [ 'id' ],
@@ -23,6 +26,13 @@ __PACKAGE__->meta->setup(
   unique_key => [ 'projectnumber' ],
 
   allow_inline_column_values => 1,
+
+  foreign_keys => [
+    customer => {
+      class       => 'SL::DB::Customer',
+      key_columns => { customer_id => 'id' },
+    },
+  ],
 );
 
 1;
index d3df51f..4c145bb 100644 (file)
@@ -94,6 +94,23 @@ sub search_projects {
     push @filters, 'NOT COALESCE(p.active, FALSE)';
   }
 
+  if ($params{valid} eq "valid") {
+    push @filters, 'p.valid';
+
+  } elsif ($params{valid} eq "invalid") {
+    push @filters, 'NOT COALESCE(p.valid, FALSE)';
+  }
+
+  if ($params{customer}) {
+    push @filters, 'c.name ILIKE ?';
+    push @values,  '%' . $params{customer} . '%';
+  }
+
+  if ($params{type}) {
+    push @filters, 'p.type ILIKE ?';
+    push @values,  '%' . $params{type} . '%';
+  }
+
   my ($cvar_where, @cvar_values) = CVar->build_filter_query('module'         => 'Projects',
                                                             'trans_id_field' => 'p.id',
                                                             'filter'         => $form);
@@ -108,8 +125,10 @@ sub search_projects {
 
   my $sortorder =  $params{sort} ? $params{sort} : "projectnumber";
   $sortorder    =~ s/[^a-z_]//g;
-  my $query     = qq|SELECT p.id, p.projectnumber, p.description, p.active
+  my $query     = qq|SELECT p.id, p.projectnumber, p.description, p.active, p.valid, p.type,
+                       c.name AS customer
                      FROM project p
+                     LEFT JOIN customer c ON (p.customer_id = c.id)
                      $where
                      ORDER BY $sortorder|;
 
@@ -180,10 +199,13 @@ sub save_project {
     $params{active} = 1;
   }
 
-  my $query  = qq|UPDATE project SET projectnumber = ?, description = ?, active = ?
-               WHERE id = ?|;
+  my $query  = <<SQL;
+    UPDATE project
+    SET projectnumber = ?, description = ?, active = ?, customer_id = ?, type = ?, valid = ?
+    WHERE id = ?
+SQL
 
-  @values = ($params{projectnumber}, $params{description}, $params{active} ? 't' : 'f', conv_i($params{id}));
+  @values = ($params{projectnumber}, $params{description}, $params{active} ? 't' : 'f', conv_i($params{customer_id}), $params{type}, $params{valid} ? 't' : 'f', conv_i($params{id}));
   do_query($form, $dbh, $query, @values);
 
   CVar->save_custom_variables('dbh'       => $dbh,
@@ -220,4 +242,3 @@ sub delete_project {
 }
 
 1;
-
index bda1c6d..c1b8b7d 100644 (file)
@@ -118,7 +118,7 @@ sub project_report {
 
   my $report       = SL::ReportGenerator->new(\%myconfig, $form);
 
-  my @columns      = qw(projectnumber description active);
+  my @columns      = qw(projectnumber description customer type active valid);
 
   my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
   my @searchable_custom_variables  = grep { $_->{searchable} }  @{ $cvar_configs };
@@ -144,11 +144,14 @@ sub project_report {
   my %column_defs  = (
     'projectnumber'            => { 'text' => $locale->text('Number'), },
     'description'              => { 'text' => $locale->text('Description'), },
+    'customer'                 => { 'text' => $locale->text('Customer'), },
+    'type'                     => { 'text' => $locale->text('Type'), },
     'active'                   => { 'text' => $locale->text('Active'), 'visible' => 'both' eq $filter->{active}, },
+    'valid'                    => { 'text' => $locale->text('Valid'),  'visible' => 'both' eq $filter->{active}, },
     %column_defs_cvars,
     );
 
-  foreach (qw(projectnumber description)) {
+  foreach (qw(projectnumber description customer type)) {
     $column_defs{$_}->{link}    = $href . "&sort=$_";
     $column_defs{$_}->{visible} = 1;
   }
@@ -171,7 +174,9 @@ sub project_report {
   push @options, $locale->text('All')                                            if ($filter->{all});
   push @options, $locale->text('Orphaned')                                       if ($filter->{orphaned});
   push @options, $locale->text('Project Number') . " : $filter->{projectnumber}" if ($filter->{projectnumber});
-  push @options, $locale->text('Description') . " : $filter->{description}"      if ($filter->{description});
+  push @options, $locale->text('Description')    . " : $filter->{description}"   if ($filter->{description});
+  push @options, $locale->text('Customer')       . " : $filter->{customer}"      if ($filter->{customer});
+  push @options, $locale->text('Type')           . " : $filter->{type}"          if ($filter->{type});
   push @options, $locale->text('Active')                                         if ($filter->{active} eq 'active');
   push @options, $locale->text('Inactive')                                       if ($filter->{active} eq 'inactive');
   push @options, $locale->text('Orphaned')                                       if ($filter->{status} eq 'orphaned');
@@ -197,6 +202,7 @@ sub project_report {
 
   foreach my $project (@{ $form->{project_list} }) {
     $project->{active} = $project->{active} ? $locale->text('Yes')  : $locale->text('No');
+    $project->{valid}  = $project->{valid} ? $locale->text('Yes')  : $locale->text('No');
 
     my $row = { map { $_ => { 'data' => $project->{$_} } } keys %{ $project } };
 
@@ -222,6 +228,7 @@ sub display_project_form {
 
   $form->{title}     = $form->{project}->{id} ? $locale->text("Edit Project") : $locale->text("Add Project");
 
+  $form->{ALL_CUSTOMERS}    = SL::DB::Manager::Customer->get_all_sorted(where => [ or => [ obsolete => 0, obsolete => undef, id => $form->{project}->{customer_id} ]]);
   $form->{CUSTOM_VARIABLES} = CVar->get_custom_variables('module' => 'Projects', 'trans_id' => $form->{project}->{id});
 #  $main::lxdebug->dump(0, "cv", $form->{CUSTOM_VARIABLES});
   CVar->render_inputs('variables' => $form->{CUSTOM_VARIABLES}) if (scalar @{ $form->{CUSTOM_VARIABLES} });
index 627fbff..ebafe70 100644 (file)
@@ -417,7 +417,6 @@ $self->{texts} = {
   'Client Configuration saved!' => 'Mandantenkonfiguration gespeichert!',
   'Close'                       => 'Übernehmen',
   'Close Books up to'           => 'Die Bücher abschließen bis zum',
-  'Close Dialog'                => 'Schließen',
   'Close Flash'                 => 'Schließen',
   'Close SEPA exports'          => 'SEPA-Export abschließen',
   'Close Window'                => 'Fenster Schlie&szlig;en',
@@ -1018,7 +1017,7 @@ $self->{texts} = {
   'Introduction of Buchungsgruppen' => 'Einf&uuml;hrung von Buchungsgruppen',
   'Introduction of units'       => 'Einf&uuml;hrung von Einheiten',
   'Inv. Duedate'                => 'Rg. Fälligkeit',
-  'Invalid'                     => 'Ung&uuml;ltig',
+  'Invalid'                     => 'Ungültig',
   'Invalid follow-up ID.'       => 'Ung&uuml;ltige Wiedervorlage-ID.',
   'Invalid quantity.'           => 'Die Mengenangabe ist ung&uuml;ltig.',
   'Invdate'                     => 'Rechnungsdatum',
@@ -1432,7 +1431,6 @@ $self->{texts} = {
   'Please select the source bank account for the transfers:' => 'Bitte wählen Sie das Bankkonto als Quelle für die Überweisungen aus:',
   'Please seletct the dataset you want to delete:' => 'Bitte w&auml;hlen Sie die zu l&ouml;schende Datenbank aus:',
   'Please specify a description for the warehouse designated for these goods.' => 'Bitte geben Sie den Namen des Ziellagers f&uuml;r die &uuml;bernommenen Daten ein.',
-  'Please wait...'              => 'Bitte warten...',
   'Plural'                      => 'Plural',
   'Port'                        => 'Port',
   'Portrait'                    => 'Hochformat',
@@ -2181,6 +2179,7 @@ $self->{texts} = {
   'Username'                    => 'Benutzername',
   'Users in this group'         => 'BenutzerInnen in dieser Gruppe',
   'Ust-IDNr'                    => 'USt-IdNr.',
+  'Valid'                       => 'Gültig',
   'Valid from'                  => 'Gültig ab',
   'Valid until'                 => 'gültig bis',
   'Value'                       => 'Wert',
@@ -2391,7 +2390,6 @@ $self->{texts} = {
   'list_of_payments'            => 'zahlungsausgaenge',
   'list_of_receipts'            => 'zahlungseingaenge',
   'list_of_transactions'        => 'buchungsliste',
-  'loading'                     => 'wird geladen',
   'logout'                      => 'abmelden',
   'male'                        => 'männlich',
   'mark as paid'                => 'als bezahlt markieren',
diff --git a/sql/Pg-upgrade2/project_customer_type_valid.sql b/sql/Pg-upgrade2/project_customer_type_valid.sql
new file mode 100644 (file)
index 0000000..f77820a
--- /dev/null
@@ -0,0 +1,12 @@
+-- @tag: project_customer_type_valid
+-- @description: Projekt: Spalten "Kunde", "Typ", "Gültig"
+-- @depends: release_3_0_0
+-- @charset: utf-8
+ALTER TABLE project ADD COLUMN customer_id INTEGER;
+ALTER TABLE project ADD COLUMN type TEXT;
+ALTER TABLE project ADD COLUMN valid BOOLEAN;
+ALTER TABLE project ALTER COLUMN valid SET DEFAULT TRUE;
+
+ALTER TABLE project ADD FOREIGN KEY (customer_id) REFERENCES customer (id);
+
+UPDATE project SET valid = TRUE;
index 24256cf..3b6f7f4 100644 (file)
@@ -29,7 +29,7 @@
     <table>
      <tr>
       <th align="right">[% 'Number' | $T8 %]</th>
-      <td><input name="project.projectnumber" size="20" value="[% HTML.escape(project.projectnumber) %]"></td>
+      <td><input name="project.projectnumber" size="60" value="[% HTML.escape(project.projectnumber) %]"></td>
      </tr>
 
      <tr>
       </td>
      </tr>
 
+     <tr>
+      <th align="right">[% 'Type' | $T8 %]</th>
+      <td>[% L.input_tag('project.type', project.type, size=60) %]</td>
+     </tr>
+
+     <tr>
+      <th align="right">[% 'Customer' | $T8 %]</th>
+      <td>[% L.select_tag('project.customer_id', ALL_CUSTOMERS, default=project.customer_id, title_key='name', style='width: 300px') %]</td>
+     </tr>
+
+     <tr>
+      <th align="right">[% 'Valid' | $T8 %]</th>
+      <td>[% L.select_tag('project.valid', [ [ 1, LxERP.t8('Valid') ], [ 0, LxERP.t8('Invalid') ] ], default=project.valid, style='width: 300px') %]</td>
+     </tr>
+
      [%- IF project.id %]
      <tr>
-      <th align="right">&nbsp;</th>
-      <td>
-       <input type="radio" name="project.active" id="active_1" value="1"[% IF project.active %] checked[% END %]><label for="active_1">[% 'Active' | $T8 %]</label>
-       <input type="radio" name="project.active" id="active_0" value="0"[% IF !project.active %] checked[% END %]><label for="active_0">[% 'Inactive' | $T8 %]</label>
-      </td>
+      <th align="right">[% 'Active' | $T8 %]</th>
+      <td>[% L.select_tag('project.active', [ [ 1, LxERP.t8('Active') ], [ 0, LxERP.t8('Inactive') ] ], default=project.valid, style='width: 300px') %]</td>
      </tr>
      [%- END %]
     </table>
index f2718a1..5eafb40 100644 (file)
      <td><input name="filter.description" size="60"></td>
     </tr>
 
+    <tr>
+     <th align="right">[% 'Customer' | $T8 %]</th>
+     <td><input name="filter.customer" size="60"></td>
+    </tr>
+
+    <tr>
+     <th align="right">[% 'Type' | $T8 %]</th>
+     <td><input name="filter.type" size="60"></td>
+    </tr>
+
     [% CUSTOM_VARIABLES_FILTER_CODE %]
 
     <tr>
         </td>
        </tr>
 
+       <tr>
+        <td>
+         <input type="radio" name="filter.valid" id="valid_valid" value="valid" checked>
+         <label for="valid_valid">[% 'Valid' | $T8 %]</label>
+        </td>
+        <td>
+         <input type="radio" name="filter.valid" id="valid_invalid" value="invalid">
+         <label for="valid_invalid">[% 'Invalid' | $T8 %]</label>
+        </td>
+        <td>
+         <input type="radio" name="filter.valid" id="valid_both" value="both">
+         <label for="valid_both">[% 'Both' | $T8 %]</label>
+        </td>
+       </tr>
+
        <tr>
         <td>
          <input type="radio" name="filter.status" id="status_all" value="all" checked>
@@ -64,4 +89,3 @@
    <input class="submit" type="submit" name="action" value="[% 'Continue' | $T8 %]">
   </p>
  </form>
-