Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / SL / DB / MetaSetup / Part.pm
index f80ad78..ef6ed69 100644 (file)
@@ -4,55 +4,95 @@ package SL::DB::Part;
 
 use strict;
 
-use base qw(SL::DB::Object);
-
-__PACKAGE__->meta->setup(
-  table   => 'parts',
-
-  columns => [
-    id                 => { type => 'integer', not_null => 1, sequence => 'id' },
-    partnumber         => { type => 'text', not_null => 1 },
-    description        => { type => 'text' },
-    listprice          => { type => 'numeric', precision => 5, scale => 15 },
-    sellprice          => { type => 'numeric', precision => 5, scale => 15 },
-    lastcost           => { type => 'numeric', precision => 5, scale => 15 },
-    priceupdate        => { type => 'date', default => 'now' },
-    weight             => { type => 'float', precision => 4 },
-    notes              => { type => 'text' },
-    makemodel          => { type => 'boolean', default => 'false' },
-    assembly           => { type => 'boolean', default => 'false' },
-    alternate          => { type => 'boolean', default => 'false' },
-    rop                => { type => 'float', precision => 4 },
-    inventory_accno_id => { type => 'integer' },
-    income_accno_id    => { type => 'integer' },
-    expense_accno_id   => { type => 'integer' },
-    bin                => { type => 'text' },
-    shop               => { type => 'boolean', default => 'false' },
-    obsolete           => { type => 'boolean', default => 'false' },
-    bom                => { type => 'boolean', default => 'false' },
-    image              => { type => 'text' },
-    drawing            => { type => 'text' },
-    microfiche         => { type => 'text' },
-    partsgroup_id      => { type => 'integer' },
-    ve                 => { type => 'integer' },
-    gv                 => { type => 'numeric', precision => 5, scale => 15 },
-    itime              => { type => 'timestamp', default => 'now()' },
-    mtime              => { type => 'timestamp' },
-    unit               => { type => 'varchar', length => 20, not_null => 1 },
-    formel             => { type => 'text' },
-    not_discountable   => { type => 'boolean', default => 'false' },
-    buchungsgruppen_id => { type => 'integer' },
-    payment_id         => { type => 'integer' },
-    ean                => { type => 'text' },
-    price_factor_id    => { type => 'integer' },
-    onhand             => { type => 'numeric', default => '0', precision => 5, scale => 25 },
-    stockable          => { type => 'boolean', default => 'false' },
-    has_sernumber      => { type => 'boolean', default => 'false' },
-  ],
-
-  primary_key_columns => [ 'id' ],
-
-  allow_inline_column_values => 1,
+use parent qw(SL::DB::Object);
+
+__PACKAGE__->meta->table('parts');
+
+__PACKAGE__->meta->columns(
+  bin_id             => { type => 'integer' },
+  bom                => { type => 'boolean', default => 'false' },
+  buchungsgruppen_id => { type => 'integer' },
+  classification_id  => { type => 'integer', default => '0' },
+  description        => { type => 'text' },
+  drawing            => { type => 'text' },
+  ean                => { type => 'text' },
+  formel             => { type => 'text' },
+  gv                 => { type => 'numeric', precision => 15, scale => 5 },
+  has_sernumber      => { type => 'boolean', default => 'false' },
+  id                 => { type => 'integer', not_null => 1, sequence => 'id' },
+  image              => { type => 'text' },
+  itime              => { type => 'timestamp', default => 'now()' },
+  lastcost           => { type => 'numeric', precision => 15, scale => 5 },
+  listprice          => { type => 'numeric', precision => 15, scale => 5 },
+  makemodel          => { type => 'boolean', default => 'false' },
+  microfiche         => { type => 'text' },
+  mtime              => { type => 'timestamp' },
+  not_discountable   => { type => 'boolean', default => 'false' },
+  notes              => { type => 'text' },
+  obsolete           => { type => 'boolean', default => 'false' },
+  onhand             => { type => 'numeric', default => '0', precision => 25, scale => 5 },
+  part_type          => { type => 'enum', check_in => [ 'part', 'service', 'assembly', 'assortment' ], db_type => 'part_type_enum', not_null => 1 },
+  partnumber         => { type => 'text', not_null => 1 },
+  partsgroup_id      => { type => 'integer' },
+  payment_id         => { type => 'integer' },
+  price_factor_id    => { type => 'integer' },
+  priceupdate        => { type => 'date', default => 'now' },
+  rop                => { type => 'float', precision => 4, scale => 4 },
+  sellprice          => { type => 'numeric', precision => 15, scale => 5 },
+  shop               => { type => 'boolean', default => 'false' },
+  stockable          => { type => 'boolean', default => 'false' },
+  unit               => { type => 'varchar', length => 20, not_null => 1 },
+  ve                 => { type => 'integer' },
+  warehouse_id       => { type => 'integer' },
+  weight             => { type => 'float', precision => 4, scale => 4 },
+);
+
+__PACKAGE__->meta->primary_key_columns([ 'id' ]);
+
+__PACKAGE__->meta->unique_keys([ 'partnumber' ]);
+
+__PACKAGE__->meta->allow_inline_column_values(1);
+
+__PACKAGE__->meta->foreign_keys(
+  bin => {
+    class       => 'SL::DB::Bin',
+    key_columns => { bin_id => 'id' },
+  },
+
+  buchungsgruppen => {
+    class       => 'SL::DB::Buchungsgruppe',
+    key_columns => { buchungsgruppen_id => 'id' },
+  },
+
+  classification => {
+    class       => 'SL::DB::PartClassification',
+    key_columns => { classification_id => 'id' },
+  },
+
+  partsgroup => {
+    class       => 'SL::DB::PartsGroup',
+    key_columns => { partsgroup_id => 'id' },
+  },
+
+  payment => {
+    class       => 'SL::DB::PaymentTerm',
+    key_columns => { payment_id => 'id' },
+  },
+
+  price_factor => {
+    class       => 'SL::DB::PriceFactor',
+    key_columns => { price_factor_id => 'id' },
+  },
+
+  unit_obj => {
+    class       => 'SL::DB::Unit',
+    key_columns => { unit => 'name' },
+  },
+
+  warehouse => {
+    class       => 'SL::DB::Warehouse',
+    key_columns => { warehouse_id => 'id' },
+  },
 );
 
 1;