Pflichtenhefte: Nummerierungsformate zu Typen verschoben & bearbeitbar gemacht
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Nov 2013 13:32:13 +0000 (14:32 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 1 Apr 2014 11:12:22 +0000 (13:12 +0200)
SL/DB/MetaSetup/Default.pm
SL/DB/MetaSetup/RequirementSpecType.pm
SL/DB/RequirementSpecItem.pm
locale/de/all
sql/Pg-upgrade2/requirement_spec_types_number_formats.sql [new file with mode: 0644]
templates/webpages/requirement_spec_type/form.html
templates/webpages/requirement_spec_type/list.html

index 5b547ef..942810c 100644 (file)
@@ -9,93 +9,91 @@ use base qw(SL::DB::Object);
 __PACKAGE__->meta->table('defaults');
 
 __PACKAGE__->meta->columns(
-  accounting_method                             => { type => 'text' },
-  address                                       => { type => 'text' },
-  ap_changeable                                 => { type => 'integer', default => 2, not_null => 1 },
-  ap_show_mark_as_paid                          => { type => 'boolean', default => 'true' },
-  ar_changeable                                 => { type => 'integer', default => 2, not_null => 1 },
-  ar_paid_accno_id                              => { type => 'integer' },
-  ar_show_mark_as_paid                          => { type => 'boolean', default => 'true' },
-  articlenumber                                 => { type => 'text' },
-  assemblynumber                                => { type => 'text' },
-  balance_startdate_method                      => { type => 'text' },
-  bin_id                                        => { type => 'integer' },
-  bin_id_ignore_onhand                          => { type => 'integer' },
-  businessnumber                                => { type => 'text' },
-  closedto                                      => { type => 'date' },
-  cnnumber                                      => { type => 'text' },
-  co_ustid                                      => { type => 'text' },
-  coa                                           => { type => 'text' },
-  company                                       => { type => 'text' },
-  currency_id                                   => { type => 'integer', not_null => 1 },
-  customer_hourly_rate                          => { type => 'numeric', precision => 2, scale => 8 },
-  customernumber                                => { type => 'text' },
-  datev_check_on_ap_transaction                 => { type => 'boolean', default => 'true' },
-  datev_check_on_ar_transaction                 => { type => 'boolean', default => 'true' },
-  datev_check_on_gl_transaction                 => { type => 'boolean', default => 'true' },
-  datev_check_on_purchase_invoice               => { type => 'boolean', default => 'true' },
-  datev_check_on_sales_invoice                  => { type => 'boolean', default => 'true' },
-  dunning_ar                                    => { type => 'integer' },
-  dunning_ar_amount_fee                         => { type => 'integer' },
-  dunning_ar_amount_interest                    => { type => 'integer' },
-  duns                                          => { type => 'text' },
-  expense_accno_id                              => { type => 'integer' },
-  fxgain_accno_id                               => { type => 'integer' },
-  fxloss_accno_id                               => { type => 'integer' },
-  gl_changeable                                 => { type => 'integer', default => 2, not_null => 1 },
-  id                                            => { type => 'serial', not_null => 1 },
-  income_accno_id                               => { type => 'integer' },
-  inventory_accno_id                            => { type => 'integer' },
-  inventory_system                              => { type => 'text' },
-  invnumber                                     => { type => 'text' },
-  ir_changeable                                 => { type => 'integer', default => 2, not_null => 1 },
-  ir_show_mark_as_paid                          => { type => 'boolean', default => 'true' },
-  is_changeable                                 => { type => 'integer', default => 2, not_null => 1 },
-  is_show_mark_as_paid                          => { type => 'boolean', default => 'true' },
-  itime                                         => { type => 'timestamp', default => 'now()' },
-  language_id                                   => { type => 'integer' },
-  max_future_booking_interval                   => { type => 'integer', default => 360 },
-  mtime                                         => { type => 'timestamp' },
-  normalize_part_descriptions                   => { type => 'boolean', default => 'true' },
-  normalize_vc_names                            => { type => 'boolean', default => 'true' },
-  parts_image_css                               => { type => 'text', default => 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;' },
-  parts_listing_image                           => { type => 'boolean', default => 'true' },
-  parts_show_image                              => { type => 'boolean', default => 'true' },
-  payments_changeable                           => { type => 'integer', default => '0', not_null => 1 },
-  pdonumber                                     => { type => 'text' },
-  ponumber                                      => { type => 'text' },
-  profit_determination                          => { type => 'text' },
-  purchase_delivery_order_show_delete           => { type => 'boolean', default => 'true' },
-  purchase_order_show_delete                    => { type => 'boolean', default => 'true' },
-  requirement_spec_function_block_number_format => { type => 'text', default => 'FB000', not_null => 1 },
-  requirement_spec_section_number_format        => { type => 'text', default => 'A00', not_null => 1 },
-  requirement_spec_section_order_part_id        => { type => 'integer' },
-  revtrans                                      => { type => 'boolean', default => 'false' },
-  rfqnumber                                     => { type => 'text' },
-  rmanumber                                     => { type => 'text' },
-  sales_delivery_order_show_delete              => { type => 'boolean', default => 'true' },
-  sales_order_show_delete                       => { type => 'boolean', default => 'true' },
-  sdonumber                                     => { type => 'text' },
-  sepa_creditor_id                              => { type => 'text' },
-  servicenumber                                 => { type => 'text' },
-  show_bestbefore                               => { type => 'boolean', default => 'false' },
-  show_weight                                   => { type => 'boolean', default => 'false', not_null => 1 },
-  signature                                     => { type => 'text' },
-  sonumber                                      => { type => 'text' },
-  sqnumber                                      => { type => 'text' },
-  taxnumber                                     => { type => 'text' },
-  templates                                     => { type => 'text' },
-  transfer_default                              => { type => 'boolean', default => 'true' },
-  transfer_default_ignore_onhand                => { type => 'boolean', default => 'false' },
-  transfer_default_use_master_default_bin       => { type => 'boolean', default => 'false' },
-  vendornumber                                  => { type => 'text' },
-  version                                       => { type => 'varchar', length => 8 },
-  vertreter                                     => { type => 'boolean', default => 'false' },
-  warehouse_id                                  => { type => 'integer' },
-  warehouse_id_ignore_onhand                    => { type => 'integer' },
-  webdav                                        => { type => 'boolean', default => 'false' },
-  webdav_documents                              => { type => 'boolean', default => 'false' },
-  weightunit                                    => { type => 'varchar', length => 5 },
+  accounting_method                       => { type => 'text' },
+  address                                 => { type => 'text' },
+  ap_changeable                           => { type => 'integer', default => 2, not_null => 1 },
+  ap_show_mark_as_paid                    => { type => 'boolean', default => 'true' },
+  ar_changeable                           => { type => 'integer', default => 2, not_null => 1 },
+  ar_paid_accno_id                        => { type => 'integer' },
+  ar_show_mark_as_paid                    => { type => 'boolean', default => 'true' },
+  articlenumber                           => { type => 'text' },
+  assemblynumber                          => { type => 'text' },
+  balance_startdate_method                => { type => 'text' },
+  bin_id                                  => { type => 'integer' },
+  bin_id_ignore_onhand                    => { type => 'integer' },
+  businessnumber                          => { type => 'text' },
+  closedto                                => { type => 'date' },
+  cnnumber                                => { type => 'text' },
+  co_ustid                                => { type => 'text' },
+  coa                                     => { type => 'text' },
+  company                                 => { type => 'text' },
+  currency_id                             => { type => 'integer', not_null => 1 },
+  customer_hourly_rate                    => { type => 'numeric', precision => 2, scale => 8 },
+  customernumber                          => { type => 'text' },
+  datev_check_on_ap_transaction           => { type => 'boolean', default => 'true' },
+  datev_check_on_ar_transaction           => { type => 'boolean', default => 'true' },
+  datev_check_on_gl_transaction           => { type => 'boolean', default => 'true' },
+  datev_check_on_purchase_invoice         => { type => 'boolean', default => 'true' },
+  datev_check_on_sales_invoice            => { type => 'boolean', default => 'true' },
+  dunning_ar                              => { type => 'integer' },
+  dunning_ar_amount_fee                   => { type => 'integer' },
+  dunning_ar_amount_interest              => { type => 'integer' },
+  duns                                    => { type => 'text' },
+  expense_accno_id                        => { type => 'integer' },
+  fxgain_accno_id                         => { type => 'integer' },
+  fxloss_accno_id                         => { type => 'integer' },
+  gl_changeable                           => { type => 'integer', default => 2, not_null => 1 },
+  id                                      => { type => 'serial', not_null => 1 },
+  income_accno_id                         => { type => 'integer' },
+  inventory_accno_id                      => { type => 'integer' },
+  inventory_system                        => { type => 'text' },
+  invnumber                               => { type => 'text' },
+  ir_changeable                           => { type => 'integer', default => 2, not_null => 1 },
+  ir_show_mark_as_paid                    => { type => 'boolean', default => 'true' },
+  is_changeable                           => { type => 'integer', default => 2, not_null => 1 },
+  is_show_mark_as_paid                    => { type => 'boolean', default => 'true' },
+  itime                                   => { type => 'timestamp', default => 'now()' },
+  language_id                             => { type => 'integer' },
+  max_future_booking_interval             => { type => 'integer', default => 360 },
+  mtime                                   => { type => 'timestamp' },
+  normalize_part_descriptions             => { type => 'boolean', default => 'true' },
+  normalize_vc_names                      => { type => 'boolean', default => 'true' },
+  parts_image_css                         => { type => 'text', default => 'border:0;float:left;max-width:250px;margin-top:20px:margin-right:10px;margin-left:10px;' },
+  parts_listing_image                     => { type => 'boolean', default => 'true' },
+  parts_show_image                        => { type => 'boolean', default => 'true' },
+  payments_changeable                     => { type => 'integer', default => '0', not_null => 1 },
+  pdonumber                               => { type => 'text' },
+  ponumber                                => { type => 'text' },
+  profit_determination                    => { type => 'text' },
+  purchase_delivery_order_show_delete     => { type => 'boolean', default => 'true' },
+  purchase_order_show_delete              => { type => 'boolean', default => 'true' },
+  requirement_spec_section_order_part_id  => { type => 'integer' },
+  revtrans                                => { type => 'boolean', default => 'false' },
+  rfqnumber                               => { type => 'text' },
+  rmanumber                               => { type => 'text' },
+  sales_delivery_order_show_delete        => { type => 'boolean', default => 'true' },
+  sales_order_show_delete                 => { type => 'boolean', default => 'true' },
+  sdonumber                               => { type => 'text' },
+  sepa_creditor_id                        => { type => 'text' },
+  servicenumber                           => { type => 'text' },
+  show_bestbefore                         => { type => 'boolean', default => 'false' },
+  show_weight                             => { type => 'boolean', default => 'false', not_null => 1 },
+  signature                               => { type => 'text' },
+  sonumber                                => { type => 'text' },
+  sqnumber                                => { type => 'text' },
+  taxnumber                               => { type => 'text' },
+  templates                               => { type => 'text' },
+  transfer_default                        => { type => 'boolean', default => 'true' },
+  transfer_default_ignore_onhand          => { type => 'boolean', default => 'false' },
+  transfer_default_use_master_default_bin => { type => 'boolean', default => 'false' },
+  vendornumber                            => { type => 'text' },
+  version                                 => { type => 'varchar', length => 8 },
+  vertreter                               => { type => 'boolean', default => 'false' },
+  warehouse_id                            => { type => 'integer' },
+  warehouse_id_ignore_onhand              => { type => 'integer' },
+  webdav                                  => { type => 'boolean', default => 'false' },
+  webdav_documents                        => { type => 'boolean', default => 'false' },
+  weightunit                              => { type => 'varchar', length => 5 },
 );
 
 __PACKAGE__->meta->primary_key_columns([ 'id' ]);
index 102b817..53a8be1 100644 (file)
@@ -9,12 +9,14 @@ use base qw(SL::DB::Object);
 __PACKAGE__->meta->table('requirement_spec_types');
 
 __PACKAGE__->meta->columns(
-  description        => { type => 'text', not_null => 1 },
-  id                 => { type => 'serial', not_null => 1 },
-  itime              => { type => 'timestamp', default => 'now()' },
-  mtime              => { type => 'timestamp' },
-  position           => { type => 'integer', not_null => 1 },
-  template_file_name => { type => 'text' },
+  description                  => { type => 'text', not_null => 1 },
+  function_block_number_format => { type => 'text', default => 'FB000', not_null => 1 },
+  id                           => { type => 'serial', not_null => 1 },
+  itime                        => { type => 'timestamp', default => 'now()' },
+  mtime                        => { type => 'timestamp' },
+  position                     => { type => 'integer', not_null => 1 },
+  section_number_format        => { type => 'text', default => 'A00', not_null => 1 },
+  template_file_name           => { type => 'text' },
 );
 
 __PACKAGE__->meta->primary_key_columns([ 'id' ]);
index dc710b4..433e844 100644 (file)
@@ -56,8 +56,8 @@ sub _before_save_create_fb_number {
 
   $self->requirement_spec->update_attributes($method => $next_number) || return 0;
 
-  $method    = 'requirement_spec_' . ($self->parent_id ? 'function_block' : 'section') . '_number_format';
-  my $format = SL::DB::Default->get->$method;
+  $method    = ($self->parent_id ? 'function_block' : 'section') . '_number_format';
+  my $format = $self->requirement_spec->type->$method;
 
   $self->fb_number(SL::PrefixedNumber->new(number => $format || 0)->set_to($next_number));
 
index b69fff8..1c56c59 100755 (executable)
@@ -1116,6 +1116,7 @@ $self->{texts} = {
   'Full access to all functions' => 'Vollzugriff auf alle Funktionen',
   'Function block'              => 'Funktionsblock',
   'Function block actions'      => 'Funktionsblockaktionen',
+  'Function block number format' => 'Format der Funktionsblocknummerierung',
   'Function/position'           => 'Funktion/Position',
   'Fwd'                         => 'Vorw&auml;rts',
   'GL Transaction'              => 'Dialogbuchung',
@@ -2021,6 +2022,7 @@ $self->{texts} = {
   'Searchable'                  => 'Durchsuchbar',
   'Secondary sorting'           => 'Untersortierung',
   'Section "#1"'                => 'Abschnitt "#1"',
+  'Section number format'       => 'Format der Abschnittsnummerierung',
   'Section/Function block actions' => 'Abschnitts-/Funktionsblockaktionen',
   'Sections'                    => 'Abschnitte',
   'Sections that are not assigned to any of the items above will be added as new positions.' => 'Abschnitte, die keiner der oben aufgeführten Positionen zugeordnet sind, werden als neue Positionen ergänzt.',
@@ -2398,6 +2400,7 @@ $self->{texts} = {
   'The name must only consist of letters, numbers and underscores and start with a letter.' => 'Der Name darf nur aus Buchstaben (keine Umlaute), Ziffern und Unterstrichen bestehen und muss mit einem Buchstaben beginnen.',
   'The new requirement spec will be a copy of \'#1\' for customer \'#2\'.' => 'Das neue Pflichtenheft wird eine Kopie von \'#1\' für Kunde \'#2\' sein.',
   'The number of days for full payment' => 'Die Anzahl Tage, bis die Rechnung in voller Höhe bezahlt werden muss',
+  'The numbering will start at 1 with each requirement spec.' => 'Die Nummerierung beginnt bei jedem Pflichtenheft bei 1.',
   'The option field is empty.'  => 'Das Optionsfeld ist leer.',
   'The package name is invalid.' => 'Der Paketname ist ungültig.',
   'The parts for this delivery order have already been transferred in.' => 'Die Artikel dieses Lieferscheins wurden bereits eingelagert.',
diff --git a/sql/Pg-upgrade2/requirement_spec_types_number_formats.sql b/sql/Pg-upgrade2/requirement_spec_types_number_formats.sql
new file mode 100644 (file)
index 0000000..01c54a5
--- /dev/null
@@ -0,0 +1,16 @@
+-- @tag: requirement_spec_types_number_formats
+-- @description: Nummerierungsformate für Pflichtenhefte in Typentabelle verschieben
+-- @depends: requirement_specs
+ALTER TABLE requirement_spec_types ADD   COLUMN section_number_format        TEXT;
+ALTER TABLE requirement_spec_types ALTER COLUMN section_number_format        SET DEFAULT 'A00';
+ALTER TABLE requirement_spec_types ADD   COLUMN function_block_number_format TEXT;
+ALTER TABLE requirement_spec_types ALTER COLUMN function_block_number_format SET DEFAULT 'FB000';
+
+UPDATE requirement_spec_types SET section_number_format        = (SELECT requirement_spec_section_number_format        FROM defaults);
+UPDATE requirement_spec_types SET function_block_number_format = (SELECT requirement_spec_function_block_number_format FROM defaults);
+
+ALTER TABLE requirement_spec_types ALTER COLUMN section_number_format        SET NOT NULL;
+ALTER TABLE requirement_spec_types ALTER COLUMN function_block_number_format SET NOT NULL;
+
+ALTER TABLE defaults DROP COLUMN requirement_spec_section_number_format;
+ALTER TABLE defaults DROP COLUMN requirement_spec_function_block_number_format;
index 814e49d..e9bc2d6 100755 (executable)
     <td>[% LxERP.t8('Print template base file name') %]<sup>(1)</sup></td>
     <td>[% L.input_tag("requirement_spec_type.template_file_name", SELF.requirement_spec_type.template_file_name) %]</td>
    </tr>
+
+   <tr>
+    <td>[% LxERP.t8('Section number format') %]<sup>(2)</sup></td>
+    <td>[% L.input_tag("requirement_spec_type.section_number_format", SELF.requirement_spec_type.section_number_format, size="15") %]</td>
+   </tr>
+
+   <tr>
+    <td>[% LxERP.t8('Function block number format') %]<sup>(2)</sup></td>
+    <td>[% L.input_tag("requirement_spec_type.function_block_number_format", SELF.requirement_spec_type.function_block_number_format, size="15") %]</td>
+   </tr>
   </table>
 
   <p>
@@ -29,5 +39,7 @@
 
   <p>
    <sup>(1)</sup>: [% LxERP.t8("The base file name without a path or an extension to be used for printing for this type of requirement spec.") %]
+   <br>
+   <sup>(2)</sup>: [% LxERP.t8('The numbering will start at 1 with each requirement spec.') %]
   </p>
  </form>
index b1a6baa..a8920dd 100644 (file)
@@ -16,6 +16,8 @@
     <tr class="listheading">
      <th align="center"><img src="image/updown.png" alt="[ LxERP.t8('reorder item') %]"></th>
      <th>[%- LxERP.t8('Description') %]</th>
+     <th>[%- LxERP.t8('Section number format') %]</th>
+     <th>[%- LxERP.t8('Function block number format') %]</th>
     </tr>
     </thead>
 
@@ -28,6 +30,9 @@
        [%- HTML.escape(requirement_spec_type.description) %]
       </a>
      </td>
+
+     <td>[% HTML.escape(requirement_spec_type.section_number_format) %]</td>
+     <td>[% HTML.escape(requirement_spec_type.function_block_number_format) %]</td>
     </tr>
     [%- END %]
     </tbody>