diff --git a/SL/BackgroundJob/SetNumberRange.pm b/SL/BackgroundJob/SetNumberRange.pm
index ac6428848c..bd90a81291 100644
--- a/SL/BackgroundJob/SetNumberRange.pm
+++ b/SL/BackgroundJob/SetNumberRange.pm
@@ -29,7 +29,7 @@ sub run {
my $defaults = SL::DB::Default->get;
- foreach (qw(invnumber cnnumber soinumber pqinumber sonumber ponumber sqnumber rfqnumber sdonumber pdonumber)) {
+ foreach (qw(invnumber cnnumber soinumber pqinumber sonumber ponumber pocnumber sqnumber rfqnumber sdonumber pdonumber)) {
my $current_number = SL::PrefixedNumber->new(number => $defaults->{$_});
$current_number->set_to($next_year * $multiplier);
$defaults->{$_} = $current_number->get_current;
diff --git a/SL/Controller/File.pm b/SL/Controller/File.pm
index ee2f77fdc6..da6a2799db 100644
--- a/SL/Controller/File.pm
+++ b/SL/Controller/File.pm
@@ -55,33 +55,34 @@ __PACKAGE__->run_before('check_object_params', only => [ qw(list ajax_delete aja
# model: base name of the rose model
# right: access right used for import
my %file_types = (
- 'sales_quotation' => { gen => 1, gltype => '', dir =>'SalesQuotation', model => 'Order', right => 'import_ar' },
- 'sales_order_intake' => { gen => 5, gltype => '', dir =>'SalesOrderIntake', model => 'Order', right => 'import_ar' },
- 'sales_order' => { gen => 5, gltype => '', dir =>'SalesOrder', model => 'Order', right => 'import_ar' },
- 'sales_delivery_order' => { gen => 1, gltype => '', dir =>'SalesDeliveryOrder', model => 'DeliveryOrder', right => 'import_ar' },
- 'sales_reclamation' => { gen => 5, gltype => '', dir =>'SalesReclamation', model => 'Reclamation', right => 'import_ar' },
- 'invoice' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
- 'invoice_for_advance_payment' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
- 'final_invoice' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
- 'credit_note' => { gen => 1, gltype => '', dir =>'CreditNote', model => 'Invoice', right => 'import_ar' },
- 'request_quotation' => { gen => 7, gltype => '', dir =>'RequestForQuotation', model => 'Order', right => 'import_ap' },
- 'purchase_quotation_intake' => { gen => 7, gltype => '', dir =>'PurchaseQuotationIntake', model => 'Order', right => 'import_ap' },
- 'purchase_order' => { gen => 7, gltype => '', dir =>'PurchaseOrder', model => 'Order', right => 'import_ap' },
- 'purchase_delivery_order' => { gen => 7, gltype => '', dir =>'PurchaseDeliveryOrder', model => 'DeliveryOrder', right => 'import_ap' },
- 'purchase_reclamation' => { gen => 7, gltype => '', dir =>'PurchaseReclamation', model => 'Reclamation', right => 'import_ap' },
- 'purchase_invoice' => { gen => 6, gltype => 'ap', dir =>'PurchaseInvoice', model => 'PurchaseInvoice',right => 'import_ap' },
- 'supplier_delivery_order' => { gen => 7, gltype => '', dir =>'SupplierDeliveryOrder', model => 'DeliveryOrder', right => 'import_ap' },
- 'rma_delivery_order' => { gen => 7, gltype => '', dir =>'RMADeliveryOrder', model => 'DeliveryOrder', right => 'import_ar' },
- 'vendor' => { gen => 0, gltype => '', dir =>'Vendor', model => 'Vendor', right => 'xx' },
- 'customer' => { gen => 1, gltype => '', dir =>'Customer', model => 'Customer', right => 'xx' },
- 'project' => { gen => 0, gltype => '', dir =>'Project', model => 'Project', right => 'xx' },
- 'part' => { gen => 0, gltype => '', dir =>'Part', model => 'Part', right => 'xx' },
- 'gl_transaction' => { gen => 6, gltype => 'gl', dir =>'GeneralLedger', model => 'GLTransaction', right => 'import_ap' },
- 'draft' => { gen => 0, gltype => '', dir =>'Draft', model => 'Draft', right => 'xx' },
- 'csv_customer' => { gen => 1, gltype => '', dir =>'Reports', model => 'Customer', right => 'xx' },
- 'csv_vendor' => { gen => 1, gltype => '', dir =>'Reports', model => 'Vendor', right => 'xx' },
- 'shop_image' => { gen => 0, gltype => '', dir =>'ShopImages', model => 'Part', right => 'xx' },
- 'letter' => { gen => 7, gltype => '', dir =>'Letter', model => 'Letter', right => 'sales_letter_edit | purchase_letter_edit' },
+ 'sales_quotation' => { gen => 1, gltype => '', dir =>'SalesQuotation', model => 'Order', right => 'import_ar' },
+ 'sales_order_intake' => { gen => 5, gltype => '', dir =>'SalesOrderIntake', model => 'Order', right => 'import_ar' },
+ 'sales_order' => { gen => 5, gltype => '', dir =>'SalesOrder', model => 'Order', right => 'import_ar' },
+ 'sales_delivery_order' => { gen => 1, gltype => '', dir =>'SalesDeliveryOrder', model => 'DeliveryOrder', right => 'import_ar' },
+ 'sales_reclamation' => { gen => 5, gltype => '', dir =>'SalesReclamation', model => 'Reclamation', right => 'import_ar' },
+ 'invoice' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
+ 'invoice_for_advance_payment' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
+ 'final_invoice' => { gen => 1, gltype => 'ar', dir =>'SalesInvoice', model => 'Invoice', right => 'import_ar' },
+ 'credit_note' => { gen => 1, gltype => '', dir =>'CreditNote', model => 'Invoice', right => 'import_ar' },
+ 'request_quotation' => { gen => 7, gltype => '', dir =>'RequestForQuotation', model => 'Order', right => 'import_ap' },
+ 'purchase_quotation_intake' => { gen => 7, gltype => '', dir =>'PurchaseQuotationIntake', model => 'Order', right => 'import_ap' },
+ 'purchase_order' => { gen => 7, gltype => '', dir =>'PurchaseOrder', model => 'Order', right => 'import_ap' },
+ 'purchase_order_confirmation' => { gen => 7, gltype => '', dir =>'PurchaseOrderConfirmation', model => 'Order', right => 'import_ap' },
+ 'purchase_delivery_order' => { gen => 7, gltype => '', dir =>'PurchaseDeliveryOrder', model => 'DeliveryOrder', right => 'import_ap' },
+ 'purchase_reclamation' => { gen => 7, gltype => '', dir =>'PurchaseReclamation', model => 'Reclamation', right => 'import_ap' },
+ 'purchase_invoice' => { gen => 6, gltype => 'ap', dir =>'PurchaseInvoice', model => 'PurchaseInvoice',right => 'import_ap' },
+ 'supplier_delivery_order' => { gen => 7, gltype => '', dir =>'SupplierDeliveryOrder', model => 'DeliveryOrder', right => 'import_ap' },
+ 'rma_delivery_order' => { gen => 7, gltype => '', dir =>'RMADeliveryOrder', model => 'DeliveryOrder', right => 'import_ar' },
+ 'vendor' => { gen => 0, gltype => '', dir =>'Vendor', model => 'Vendor', right => 'xx' },
+ 'customer' => { gen => 1, gltype => '', dir =>'Customer', model => 'Customer', right => 'xx' },
+ 'project' => { gen => 0, gltype => '', dir =>'Project', model => 'Project', right => 'xx' },
+ 'part' => { gen => 0, gltype => '', dir =>'Part', model => 'Part', right => 'xx' },
+ 'gl_transaction' => { gen => 6, gltype => 'gl', dir =>'GeneralLedger', model => 'GLTransaction', right => 'import_ap' },
+ 'draft' => { gen => 0, gltype => '', dir =>'Draft', model => 'Draft', right => 'xx' },
+ 'csv_customer' => { gen => 1, gltype => '', dir =>'Reports', model => 'Customer', right => 'xx' },
+ 'csv_vendor' => { gen => 1, gltype => '', dir =>'Reports', model => 'Vendor', right => 'xx' },
+ 'shop_image' => { gen => 0, gltype => '', dir =>'ShopImages', model => 'Part', right => 'xx' },
+ 'letter' => { gen => 7, gltype => '', dir =>'Letter', model => 'Letter', right => 'sales_letter_edit | purchase_letter_edit' },
);
#--- 4 locale ---#
diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm
index bbc369c6d2..4feaf2d45f 100644
--- a/SL/Controller/Order.pm
+++ b/SL/Controller/Order.pm
@@ -246,6 +246,7 @@ sub action_delete {
my $text = $self->type eq SALES_ORDER_INTAKE_TYPE() ? $::locale->text('The order intake has been deleted')
: $self->type eq SALES_ORDER_TYPE() ? $::locale->text('The order confirmation has been deleted')
: $self->type eq PURCHASE_ORDER_TYPE() ? $::locale->text('The order has been deleted')
+ : $self->type eq PURCHASE_ORDER_CONFIRMATION_TYPE() ? $::locale->text('The order confirmation has been deleted')
: $self->type eq SALES_QUOTATION_TYPE() ? $::locale->text('The quotation has been deleted')
: $self->type eq REQUEST_QUOTATION_TYPE() ? $::locale->text('The rfq has been deleted')
: $self->type eq PURCHASE_QUOTATION_INTAKE_TYPE() ? $::locale->text('The quotation intake has been deleted')
@@ -2109,7 +2110,8 @@ sub save {
id => \@converted_from_oe_ids,
or => [ record_type => SALES_QUOTATION_TYPE(),
record_type => REQUEST_QUOTATION_TYPE(),
- (record_type => PURCHASE_QUOTATION_INTAKE_TYPE()) x $self->order->is_type(PURCHASE_ORDER_TYPE()) ]
+ (record_type => PURCHASE_QUOTATION_INTAKE_TYPE()) x $self->order->is_type(PURCHASE_ORDER_TYPE()),
+ (record_type => PURCHASE_ORDER_TYPE()) x $self->order->is_type(PURCHASE_ORDER_CONFIRMATION_TYPE()) ]
])
: undef;
@@ -2178,7 +2180,7 @@ sub pre_render {
$item->active_discount_source($price_source->discount_from_source($item->active_discount_source));
}
- if (any { $self->type eq $_ } (SALES_ORDER_INTAKE_TYPE(), SALES_ORDER_TYPE(), PURCHASE_ORDER_TYPE())) {
+ if (any { $self->type eq $_ } (SALES_ORDER_INTAKE_TYPE(), SALES_ORDER_TYPE(), PURCHASE_ORDER_TYPE(), PURCHASE_ORDER_CONFIRMATION_TYPE())) {
# Calculate shipped qtys here to prevent calling calculate for every item via the items method.
# Do not use write_to_objects to prevent order->delivered to be set, because this should be
# the value from db, which can be set manually or is set when linked delivery orders are saved.
@@ -2340,6 +2342,13 @@ sub setup_edit_action_bar {
only_if => $self->type_data->show_menu('save_and_purchase_order'),
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef,
],
+ action => [
+ t8('Save and Purchase Order Confirmation'),
+ call => [ 'kivi.Order.purchase_check_for_direct_delivery', { to_type => PURCHASE_ORDER_CONFIRMATION_TYPE() } ],
+ checks => [ @valid, @req_trans_cost_art, @req_cusordnumber ],
+ only_if => $self->type_data->show_menu('save_and_purchase_order_confirmation'),
+ disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef,
+ ],
action => [
t8('Save and Sales Delivery Order'),
call => [ 'kivi.Order.save', {
@@ -2384,7 +2393,7 @@ sub setup_edit_action_bar {
],
}],
checks => [ @req_trans_cost_art, @req_cusordnumber ],
- only_if => (any { $self->type eq $_ } (PURCHASE_ORDER_TYPE())),
+ only_if => $self->type_data->show_menu('save_and_purchase_delivery_order'),
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.') : undef,
],
action => [
@@ -2485,6 +2494,7 @@ sub setup_edit_action_bar {
checks => [ @req_trans_cost_art, @req_cusordnumber ],
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
: $is_final_version ? t8('This record is the final version. Please create a new sub-version') : undef,
+ only_if => $self->type_data->show_menu('save_and_print'),
],
action => [
t8('Save and print'),
@@ -2494,6 +2504,7 @@ sub setup_edit_action_bar {
checks => [ @req_trans_cost_art, @req_cusordnumber ],
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
: $is_final_version ? t8('This record is the final version. Please create a new sub-version') : undef,
+ only_if => $self->type_data->show_menu('save_and_print'),
],
action => [
($is_final_version ? t8('E-mail') : t8('Save and E-mail')),
@@ -2506,6 +2517,7 @@ sub setup_edit_action_bar {
disabled => !$may_edit_create ? t8('You do not have the permissions to access this function.')
: !$self->order->id ? t8('This object has not been saved yet.')
: undef,
+ only_if => $self->type_data->show_menu('save_and_email'),
],
action => [
t8('Download attachments of all parts'),
diff --git a/SL/Controller/RecordLinks.pm b/SL/Controller/RecordLinks.pm
index 16300f2c51..ea7fbfed17 100644
--- a/SL/Controller/RecordLinks.pm
+++ b/SL/Controller/RecordLinks.pm
@@ -39,28 +39,29 @@ my %link_type_defaults = (
);
my @link_type_specifics = (
- { title => t8('Requirement spec'), type => 'requirement_spec', model => 'RequirementSpec', number => 'id', project => 'project', description => 'title', date => undef, filter => 'working_copy_filter', },
- { title => t8('Shop Order'), type => 'shop_order', model => 'ShopOrder', number => 'shop_ordernumber', date => 'order_date', project => undef, description => undef, },
- { title => t8('Sales quotation'), type => 'sales_quotation', model => 'Order', number => 'quonumber', },
- { title => t8('Sales Order Intake'), type => 'sales_order_intake', model => 'Order', number => 'ordnumber', },
- { title => t8('Sales Order'), type => 'sales_order', model => 'Order', number => 'ordnumber', },
- { title => t8('Sales delivery order'), type => 'sales_delivery_order', model => 'DeliveryOrder', number => 'donumber', },
- { title => t8('RMA delivery order'), type => 'rma_delivery_order', model => 'DeliveryOrder', number => 'rdonumber', },
- { title => t8('Sales Reclamation'), type => 'sales_reclamation', model => 'Reclamation', number => 'record_number', },
- { title => t8('Sales Invoice'), type => 'invoice', model => 'Invoice', number => 'invnumber', },
- { title => t8('Request for Quotation'), type => 'request_quotation', model => 'Order', number => 'quonumber', },
- { title => t8('Purchase Quotation Intake'), type => 'purchase_quotation_intake', model => 'Order', number => 'quonumber', },
- { title => t8('Purchase Order'), type => 'purchase_order', model => 'Order', number => 'ordnumber', },
- { title => t8('Purchase delivery order'), type => 'purchase_delivery_order', model => 'DeliveryOrder', number => 'donumber', },
- { title => t8('Supplier delivery order'), type => 'supplier_delivery_order', model => 'DeliveryOrder', number => 'sdonumber', },
- { title => t8('Purchase Reclamation'), type => 'purchase_reclamation', model => 'Reclamation', number => 'record_number', },
- { title => t8('Purchase Invoice'), type => 'purchase_invoice', model => 'PurchaseInvoice', number => 'invnumber', },
- { title => t8('Letter'), type => 'letter', model => 'Letter', number => 'letternumber', description => 'subject', description_title => t8('Subject'), date => 'date', project => undef },
- { title => t8('Email'), type => 'email_journal', model => 'EmailJournal', number => 'id', description => 'subject', description_title => t8('Subject'), project => undef, date => 'sent_on', },
- { title => t8('AR Transaction'), type => 'ar_transaction', model => 'Invoice', number => 'invnumber', },
- { title => t8('AP Transaction'), type => 'ap_transaction', model => 'PurchaseInvoice', number => 'invnumber', },
- { title => t8('Dunning'), type => 'dunning', model => 'Dunning', number => 'dunning_id', project => undef, description => undef, },
- { title => t8('GL Transaction'), type => 'gl_transaction', model => 'GLTransaction', number => 'reference', project => undef },
+ { title => t8('Requirement spec'), type => 'requirement_spec', model => 'RequirementSpec', number => 'id', project => 'project', description => 'title', date => undef, filter => 'working_copy_filter', },
+ { title => t8('Shop Order'), type => 'shop_order', model => 'ShopOrder', number => 'shop_ordernumber', date => 'order_date', project => undef, description => undef, },
+ { title => t8('Sales quotation'), type => 'sales_quotation', model => 'Order', number => 'quonumber', },
+ { title => t8('Sales Order Intake'), type => 'sales_order_intake', model => 'Order', number => 'ordnumber', },
+ { title => t8('Sales Order'), type => 'sales_order', model => 'Order', number => 'ordnumber', },
+ { title => t8('Sales delivery order'), type => 'sales_delivery_order', model => 'DeliveryOrder', number => 'donumber', },
+ { title => t8('RMA delivery order'), type => 'rma_delivery_order', model => 'DeliveryOrder', number => 'rdonumber', },
+ { title => t8('Sales Reclamation'), type => 'sales_reclamation', model => 'Reclamation', number => 'record_number', },
+ { title => t8('Sales Invoice'), type => 'invoice', model => 'Invoice', number => 'invnumber', },
+ { title => t8('Request for Quotation'), type => 'request_quotation', model => 'Order', number => 'quonumber', },
+ { title => t8('Purchase Quotation Intake'), type => 'purchase_quotation_intake', model => 'Order', number => 'quonumber', },
+ { title => t8('Purchase Order'), type => 'purchase_order', model => 'Order', number => 'ordnumber', },
+ { title => t8('Purchase Order Confirmation'), type => 'purchase_order_confirmation', model => 'Order', number => 'ordnumber', },
+ { title => t8('Purchase delivery order'), type => 'purchase_delivery_order', model => 'DeliveryOrder', number => 'donumber', },
+ { title => t8('Supplier delivery order'), type => 'supplier_delivery_order', model => 'DeliveryOrder', number => 'sdonumber', },
+ { title => t8('Purchase Reclamation'), type => 'purchase_reclamation', model => 'Reclamation', number => 'record_number', },
+ { title => t8('Purchase Invoice'), type => 'purchase_invoice', model => 'PurchaseInvoice', number => 'invnumber', },
+ { title => t8('Letter'), type => 'letter', model => 'Letter', number => 'letternumber', description => 'subject', description_title => t8('Subject'), date => 'date', project => undef },
+ { title => t8('Email'), type => 'email_journal', model => 'EmailJournal', number => 'id', description => 'subject', description_title => t8('Subject'), project => undef, date => 'sent_on', },
+ { title => t8('AR Transaction'), type => 'ar_transaction', model => 'Invoice', number => 'invnumber', },
+ { title => t8('AP Transaction'), type => 'ap_transaction', model => 'PurchaseInvoice', number => 'invnumber', },
+ { title => t8('Dunning'), type => 'dunning', model => 'Dunning', number => 'dunning_id', project => undef, description => undef, },
+ { title => t8('GL Transaction'), type => 'gl_transaction', model => 'GLTransaction', number => 'reference', project => undef },
);
my @link_types = map { +{ %link_type_defaults, %{ $_ } } } @link_type_specifics;
diff --git a/SL/Controller/TopQuickSearch.pm b/SL/Controller/TopQuickSearch.pm
index 5ff0054bd5..80536ee26b 100644
--- a/SL/Controller/TopQuickSearch.pm
+++ b/SL/Controller/TopQuickSearch.pm
@@ -26,6 +26,7 @@ my @available_modules = (
'SL::Controller::TopQuickSearch::RequestForQuotation',
'SL::Controller::TopQuickSearch::PurchaseQuotationIntake',
'SL::Controller::TopQuickSearch::PurchaseOrder',
+ 'SL::Controller::TopQuickSearch::PurchaseOrderConfirmation',
'SL::Controller::TopQuickSearch::PurchaseDeliveryOrder',
'SL::Controller::TopQuickSearch::GLTransaction',
'SL::Controller::TopQuickSearch::Customer',
diff --git a/SL/Controller/TopQuickSearch/PurchaseOrderConfirmation.pm b/SL/Controller/TopQuickSearch/PurchaseOrderConfirmation.pm
new file mode 100644
index 0000000000..ba3c0d07f2
--- /dev/null
+++ b/SL/Controller/TopQuickSearch/PurchaseOrderConfirmation.pm
@@ -0,0 +1,20 @@
+package SL::Controller::TopQuickSearch::PurchaseOrderConfirmation;
+
+use strict;
+use parent qw(SL::Controller::TopQuickSearch::OERecord);
+
+use SL::Locale::String qw(t8);
+
+sub auth { 'purchase_order_edit | purchase_order_view' }
+
+sub name { 'purchase_order_confirmation' }
+
+sub description_config { t8('Purchase Order Confirmations') }
+
+sub description_field { t8('Purchase Order Confirmations') }
+
+sub type { 'purchase_order_confirmation' }
+
+sub vc { 'vendor' }
+
+1;
diff --git a/SL/DB/DeliveryOrder.pm b/SL/DB/DeliveryOrder.pm
index 8a62ce2022..ec67d6c3bb 100644
--- a/SL/DB/DeliveryOrder.pm
+++ b/SL/DB/DeliveryOrder.pm
@@ -17,6 +17,7 @@ use SL::DB::Helper::TransNumberGenerator;
use SL::DB::Helper::RecordLink qw(RECORD_ID RECORD_TYPE_REF);
use SL::DB::DeliveryOrder::TypeData qw(:types);
+use SL::DB::Order::TypeData qw(:types);
use SL::DB::Reclamation::TypeData qw(:types);
use SL::Helper::Number qw(_format_total _round_total);
@@ -129,6 +130,22 @@ sub number {
goto &donumber;
}
+sub preceding_purchase_order_confirmations {
+ my ($self) = @_;
+
+ my @lrs = ();
+ if ($self->id) {
+ @lrs = grep { $_->record_type eq PURCHASE_ORDER_CONFIRMATION_TYPE() } @{$self->linked_records(from => 'SL::DB::Order')};
+ } else {
+ if ('SL::DB::Order' eq $self->{RECORD_TYPE_REF()}) {
+ my $order = SL::DB::Order->load_cached($self->{RECORD_ID()});
+ push @lrs, $order if $order->record_type eq PURCHASE_ORDER_CONFIRMATION_TYPE();
+ }
+ }
+
+ return \@lrs;
+}
+
sub _clone_orderitem_cvar {
my ($cvar) = @_;
@@ -183,7 +200,6 @@ sub new_from {
intnotes
language_id
notes
- ordnumber
payment_id
reqdate
salesman_id
@@ -192,8 +208,10 @@ sub new_from {
taxincluded
taxzone_id
transaction_description
+ vendor_confirmation_number
vendor_id
);
+ $record_args{ordnumber} = $source->ordnumber if $source->record_type ne PURCHASE_ORDER_CONFIRMATION_TYPE();
# }}} for vim folds
} elsif ( ref($source) eq 'SL::DB::Reclamation' ) {
map{ ( $record_args{$_} = $source->$_ ) } # {{{ for vim folds
diff --git a/SL/DB/Helper/LinkedRecords.pm b/SL/DB/Helper/LinkedRecords.pm
index 4b4c52b25c..206d40f48e 100644
--- a/SL/DB/Helper/LinkedRecords.pm
+++ b/SL/DB/Helper/LinkedRecords.pm
@@ -331,26 +331,27 @@ sub sort_linked_records {
};
my %scores;
- %scores = ( 'SL::DB::SalesProcess' => 10,
- 'SL::DB::RequirementSpec' => 15,
- 'SL::DB::Order' => sub { $scores{ $_[0]->type } },
- sales_quotation => 20,
- sales_order_intake => 25,
- sales_order => 30,
- sales_delivery_order => 40,
- 'SL::DB::DeliveryOrder' => sub { $scores{ $_[0]->type } },
- 'SL::DB::Invoice' => 50,
- request_quotation => 120,
- purchase_quotation_intake => 125,
- purchase_order => 130,
- purchase_delivery_order => 140,
- 'SL::DB::PurchaseInvoice' => 150,
- 'SL::DB::GLTransaction' => 170,
- 'SL::DB::Letter' => 200,
- 'SL::DB::ShopOrder' => 250,
- 'SL::DB::EmailJournal' => 300,
- 'SL::DB::Dunning' => 350,
- UNKNOWN => 999,
+ %scores = ( 'SL::DB::SalesProcess' => 10,
+ 'SL::DB::RequirementSpec' => 15,
+ 'SL::DB::Order' => sub { $scores{ $_[0]->type } },
+ sales_quotation => 20,
+ sales_order_intake => 25,
+ sales_order => 30,
+ sales_delivery_order => 40,
+ 'SL::DB::DeliveryOrder' => sub { $scores{ $_[0]->type } },
+ 'SL::DB::Invoice' => 50,
+ request_quotation => 120,
+ purchase_quotation_intake => 125,
+ purchase_order => 130,
+ purchase_order_confirmation => 135,
+ purchase_delivery_order => 140,
+ 'SL::DB::PurchaseInvoice' => 150,
+ 'SL::DB::GLTransaction' => 170,
+ 'SL::DB::Letter' => 200,
+ 'SL::DB::ShopOrder' => 250,
+ 'SL::DB::EmailJournal' => 300,
+ 'SL::DB::Dunning' => 350,
+ UNKNOWN => 999,
);
my $score_xtor = sub {
my $score = $scores{ ref($_[0]) };
diff --git a/SL/DB/Helper/TransNumberGenerator.pm b/SL/DB/Helper/TransNumberGenerator.pm
index ab4f09a903..f5694ec1b5 100644
--- a/SL/DB/Helper/TransNumberGenerator.pm
+++ b/SL/DB/Helper/TransNumberGenerator.pm
@@ -27,25 +27,26 @@ sub parts_scoping {
# SL::DB::Manager::Part->type_filter($_[0]);
}
-my %specs = ( ar => { number_column => 'invnumber', },
- sales_quotation => { number_column => 'quonumber', number_range_column => 'sqnumber', scoping => \&oe_scoping, },
- sales_order_intake => { number_column => 'ordnumber', number_range_column => 'soinumber', scoping => \&oe_scoping, },
- sales_order => { number_column => 'ordnumber', number_range_column => 'sonumber', scoping => \&oe_scoping, },
- request_quotation => { number_column => 'quonumber', number_range_column => 'rfqnumber', scoping => \&oe_scoping, },
- purchase_quotation_intake => { number_column => 'quonumber', number_range_column => 'pqinumber', scoping => \&oe_scoping, },
- purchase_order => { number_column => 'ordnumber', number_range_column => 'ponumber', scoping => \&oe_scoping, },
- sales_delivery_order => { number_column => 'donumber', number_range_column => 'sdonumber', scoping => \&do_scoping, },
- purchase_delivery_order => { number_column => 'donumber', number_range_column => 'pdonumber', scoping => \&do_scoping, },
- supplier_delivery_order => { number_column => 'donumber', number_range_column => 'sudonumber', scoping => \&do_scoping, },
- rma_delivery_order => { number_column => 'donumber', number_range_column => 'rdonumber', scoping => \&do_scoping, },
- sales_reclamation => { number_column => 'record_number', number_range_column => 's_reclamation_record_number',scoping => \&rec_scoping, },
- purchase_reclamation => { number_column => 'record_number', number_range_column => 'p_reclamation_record_number',scoping => \&rec_scoping, },
- customer => { number_column => 'customernumber', number_range_column => 'customernumber', },
- vendor => { number_column => 'vendornumber', number_range_column => 'vendornumber', },
- part => { number_column => 'partnumber', number_range_column => 'articlenumber', },
- service => { number_column => 'partnumber', number_range_column => 'servicenumber', },
- assembly => { number_column => 'partnumber', number_range_column => 'assemblynumber', },
- assortment => { number_column => 'partnumber', number_range_column => 'assortmentnumber', },
+my %specs = ( ar => { number_column => 'invnumber', },
+ sales_quotation => { number_column => 'quonumber', number_range_column => 'sqnumber', scoping => \&oe_scoping, },
+ sales_order_intake => { number_column => 'ordnumber', number_range_column => 'soinumber', scoping => \&oe_scoping, },
+ sales_order => { number_column => 'ordnumber', number_range_column => 'sonumber', scoping => \&oe_scoping, },
+ request_quotation => { number_column => 'quonumber', number_range_column => 'rfqnumber', scoping => \&oe_scoping, },
+ purchase_quotation_intake => { number_column => 'quonumber', number_range_column => 'pqinumber', scoping => \&oe_scoping, },
+ purchase_order => { number_column => 'ordnumber', number_range_column => 'ponumber', scoping => \&oe_scoping, },
+ purchase_order_confirmation => { number_column => 'ordnumber', number_range_column => 'pocnumber', scoping => \&oe_scoping, },
+ sales_delivery_order => { number_column => 'donumber', number_range_column => 'sdonumber', scoping => \&do_scoping, },
+ purchase_delivery_order => { number_column => 'donumber', number_range_column => 'pdonumber', scoping => \&do_scoping, },
+ supplier_delivery_order => { number_column => 'donumber', number_range_column => 'sudonumber', scoping => \&do_scoping, },
+ rma_delivery_order => { number_column => 'donumber', number_range_column => 'rdonumber', scoping => \&do_scoping, },
+ sales_reclamation => { number_column => 'record_number', number_range_column => 's_reclamation_record_number',scoping => \&rec_scoping, },
+ purchase_reclamation => { number_column => 'record_number', number_range_column => 'p_reclamation_record_number',scoping => \&rec_scoping, },
+ customer => { number_column => 'customernumber', number_range_column => 'customernumber', },
+ vendor => { number_column => 'vendornumber', number_range_column => 'vendornumber', },
+ part => { number_column => 'partnumber', number_range_column => 'articlenumber', },
+ service => { number_column => 'partnumber', number_range_column => 'servicenumber', },
+ assembly => { number_column => 'partnumber', number_range_column => 'assemblynumber', },
+ assortment => { number_column => 'partnumber', number_range_column => 'assortmentnumber', },
);
sub get_next_trans_number {
diff --git a/SL/DB/Manager/Order.pm b/SL/DB/Manager/Order.pm
index fa611da896..378b96b8d7 100644
--- a/SL/DB/Manager/Order.pm
+++ b/SL/DB/Manager/Order.pm
@@ -36,6 +36,7 @@ sub type_filter {
SALES_ORDER_TYPE(),
SALES_QUOTATION_TYPE(),
PURCHASE_ORDER_TYPE(),
+ PURCHASE_ORDER_CONFIRMATION_TYPE(),
REQUEST_QUOTATION_TYPE(),
PURCHASE_QUOTATION_INTAKE_TYPE(),
));
diff --git a/SL/DB/MetaSetup/Default.pm b/SL/DB/MetaSetup/Default.pm
index 6289f577c7..77aa0b4c6d 100644
--- a/SL/DB/MetaSetup/Default.pm
+++ b/SL/DB/MetaSetup/Default.pm
@@ -151,6 +151,7 @@ __PACKAGE__->meta->columns(
partsgroup_required => { type => 'boolean', default => 'false', not_null => 1 },
payments_changeable => { type => 'integer', default => '0', not_null => 1 },
pdonumber => { type => 'text' },
+ pocnumber => { type => 'text' },
ponumber => { type => 'text' },
pqinumber => { type => 'text' },
precision => { type => 'numeric', default => '0.01', not_null => 1, precision => 15, scale => 5 },
diff --git a/SL/DB/MetaSetup/DeliveryOrder.pm b/SL/DB/MetaSetup/DeliveryOrder.pm
index c80c5336a2..2ab10c3623 100644
--- a/SL/DB/MetaSetup/DeliveryOrder.pm
+++ b/SL/DB/MetaSetup/DeliveryOrder.pm
@@ -9,39 +9,40 @@ use parent qw(SL::DB::Object);
__PACKAGE__->meta->table('delivery_orders');
__PACKAGE__->meta->columns(
- billing_address_id => { type => 'integer' },
- closed => { type => 'boolean', default => 'false' },
- cp_id => { type => 'integer' },
- currency_id => { type => 'integer', not_null => 1 },
- cusordnumber => { type => 'text' },
- customer_id => { type => 'integer' },
- delivered => { type => 'boolean', default => 'false' },
- delivery_term_id => { type => 'integer' },
- department_id => { type => 'integer' },
- donumber => { type => 'text', not_null => 1 },
- employee_id => { type => 'integer' },
- globalproject_id => { type => 'integer' },
- id => { type => 'integer', not_null => 1, sequence => 'id' },
- intnotes => { type => 'text' },
- itime => { type => 'timestamp', default => 'now()' },
- language_id => { type => 'integer' },
- mtime => { type => 'timestamp' },
- notes => { type => 'text' },
- ordnumber => { type => 'text' },
- oreqnumber => { type => 'text' },
- payment_id => { type => 'integer' },
- record_type => { type => 'enum', check_in => [ 'sales_delivery_order', 'purchase_delivery_order', 'supplier_delivery_order', 'rma_delivery_order' ], db_type => 'delivery_order_types', not_null => 1 },
- reqdate => { type => 'date' },
- salesman_id => { type => 'integer' },
- shippingpoint => { type => 'text' },
- shipto_id => { type => 'integer' },
- shipvia => { type => 'text' },
- tax_point => { type => 'date' },
- taxincluded => { type => 'boolean' },
- taxzone_id => { type => 'integer', not_null => 1 },
- transaction_description => { type => 'text' },
- transdate => { type => 'date', default => 'now()' },
- vendor_id => { type => 'integer' },
+ billing_address_id => { type => 'integer' },
+ closed => { type => 'boolean', default => 'false' },
+ cp_id => { type => 'integer' },
+ currency_id => { type => 'integer', not_null => 1 },
+ cusordnumber => { type => 'text' },
+ customer_id => { type => 'integer' },
+ delivered => { type => 'boolean', default => 'false' },
+ delivery_term_id => { type => 'integer' },
+ department_id => { type => 'integer' },
+ donumber => { type => 'text', not_null => 1 },
+ employee_id => { type => 'integer' },
+ globalproject_id => { type => 'integer' },
+ id => { type => 'integer', not_null => 1, sequence => 'id' },
+ intnotes => { type => 'text' },
+ itime => { type => 'timestamp', default => 'now()' },
+ language_id => { type => 'integer' },
+ mtime => { type => 'timestamp' },
+ notes => { type => 'text' },
+ ordnumber => { type => 'text' },
+ oreqnumber => { type => 'text' },
+ payment_id => { type => 'integer' },
+ record_type => { type => 'enum', check_in => [ 'sales_delivery_order', 'purchase_delivery_order', 'supplier_delivery_order', 'rma_delivery_order' ], db_type => 'delivery_order_types', not_null => 1 },
+ reqdate => { type => 'date' },
+ salesman_id => { type => 'integer' },
+ shippingpoint => { type => 'text' },
+ shipto_id => { type => 'integer' },
+ shipvia => { type => 'text' },
+ tax_point => { type => 'date' },
+ taxincluded => { type => 'boolean' },
+ taxzone_id => { type => 'integer', not_null => 1 },
+ transaction_description => { type => 'text' },
+ transdate => { type => 'date', default => 'now()' },
+ vendor_confirmation_number => { type => 'text' },
+ vendor_id => { type => 'integer' },
);
__PACKAGE__->meta->primary_key_columns([ 'id' ]);
diff --git a/SL/DB/MetaSetup/Order.pm b/SL/DB/MetaSetup/Order.pm
index 9e0657c2b2..ba136e1036 100644
--- a/SL/DB/MetaSetup/Order.pm
+++ b/SL/DB/MetaSetup/Order.pm
@@ -9,49 +9,50 @@ use parent qw(SL::DB::Object);
__PACKAGE__->meta->table('oe');
__PACKAGE__->meta->columns(
- amount => { type => 'numeric', precision => 15, scale => 5 },
- billing_address_id => { type => 'integer' },
- closed => { type => 'boolean', default => 'false' },
- cp_id => { type => 'integer' },
- currency_id => { type => 'integer', not_null => 1 },
- cusordnumber => { type => 'text' },
- customer_id => { type => 'integer' },
- delivered => { type => 'boolean', default => 'false' },
- delivery_customer_id => { type => 'integer' },
- delivery_term_id => { type => 'integer' },
- delivery_vendor_id => { type => 'integer' },
- department_id => { type => 'integer' },
- employee_id => { type => 'integer' },
- exchangerate => { type => 'numeric', precision => 15, scale => 5 },
- expected_billing_date => { type => 'date' },
- globalproject_id => { type => 'integer' },
- id => { type => 'integer', not_null => 1, sequence => 'id' },
- intnotes => { type => 'text' },
- itime => { type => 'timestamp', default => 'now()' },
- language_id => { type => 'integer' },
- marge_percent => { type => 'numeric', precision => 15, scale => 5 },
- marge_total => { type => 'numeric', precision => 15, scale => 5 },
- mtime => { type => 'timestamp' },
- netamount => { type => 'numeric', precision => 15, scale => 5 },
- notes => { type => 'text' },
- order_probability => { type => 'integer', default => '0', not_null => 1 },
- order_status_id => { type => 'integer' },
- ordnumber => { type => 'text', not_null => 1 },
- payment_id => { type => 'integer' },
- proforma => { type => 'boolean', default => 'false' },
- quonumber => { type => 'text' },
- record_type => { type => 'enum', check_in => [ 'request_quotation', 'sales_quotation', 'purchase_quotation_intake', 'purchase_order', 'sales_order_intake', 'sales_order' ], db_type => 'order_types', not_null => 1 },
- reqdate => { type => 'date' },
- salesman_id => { type => 'integer' },
- shippingpoint => { type => 'text' },
- shipto_id => { type => 'integer' },
- shipvia => { type => 'text' },
- tax_point => { type => 'date' },
- taxincluded => { type => 'boolean' },
- taxzone_id => { type => 'integer', not_null => 1 },
- transaction_description => { type => 'text' },
- transdate => { type => 'date', default => 'now' },
- vendor_id => { type => 'integer' },
+ amount => { type => 'numeric', precision => 15, scale => 5 },
+ billing_address_id => { type => 'integer' },
+ closed => { type => 'boolean', default => 'false' },
+ cp_id => { type => 'integer' },
+ currency_id => { type => 'integer', not_null => 1 },
+ cusordnumber => { type => 'text' },
+ customer_id => { type => 'integer' },
+ delivered => { type => 'boolean', default => 'false' },
+ delivery_customer_id => { type => 'integer' },
+ delivery_term_id => { type => 'integer' },
+ delivery_vendor_id => { type => 'integer' },
+ department_id => { type => 'integer' },
+ employee_id => { type => 'integer' },
+ exchangerate => { type => 'numeric', precision => 15, scale => 5 },
+ expected_billing_date => { type => 'date' },
+ globalproject_id => { type => 'integer' },
+ id => { type => 'integer', not_null => 1, sequence => 'id' },
+ intnotes => { type => 'text' },
+ itime => { type => 'timestamp', default => 'now()' },
+ language_id => { type => 'integer' },
+ marge_percent => { type => 'numeric', precision => 15, scale => 5 },
+ marge_total => { type => 'numeric', precision => 15, scale => 5 },
+ mtime => { type => 'timestamp' },
+ netamount => { type => 'numeric', precision => 15, scale => 5 },
+ notes => { type => 'text' },
+ order_probability => { type => 'integer', default => '0', not_null => 1 },
+ order_status_id => { type => 'integer' },
+ ordnumber => { type => 'text', not_null => 1 },
+ payment_id => { type => 'integer' },
+ proforma => { type => 'boolean', default => 'false' },
+ quonumber => { type => 'text' },
+ record_type => { type => 'enum', check_in => [ 'request_quotation', 'sales_quotation', 'purchase_quotation_intake', 'purchase_order', 'sales_order_intake', 'sales_order', 'purchase_order_confirmation' ], db_type => 'order_types', not_null => 1 },
+ reqdate => { type => 'date' },
+ salesman_id => { type => 'integer' },
+ shippingpoint => { type => 'text' },
+ shipto_id => { type => 'integer' },
+ shipvia => { type => 'text' },
+ tax_point => { type => 'date' },
+ taxincluded => { type => 'boolean' },
+ taxzone_id => { type => 'integer', not_null => 1 },
+ transaction_description => { type => 'text' },
+ transdate => { type => 'date', default => 'now' },
+ vendor_confirmation_number => { type => 'text' },
+ vendor_id => { type => 'integer' },
);
__PACKAGE__->meta->primary_key_columns([ 'id' ]);
diff --git a/SL/DB/Order.pm b/SL/DB/Order.pm
index 68dbd0bee1..1d3a6ed212 100644
--- a/SL/DB/Order.pm
+++ b/SL/DB/Order.pm
@@ -479,33 +479,38 @@ sub new_from {
my $destination_type = delete $params{destination_type};
my @from_tos = (
- { from => SALES_QUOTATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'sqso' },
- { from => REQUEST_QUOTATION_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'rqpo' },
- { from => SALES_QUOTATION_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'sqsq' },
- { from => SALES_ORDER_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'soso' },
- { from => REQUEST_QUOTATION_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'rqrq' },
- { from => PURCHASE_ORDER_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'popo' },
- { from => SALES_ORDER_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'sopo' },
- { from => PURCHASE_ORDER_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'poso' },
- { from => SALES_ORDER_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'sosq' },
- { from => PURCHASE_ORDER_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'porq' },
- { from => REQUEST_QUOTATION_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'rqsq' },
- { from => REQUEST_QUOTATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'rqso' },
- { from => SALES_QUOTATION_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'sqrq' },
- { from => SALES_ORDER_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'sorq' },
- { from => SALES_RECLAMATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'srso' },
- { from => PURCHASE_RECLAMATION_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'prpo' },
- { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_ORDER_INTAKE_TYPE(), abbr => 'soisoi' },
- { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'soisq' },
- { from => SALES_ORDER_INTAKE_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'soirq' },
- { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'soiso' },
- { from => SALES_ORDER_INTAKE_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'soipo' },
- { from => SALES_QUOTATION_TYPE(), to => SALES_ORDER_INTAKE_TYPE(), abbr => 'sqsoi' },
- { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => PURCHASE_QUOTATION_INTAKE_TYPE(), abbr => 'pqipqi' },
- { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'pqisq' },
- { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'pqiso' },
- { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'pqipo' },
- { from => REQUEST_QUOTATION_TYPE(), to => PURCHASE_QUOTATION_INTAKE_TYPE(), abbr => 'rqpqi' },
+ { from => SALES_QUOTATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'sqso' },
+ { from => REQUEST_QUOTATION_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'rqpo' },
+ { from => SALES_QUOTATION_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'sqsq' },
+ { from => SALES_ORDER_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'soso' },
+ { from => REQUEST_QUOTATION_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'rqrq' },
+ { from => PURCHASE_ORDER_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'popo' },
+ { from => SALES_ORDER_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'sopo' },
+ { from => PURCHASE_ORDER_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'poso' },
+ { from => SALES_ORDER_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'sosq' },
+ { from => PURCHASE_ORDER_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'porq' },
+ { from => REQUEST_QUOTATION_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'rqsq' },
+ { from => REQUEST_QUOTATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'rqso' },
+ { from => SALES_QUOTATION_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'sqrq' },
+ { from => SALES_ORDER_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'sorq' },
+ { from => SALES_RECLAMATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'srso' },
+ { from => PURCHASE_RECLAMATION_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'prpo' },
+ { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_ORDER_INTAKE_TYPE(), abbr => 'soisoi' },
+ { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'soisq' },
+ { from => SALES_ORDER_INTAKE_TYPE(), to => REQUEST_QUOTATION_TYPE(), abbr => 'soirq' },
+ { from => SALES_ORDER_INTAKE_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'soiso' },
+ { from => SALES_ORDER_INTAKE_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'soipo' },
+ { from => SALES_QUOTATION_TYPE(), to => SALES_ORDER_INTAKE_TYPE(), abbr => 'sqsoi' },
+ { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => PURCHASE_QUOTATION_INTAKE_TYPE(), abbr => 'pqipqi' },
+ { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'pqisq' },
+ { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'pqiso' },
+ { from => PURCHASE_QUOTATION_INTAKE_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'pqipo' },
+ { from => REQUEST_QUOTATION_TYPE(), to => PURCHASE_QUOTATION_INTAKE_TYPE(), abbr => 'rqpqi' },
+ { from => PURCHASE_ORDER_CONFIRMATION_TYPE(), to => PURCHASE_ORDER_CONFIRMATION_TYPE(), abbr => 'pocpoc' },
+ { from => PURCHASE_ORDER_CONFIRMATION_TYPE(), to => SALES_QUOTATION_TYPE(), abbr => 'pocsq' },
+ { from => PURCHASE_ORDER_CONFIRMATION_TYPE(), to => SALES_ORDER_TYPE(), abbr => 'pocso' },
+ { from => PURCHASE_ORDER_CONFIRMATION_TYPE(), to => PURCHASE_ORDER_TYPE(), abbr => 'pocpo' },
+ { from => PURCHASE_ORDER_TYPE(), to => PURCHASE_ORDER_CONFIRMATION_TYPE(), abbr => 'popoc' },
);
my $from_to = (grep { $_->{from} eq $source->record_type && $_->{to} eq $destination_type} @from_tos)[0];
croak("Cannot convert from '" . $source->record_type . "' to '" . $destination_type . "'") if !$from_to;
@@ -561,6 +566,8 @@ sub new_from {
? undef
: $from_to->{to} =~ m/^purchase_quotation_intake$/
? $source->reqdate
+ : $from_to->{to} =~ m/^purchase_order_confirmation$/
+ ? $source->reqdate
: die "Wrong state for reqdate";
} elsif ( ref($source) eq 'SL::DB::Reclamation') {
%args = ( map({ ( $_ => $source->$_ ) } qw(
@@ -577,7 +584,7 @@ sub new_from {
);
}
- if ( $is_abbr_any->(qw(soipo sopo poso rqso soisq sosq porq rqsq sqrq soirq sorq pqisq pqiso)) ) {
+ if ( $is_abbr_any->(qw(soipo sopo poso rqso soisq sosq porq rqsq sqrq soirq sorq pqisq pqiso pocsq pocso)) ) {
$args{ordnumber} = undef;
$args{quonumber} = undef;
}
@@ -587,7 +594,7 @@ sub new_from {
$args{payment_id} = undef;
$args{delivery_term_id} = undef;
}
- if ( $is_abbr_any->(qw(poso rqsq pqisq pqiso)) ) {
+ if ( $is_abbr_any->(qw(poso rqsq pqisq pqiso pocsq pocso)) ) {
$args{vendor_id} = undef;
}
if ( $is_abbr_any->(qw(soso)) ) {
@@ -596,7 +603,7 @@ sub new_from {
if ( $is_abbr_any->(qw(sqrq soirq sorq)) ) {
$args{cusordnumber} = undef;
}
- if ( $is_abbr_any->(qw(soiso)) ) {
+ if ( $is_abbr_any->(qw(soiso pocpoc pocpo popoc)) ) {
$args{ordnumber} = undef;
}
if ( $is_abbr_any->(qw(rqpqi pqisq)) ) {
@@ -657,7 +664,7 @@ sub new_from {
$current_oe_item->sellprice($source_item->lastcost);
$current_oe_item->discount(0);
}
- if ( $is_abbr_any->(qw(poso rqsq rqso pqisq pqiso)) ) {
+ if ( $is_abbr_any->(qw(poso rqsq rqso pqisq pqiso pocsq pocso)) ) {
$current_oe_item->lastcost($source_item->sellprice);
}
unless ($params{no_linked_records}) {
@@ -674,7 +681,7 @@ sub new_from {
$order->items(\@items);
unless ($params{no_linked_records}) {
- $order->{ RECORD_ID() } = $source->{id};
+ $order->{ RECORD_ID() } = $source->{id};
$order->{ RECORD_TYPE_REF() } = ref($source);
}
@@ -829,6 +836,22 @@ sub netamount_base_currency {
}
}
+sub preceding_purchase_orders {
+ my ($self) = @_;
+
+ my @lrs = ();
+ if ($self->id) {
+ @lrs = grep { $_->record_type eq PURCHASE_ORDER_TYPE() } @{$self->linked_records(from => 'SL::DB::Order')};
+ } else {
+ if ('SL::DB::Order' eq $self->{RECORD_TYPE_REF()}) {
+ my $order = SL::DB::Order->load_cached($self->{RECORD_ID()});
+ push @lrs, $order if $order->record_type eq PURCHASE_ORDER_TYPE();
+ }
+ }
+
+ return \@lrs;
+}
+
sub type_data {
SL::DB::Helper::TypeDataProxy->new(ref $_[0], $_[0]->type);
}
diff --git a/SL/DB/Order/TypeData.pm b/SL/DB/Order/TypeData.pm
index e9654d630e..8501e63a06 100644
--- a/SL/DB/Order/TypeData.pm
+++ b/SL/DB/Order/TypeData.pm
@@ -6,16 +6,17 @@ use Exporter qw(import);
use SL::Locale::String qw(t8);
use constant {
- SALES_ORDER_TYPE => 'sales_order',
- PURCHASE_ORDER_TYPE => 'purchase_order',
- SALES_QUOTATION_TYPE => 'sales_quotation',
- REQUEST_QUOTATION_TYPE => 'request_quotation',
- PURCHASE_QUOTATION_INTAKE_TYPE => 'purchase_quotation_intake',
- SALES_ORDER_INTAKE_TYPE => 'sales_order_intake',
+ SALES_ORDER_TYPE => 'sales_order',
+ PURCHASE_ORDER_TYPE => 'purchase_order',
+ SALES_QUOTATION_TYPE => 'sales_quotation',
+ REQUEST_QUOTATION_TYPE => 'request_quotation',
+ PURCHASE_QUOTATION_INTAKE_TYPE => 'purchase_quotation_intake',
+ SALES_ORDER_INTAKE_TYPE => 'sales_order_intake',
+ PURCHASE_ORDER_CONFIRMATION_TYPE => 'purchase_order_confirmation',
};
my @export_types = qw(SALES_ORDER_TYPE PURCHASE_ORDER_TYPE REQUEST_QUOTATION_TYPE SALES_QUOTATION_TYPE
- PURCHASE_QUOTATION_INTAKE_TYPE SALES_ORDER_INTAKE_TYPE);
+ PURCHASE_QUOTATION_INTAKE_TYPE SALES_ORDER_INTAKE_TYPE PURCHASE_ORDER_CONFIRMATION_TYPE);
my @export_subs = qw(valid_types validate_type is_valid_type get get3);
our @EXPORT_OK = (@export_types, @export_subs);
@@ -38,6 +39,7 @@ my %type_data = (
save_and_sales_order_intake => 0,
save_and_sales_order => 0,
save_and_purchase_order => 1,
+ save_and_purchase_order_confirmation => 0,
save_and_sales_delivery_order => 1,
save_and_purchase_delivery_order => 0,
save_and_supplier_delivery_order => 0,
@@ -46,6 +48,8 @@ my %type_data = (
save_and_final_invoice => 1,
save_and_ap_transaction => 0,
save_and_invoice => 1,
+ save_and_print => 1,
+ save_and_email => 1,
delete => sub { $::instance_conf->get_sales_order_show_delete },
},
properties => {
@@ -90,6 +94,7 @@ my %type_data = (
save_and_sales_order_intake => 0,
save_and_sales_order => 1,
save_and_purchase_order => 0,
+ save_and_purchase_order_confirmation => 1,
save_and_sales_delivery_order => 0,
save_and_purchase_delivery_order => 1,
save_and_supplier_delivery_order => 1,
@@ -98,6 +103,8 @@ my %type_data = (
save_and_final_invoice => 0,
save_and_ap_transaction => 1,
save_and_invoice => 1,
+ save_and_print => 1,
+ save_and_email => 1,
delete => sub { $::instance_conf->get_purchase_order_show_delete },
},
properties => {
@@ -135,6 +142,7 @@ my %type_data = (
save_and_sales_order_intake => 1,
save_and_sales_order => 1,
save_and_purchase_order => 0,
+ save_and_purchase_order_confirmation => 0,
save_and_sales_delivery_order => 0,
save_and_purchase_delivery_order => 0,
save_and_supplier_delivery_order => 0,
@@ -143,6 +151,8 @@ my %type_data = (
save_and_final_invoice => 0,
save_and_ap_transaction => 0,
save_and_invoice => 1,
+ save_and_print => 1,
+ save_and_email => 1,
delete => 1,
},
properties => {
@@ -187,6 +197,7 @@ my %type_data = (
save_and_sales_order_intake => 0,
save_and_sales_order => 1,
save_and_purchase_order => 1,
+ save_and_purchase_order_confirmation => 0,
save_and_sales_delivery_order => 0,
save_and_purchase_delivery_order => 0,
save_and_supplier_delivery_order => 0,
@@ -195,6 +206,8 @@ my %type_data = (
save_and_final_invoice => 0,
save_and_ap_transaction => 0,
save_and_invoice => 1,
+ save_and_print => 1,
+ save_and_email => 1,
delete => 1,
},
properties => {
@@ -232,6 +245,7 @@ my %type_data = (
save_and_sales_order_intake => 0,
save_and_sales_order => 1,
save_and_purchase_order => 1,
+ save_and_purchase_order_confirmation => 0,
save_and_sales_delivery_order => 0,
save_and_purchase_delivery_order => 0,
save_and_supplier_delivery_order => 0,
@@ -240,6 +254,8 @@ my %type_data = (
save_and_final_invoice => 0,
save_and_ap_transaction => 0,
save_and_invoice => 0,
+ save_and_print => 1,
+ save_and_email => 1,
delete => 1,
},
properties => {
@@ -277,6 +293,7 @@ my %type_data = (
save_and_sales_order_intake => 0,
save_and_sales_order => 1,
save_and_purchase_order => 1,
+ save_and_purchase_order_confirmation => 0,
save_and_sales_delivery_order => 0,
save_and_purchase_delivery_order => 0,
save_and_supplier_delivery_order => 0,
@@ -285,6 +302,8 @@ my %type_data = (
save_and_final_invoice => 0,
save_and_ap_transaction => 0,
save_and_invoice => 0,
+ save_and_print => 1,
+ save_and_email => 1,
delete => sub { $::instance_conf->get_sales_order_show_delete },
},
properties => {
@@ -313,6 +332,54 @@ my %type_data = (
subversions => sub { $::instance_conf->get_lock_oe_subversions },
},
},
+ PURCHASE_ORDER_CONFIRMATION_TYPE() => {
+ text => {
+ delete => t8('The order confirmation has been deleted'),
+ saved => t8('The order confirmation has been saved'),
+ add => t8("Add Purchase Order Confirmation"),
+ edit => t8("Edit Purchase Order Confirmation"),
+ list => t8("Purchase Order Confirmations"),
+ attachment => t8("purchase_order_confirmation_list"),
+ },
+ show_menu => {
+ save_and_quotation => 1,
+ save_and_rfq => 0,
+ save_and_purchase_quotation_intake => 0,
+ save_and_sales_order_intake => 0,
+ save_and_sales_order => 1,
+ save_and_purchase_order => 1,
+ save_and_purchase_order_confirmation => 0,
+ save_and_sales_delivery_order => 0,
+ save_and_purchase_delivery_order => 1,
+ save_and_supplier_delivery_order => 1,
+ save_and_reclamation => 1,
+ save_and_invoice_for_advance_payment => 0,
+ save_and_final_invoice => 0,
+ save_and_ap_transaction => 1,
+ save_and_invoice => 1,
+ save_and_print => 0,
+ save_and_email => 0,
+ delete => sub { $::instance_conf->get_purchase_order_show_delete },
+ },
+ properties => {
+ customervendor => "vendor",
+ is_customer => 0,
+ nr_key => "ordnumber",
+ },
+ defaults => {
+ reqdate => sub { return; },
+ },
+ part_classification_query => [ "used_for_purchase" => 1 ],
+ rights => {
+ edit => "purchase_order_edit",
+ view => "purchase_order_edit | sales_order_view",
+ },
+ features => {
+ price_tax => 1,
+ stock => 0,
+ subversions => sub { $::instance_conf->get_lock_oe_subversions },
+ },
+ },
);
my @valid_types = (
@@ -322,6 +389,7 @@ my @valid_types = (
REQUEST_QUOTATION_TYPE,
PURCHASE_QUOTATION_INTAKE_TYPE,
SALES_ORDER_INTAKE_TYPE,
+ PURCHASE_ORDER_CONFIRMATION_TYPE,
);
my %valid_types = map { $_ => $_ } @valid_types;
diff --git a/SL/DO.pm b/SL/DO.pm
index 6bdacf28df..97cd8c6e9e 100644
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -68,13 +68,16 @@ sub transactions {
# connect to database
my $dbh = $form->get_standard_dbh($myconfig);
- my (@where, @values, $where);
+ my (@where, @values);
my $vc = $form->{vc} eq "customer" ? "customer" : "vendor";
+ $form->{l_order_confirmation_number} = 'Y' if $form->{order_confirmation_number};
+
my $query =
qq|SELECT dord.id, dord.donumber, dord.ordnumber, dord.cusordnumber,
dord.transdate, dord.reqdate,
+ dord.vendor_confirmation_number,
ct.${vc}number, ct.name, ct.business_id,
dord.${vc}_id, dord.globalproject_id,
dord.closed, dord.delivered, dord.shippingpoint, dord.shipvia,
@@ -141,12 +144,25 @@ sub transactions {
push @values, $::myconfig{login};
}
- foreach my $item (qw(donumber ordnumber cusordnumber transaction_description)) {
+ foreach my $item (qw(donumber ordnumber cusordnumber transaction_description vendor_confirmation_number)) {
next unless ($form->{$item});
push @where, qq|dord.$item ILIKE ?|;
push @values, like($form->{$item});
}
+ if ($form->{order_confirmation_number}) {
+ push @where, qq|(EXISTS (SELECT id FROM oe
+ WHERE ordnumber ILIKE ?
+ AND record_type = 'purchase_order_confirmation'
+ AND id IN
+ (SELECT from_id FROM record_links
+ WHERE to_id = dord.id
+ AND to_table = 'delivery_orders'
+ AND from_table = 'oe')
+ ))|;
+ push @values, like($form->{order_confirmation_number});
+ }
+
if (($form->{open} || $form->{closed}) &&
($form->{open} ne $form->{closed})) {
push @where, ($form->{open} ? "NOT " : "") . "COALESCE(dord.closed, FALSE)";
@@ -203,7 +219,9 @@ sub transactions {
dord.ordnumber
dord.cusordnumber
dord.oreqnumber
- );
+ dord.vendor_confirmation_number
+ oe.ordnumber
+ );
my $tmp_where = '';
$tmp_where .= join ' OR ', map {"$_ ILIKE ?"} @fulltext_fields;
push(@values, like($form->{fulltext})) for 1 .. (scalar @fulltext_fields);
@@ -289,6 +307,7 @@ SQL
"transaction_description" => "dord.transaction_description",
"department" => "lower(dep.description)",
"insertdate" => "dord.itime",
+ "vendor_confirmation_number" => "dord.vendor_confirmation_number",
);
my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
@@ -323,6 +342,20 @@ SQL
$items_sth = prepare_query($form, $dbh, $items_query);
}
+ my ($order_confirmation_query, $order_confirmation_sth);
+ if ($form->{l_order_confirmation_number}) {
+ $order_confirmation_query =
+ qq|SELECT id, ordnumber FROM oe
+ WHERE id IN
+ (SELECT from_id FROM record_links
+ WHERE from_table = 'oe'
+ AND to_table = 'delivery_orders'
+ AND to_id = ?)
+ AND record_type = 'purchase_order_confirmation' ORDER BY ordnumber|;
+
+ $order_confirmation_sth = prepare_query($form, $dbh, $order_confirmation_query);
+ }
+
foreach my $dord (@{ $form->{DO} }) {
if ($form->{l_items}) {
do_statement($form, $items_sth, $items_query, $dord->{id});
@@ -330,13 +363,20 @@ SQL
$dord->{item_ids} = undef if !@{$dord->{item_ids}};
}
+ if ($form->{l_order_confirmation_number}) {
+ do_statement($form, $order_confirmation_sth, $order_confirmation_query, $dord->{id});
+ my @r = @{$order_confirmation_sth->fetchall_arrayref()};
+ push @{$dord->{order_confirmation_numbers}}, { id => $_->[0], number => $_->[1] } for @r;
+ }
+
next unless ($dord->{ordnumber});
do_statement($form, $sth, $query, $dord->{ordnumber});
($dord->{oe_id}) = $sth->fetchrow_array();
}
$sth->finish();
- $items_sth->finish() if $form->{l_items};
+ $items_sth->finish() if $form->{l_items};
+ $order_confirmation_sth->finish() if $form->{l_order_confirmation_number};
}
$main::lxdebug->leave_sub();
diff --git a/SL/File/Backend/Webdav.pm b/SL/File/Backend/Webdav.pm
index b049a1468a..28ab679ad0 100644
--- a/SL/File/Backend/Webdav.pm
+++ b/SL/File/Backend/Webdav.pm
@@ -120,6 +120,7 @@ my %type_to_path = (
request_quotation => 'anfragen',
purchase_quotation_intake => 'angebotseingaenge',
purchase_order => 'lieferantenbestellungen',
+ purchase_order_confirmation => 'lieferantenauftragsbestaetigungen',
sales_delivery_order => 'verkaufslieferscheine',
purchase_delivery_order => 'einkaufslieferscheine',
purchase_reclamation => 'einkaufsreklamation',
diff --git a/SL/Form.pm b/SL/Form.pm
index 62084b1bf6..e9461aa9a3 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -1102,6 +1102,7 @@ sub get_formname_translation {
pick_list => $main::locale->text('Pick List'),
proforma => $main::locale->text('Proforma Invoice'),
purchase_order => $main::locale->text('Purchase Order'),
+ purchase_order_confirmation => $main::locale->text('Purchase Order Confirmation'),
request_quotation => $main::locale->text('RFQ'),
purchase_quotation_intake => $main::locale->text('Purchase Quotation Intake'),
sales_order_intake => $main::locale->text('Sales Order Intake'),
@@ -2926,6 +2927,7 @@ sub save_status {
# $main::locale->text('sales_order')
# $main::locale->text('pick_list')
# $main::locale->text('purchase_order')
+# $main::locale->text('purchase_order_confirmation')
# $main::locale->text('bin_list')
# $main::locale->text('sales_quotation')
# $main::locale->text('request_quotation')
diff --git a/SL/Helper/PrintOptions.pm b/SL/Helper/PrintOptions.pm
index 67233913a0..d519d6e8ae 100644
--- a/SL/Helper/PrintOptions.pm
+++ b/SL/Helper/PrintOptions.pm
@@ -50,6 +50,9 @@ sub get_print_options {
opthash("purchase_order", $form->{PD}{purchase_order}, $locale->text('Purchase Order')),
opthash("bin_list", $form->{PD}{bin_list}, $locale->text('Bin List'))
) : undef,
+ ($form->{type} eq 'purchase_order_confirmation') ? (
+ opthash("purchase_order_confirmation", $form->{PD}{purchase_order}, $locale->text('Purchase Order Confirmation')),
+ ) : undef,
($form->{type} eq 'credit_note') ?
opthash("credit_note", $form->{PD}{credit_note}, $locale->text('Credit Note')) : undef,
($form->{type} eq 'sales_order_intake') ? (
diff --git a/SL/OE.pm b/SL/OE.pm
index 69c45cc525..bf3125e925 100644
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -136,6 +136,7 @@ SQL
qq| o.exchangerate, | .
qq| o.itime::DATE AS insertdate, | .
qq| o.intnotes,| .
+ qq| o.vendor_confirmation_number,| .
qq| department.description as department, | .
qq| ex.$rate AS daily_exchangerate, | .
qq| pt.description AS payment_terms, | .
@@ -250,6 +251,11 @@ SQL
push(@values, like($form->{cusordnumber}));
}
+ if ($form->{vendor_confirmation_number}) {
+ $query .= qq| AND o.vendor_confirmation_number ILIKE ?|;
+ push(@values, like($form->{vendor_confirmation_number}));
+ }
+
if($form->{transdatefrom}) {
$query .= qq| AND o.transdate >= ?|;
push(@values, conv_date($form->{transdatefrom}));
@@ -344,7 +350,8 @@ SQL
o.transaction_description
o.quonumber
o.ordnumber
- o.cusordnumber);
+ o.cusordnumber
+ o.vendor_confirmation_number);
$query .= ' AND (';
$query .= join ' ILIKE ? OR ', @fulltext_fields;
$query .= ' ILIKE ?';
@@ -476,6 +483,7 @@ SQL
"department" => "department.description",
"intnotes" => "o.intnotes",
"order_status" => "order_statuses.name",
+ "vendor_confirmation_number" => "o.vendor_confirmation_number",
);
if ($form->{sort} && grep($form->{sort}, keys(%allowed_sort_columns))) {
$sortorder = $allowed_sort_columns{$form->{sort}} . " ${sortdir}" . ", o.itime ${sortdir}";
diff --git a/SL/Presenter/Order.pm b/SL/Presenter/Order.pm
index f7d90c8e83..a7ba3675d9 100644
--- a/SL/Presenter/Order.pm
+++ b/SL/Presenter/Order.pm
@@ -6,7 +6,7 @@ use SL::Presenter::EscapedText qw(escape is_escaped);
use SL::Presenter::Tag qw(link_tag);
use Exporter qw(import);
-our @EXPORT_OK = qw(sales_quotation sales_order request_quotation purchase_order);
+our @EXPORT_OK = qw(sales_quotation sales_order request_quotation purchase_order purchase_order_confirmation);
use Carp;
@@ -46,6 +46,12 @@ sub purchase_order {
return _oe_record($order, 'purchase_order', %params);
}
+sub purchase_order_confirmation {
+ my ($order, %params) = @_;
+
+ return _oe_record($order, 'purchase_order_confirmation', %params);
+}
+
sub _oe_record {
my ($order, $type, %params) = @_;
@@ -80,7 +86,8 @@ __END__
SL::Presenter::Order - Presenter module for Rose::DB objects for sales
quotations, sales order_intakes, sales orders,
-requests for quotations, purchase_quotation_intakes and purchase orders
+requests for quotations, purchase_quotation_intakes,
+purchase orders and purchase order confirmations
=head1 SYNOPSIS
diff --git a/SL/Presenter/Record.pm b/SL/Presenter/Record.pm
index 7f672adb9f..53742827ef 100644
--- a/SL/Presenter/Record.pm
+++ b/SL/Presenter/Record.pm
@@ -43,39 +43,40 @@ sub grouped_record_list {
my %groups = _sort_grouped_lists(_group_records($list));
my $output = '';
- $output .= _requirement_spec_list( $groups{requirement_specs}, %params) if $groups{requirement_specs};
- $output .= _shop_order_list( $groups{shop_orders}, %params) if $groups{shop_orders};
- $output .= _sales_quotation_list( $groups{sales_quotations}, %params) if $groups{sales_quotations};
- $output .= _sales_order_intake_list( $groups{sales_order_intakes}, %params) if $groups{sales_order_intakes};
- $output .= _sales_order_list( $groups{sales_orders}, %params) if $groups{sales_orders};
- $output .= _sales_delivery_order_list( $groups{sales_delivery_orders}, %params) if $groups{sales_delivery_orders};
- $output .= _rma_delivery_order_list( $groups{rma_delivery_orders}, %params) if $groups{rma_delivery_orders};
- $output .= _sales_reclamation_list( $groups{sales_reclamation}, %params) if $groups{sales_reclamation};
- $output .= _sales_invoice_list( $groups{sales_invoices}, %params) if $groups{sales_invoices};
- $output .= _ar_transaction_list( $groups{ar_transactions}, %params) if $groups{ar_transactions};
+ $output .= _requirement_spec_list( $groups{requirement_specs}, %params) if $groups{requirement_specs};
+ $output .= _shop_order_list( $groups{shop_orders}, %params) if $groups{shop_orders};
+ $output .= _sales_quotation_list( $groups{sales_quotations}, %params) if $groups{sales_quotations};
+ $output .= _sales_order_intake_list( $groups{sales_order_intakes}, %params) if $groups{sales_order_intakes};
+ $output .= _sales_order_list( $groups{sales_orders}, %params) if $groups{sales_orders};
+ $output .= _sales_delivery_order_list( $groups{sales_delivery_orders}, %params) if $groups{sales_delivery_orders};
+ $output .= _rma_delivery_order_list( $groups{rma_delivery_orders}, %params) if $groups{rma_delivery_orders};
+ $output .= _sales_reclamation_list( $groups{sales_reclamation}, %params) if $groups{sales_reclamation};
+ $output .= _sales_invoice_list( $groups{sales_invoices}, %params) if $groups{sales_invoices};
+ $output .= _ar_transaction_list( $groups{ar_transactions}, %params) if $groups{ar_transactions};
- $output .= _request_quotation_list( $groups{purchase_quotations}, %params) if $groups{purchase_quotations};
- $output .= _purchase_quotation_intake_list( $groups{purchase_quotation_intakes}, %params) if $groups{purchase_quotation_intakes};
- $output .= _purchase_order_list( $groups{purchase_orders}, %params) if $groups{purchase_orders};
- $output .= _purchase_delivery_order_list( $groups{purchase_delivery_orders}, %params) if $groups{purchase_delivery_orders};
- $output .= _supplier_delivery_order_list( $groups{supplier_delivery_orders}, %params) if $groups{supplier_delivery_orders};
- $output .= _purchase_reclamation_list( $groups{purchase_reclamation}, %params) if $groups{purchase_reclamation};
- $output .= _purchase_invoice_list( $groups{purchase_invoices}, %params) if $groups{purchase_invoices};
- $output .= _ap_transaction_list( $groups{ap_transactions}, %params) if $groups{ap_transactions};
+ $output .= _request_quotation_list( $groups{purchase_quotations}, %params) if $groups{purchase_quotations};
+ $output .= _purchase_quotation_intake_list( $groups{purchase_quotation_intakes}, %params) if $groups{purchase_quotation_intakes};
+ $output .= _purchase_order_list( $groups{purchase_orders}, %params) if $groups{purchase_orders};
+ $output .= _purchase_order_confirmation_list($groups{purchase_order_confirmations}, %params) if $groups{purchase_order_confirmations};
+ $output .= _purchase_delivery_order_list( $groups{purchase_delivery_orders}, %params) if $groups{purchase_delivery_orders};
+ $output .= _supplier_delivery_order_list( $groups{supplier_delivery_orders}, %params) if $groups{supplier_delivery_orders};
+ $output .= _purchase_reclamation_list( $groups{purchase_reclamation}, %params) if $groups{purchase_reclamation};
+ $output .= _purchase_invoice_list( $groups{purchase_invoices}, %params) if $groups{purchase_invoices};
+ $output .= _ap_transaction_list( $groups{ap_transactions}, %params) if $groups{ap_transactions};
- $output .= _gl_transaction_list( $groups{gl_transactions}, %params) if $groups{gl_transactions};
+ $output .= _gl_transaction_list( $groups{gl_transactions}, %params) if $groups{gl_transactions};
- $output .= _bank_transactions( $groups{bank_transactions}, %params) if $groups{bank_transactions};
+ $output .= _bank_transactions( $groups{bank_transactions}, %params) if $groups{bank_transactions};
- $output .= _sepa_collection_list( $groups{sepa_collections}, %params) if $groups{sepa_collections};
- $output .= _sepa_transfer_list( $groups{sepa_transfers}, %params) if $groups{sepa_transfers};
+ $output .= _sepa_collection_list( $groups{sepa_collections}, %params) if $groups{sepa_collections};
+ $output .= _sepa_transfer_list( $groups{sepa_transfers}, %params) if $groups{sepa_transfers};
- $output .= _letter_list( $groups{letters}, %params) if $groups{letters};
- $output .= _email_journal_list( $groups{email_journals}, %params) if $groups{email_journals};
+ $output .= _letter_list( $groups{letters}, %params) if $groups{letters};
+ $output .= _email_journal_list( $groups{email_journals}, %params) if $groups{email_journals};
- $output .= _dunning_list( $groups{dunnings}, %params) if $groups{dunnings};
+ $output .= _dunning_list( $groups{dunnings}, %params) if $groups{dunnings};
- $output = SL::Presenter->get->render('presenter/record/grouped_record_list', %params, output => $output);
+ $output = SL::Presenter->get->render('presenter/record/grouped_record_list', %params, output => $output);
return $output;
}
@@ -187,31 +188,32 @@ sub list { goto &record_list }
sub _group_records {
my ($list) = @_;
my %matchers = (
- requirement_specs => sub { (ref($_[0]) eq 'SL::DB::RequirementSpec') },
- shop_orders => sub { (ref($_[0]) eq 'SL::DB::ShopOrder') && $_[0]->id },
- sales_quotations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_quotation') },
- sales_order_intakes => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_order_intake') },
- sales_orders => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_order') },
- sales_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('sales_delivery_order') },
- rma_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('rma_delivery_order') },
- sales_reclamation => sub { (ref($_[0]) eq 'SL::DB::Reclamation') && $_[0]->is_type('sales_reclamation') },
- sales_invoices => sub { (ref($_[0]) eq 'SL::DB::Invoice') && $_[0]->invoice },
- ar_transactions => sub { (ref($_[0]) eq 'SL::DB::Invoice') && !$_[0]->invoice },
- purchase_quotations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('request_quotation') },
- purchase_quotation_intakes => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('purchase_quotation_intake') },
- purchase_orders => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('purchase_order') },
- purchase_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('purchase_delivery_order') },
- supplier_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('supplier_delivery_order') },
- purchase_reclamation => sub { (ref($_[0]) eq 'SL::DB::Reclamation') && $_[0]->is_type('purchase_reclamation')},
- purchase_invoices => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && $_[0]->invoice },
- ap_transactions => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && !$_[0]->invoice },
- sepa_collections => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ar_id },
- sepa_transfers => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ap_id },
- gl_transactions => sub { (ref($_[0]) eq 'SL::DB::GLTransaction') },
- bank_transactions => sub { (ref($_[0]) eq 'SL::DB::BankTransaction') && $_[0]->id },
- letters => sub { (ref($_[0]) eq 'SL::DB::Letter') && $_[0]->id },
- email_journals => sub { (ref($_[0]) eq 'SL::DB::EmailJournal') && $_[0]->id },
- dunnings => sub { (ref($_[0]) eq 'SL::DB::Dunning') },
+ requirement_specs => sub { (ref($_[0]) eq 'SL::DB::RequirementSpec') },
+ shop_orders => sub { (ref($_[0]) eq 'SL::DB::ShopOrder') && $_[0]->id },
+ sales_quotations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_quotation') },
+ sales_order_intakes => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_order_intake') },
+ sales_orders => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_order') },
+ sales_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('sales_delivery_order') },
+ rma_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('rma_delivery_order') },
+ sales_reclamation => sub { (ref($_[0]) eq 'SL::DB::Reclamation') && $_[0]->is_type('sales_reclamation') },
+ sales_invoices => sub { (ref($_[0]) eq 'SL::DB::Invoice') && $_[0]->invoice },
+ ar_transactions => sub { (ref($_[0]) eq 'SL::DB::Invoice') && !$_[0]->invoice },
+ purchase_quotations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('request_quotation') },
+ purchase_quotation_intakes => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('purchase_quotation_intake') },
+ purchase_orders => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('purchase_order') },
+ purchase_order_confirmations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('purchase_order_confirmation') },
+ purchase_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('purchase_delivery_order') },
+ supplier_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_type('supplier_delivery_order') },
+ purchase_reclamation => sub { (ref($_[0]) eq 'SL::DB::Reclamation') && $_[0]->is_type('purchase_reclamation') },
+ purchase_invoices => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && $_[0]->invoice },
+ ap_transactions => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && !$_[0]->invoice },
+ sepa_collections => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ar_id },
+ sepa_transfers => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ap_id },
+ gl_transactions => sub { (ref($_[0]) eq 'SL::DB::GLTransaction') },
+ bank_transactions => sub { (ref($_[0]) eq 'SL::DB::BankTransaction') && $_[0]->id },
+ letters => sub { (ref($_[0]) eq 'SL::DB::Letter') && $_[0]->id },
+ email_journals => sub { (ref($_[0]) eq 'SL::DB::EmailJournal') && $_[0]->id },
+ dunnings => sub { (ref($_[0]) eq 'SL::DB::Dunning') },
);
my %groups;
@@ -249,10 +251,10 @@ sub _requirement_spec_list {
type => 'requirement_spec',
columns => [
[ $::locale->text('Requirement spec number'), sub { $_[0]->presenter->requirement_spec(display => 'table-cell') } ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Title'), 'title' ],
- [ $::locale->text('Project'), 'project', ],
- [ $::locale->text('Status'), sub { $_[0]->status->description } ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Title'), 'title' ],
+ [ $::locale->text('Project'), 'project', ],
+ [ $::locale->text('Status'), sub { $_[0]->status->description } ],
],
%params,
);
@@ -266,10 +268,10 @@ sub _shop_order_list {
title => $::locale->text('Shop Orders'),
type => 'shop_order',
columns => [
- [ $::locale->text('Shop Order Date'), sub { $_[0]->order_date->to_kivitendo } ],
- [ $::locale->text('Shop Order Number'), sub { $_[0]->presenter->shop_order(display => 'table-cell') } ],
- [ $::locale->text('Transfer Date'), 'transfer_date' ],
- [ $::locale->text('Amount'), 'amount' ],
+ [ $::locale->text('Shop Order Date'), sub { $_[0]->order_date->to_kivitendo } ],
+ [ $::locale->text('Shop Order Number'), sub { $_[0]->presenter->shop_order(display => 'table-cell') } ],
+ [ $::locale->text('Transfer Date'), 'transfer_date' ],
+ [ $::locale->text('Amount'), 'amount' ],
],
%params,
);
@@ -283,13 +285,13 @@ sub _sales_quotation_list {
title => $::locale->text('Sales Quotations'),
type => 'sales_quotation',
columns => [
- [ $::locale->text('Quotation Date'), 'transdate' ],
- [ $::locale->text('Quotation Number'), sub { $_[0]->presenter->sales_quotation(display => 'table-cell') } ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Quotation Date'), 'transdate' ],
+ [ $::locale->text('Quotation Number'), sub { $_[0]->presenter->sales_quotation(display => 'table-cell') } ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -303,13 +305,13 @@ sub _request_quotation_list {
title => $::locale->text('Request Quotations'),
type => 'request_quotation',
columns => [
- [ $::locale->text('Quotation Date'), 'transdate' ],
- [ $::locale->text('Quotation Number'), sub { $_[0]->presenter->request_quotation(display => 'table-cell') } ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Quotation Date'), 'transdate' ],
+ [ $::locale->text('Quotation Number'), sub { $_[0]->presenter->request_quotation(display => 'table-cell') } ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -323,13 +325,13 @@ sub _purchase_quotation_intake_list {
title => $::locale->text('Purchase Quotation Intakes'),
type => 'purchase_quotation_intake',
columns => [
- [ $::locale->text('Quotation Date'), 'transdate' ],
+ [ $::locale->text('Quotation Date'), 'transdate' ],
[ $::locale->text('Quotation Number'), sub { $_[0]->presenter->purchase_quotation_intake(display => 'table-cell') } ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -343,14 +345,14 @@ sub _sales_order_intake_list {
title => $::locale->text('Sales Order Intakes'),
type => 'sales_order_intake',
columns => [
- [ $::locale->text('Order Date'), 'transdate' ],
- [ $::locale->text('Order Number'), sub { $_[0]->presenter->sales_order_intake(display => 'table-cell') } ],
- [ $::locale->text('Quotation'), 'quonumber' ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Order Date'), 'transdate' ],
+ [ $::locale->text('Order Number'), sub { $_[0]->presenter->sales_order_intake(display => 'table-cell') } ],
+ [ $::locale->text('Quotation'), 'quonumber' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -364,14 +366,14 @@ sub _sales_order_list {
title => $::locale->text('Sales Orders'),
type => 'sales_order',
columns => [
- [ $::locale->text('Order Date'), 'transdate' ],
- [ $::locale->text('Order Number'), sub { $_[0]->presenter->sales_order(display => 'table-cell') } ],
- [ $::locale->text('Quotation'), 'quonumber' ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Order Date'), 'transdate' ],
+ [ $::locale->text('Order Number'), sub { $_[0]->presenter->sales_order(display => 'table-cell') } ],
+ [ $::locale->text('Quotation'), 'quonumber' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -385,14 +387,34 @@ sub _purchase_order_list {
title => $::locale->text('Purchase Orders'),
type => 'purchase_order',
columns => [
- [ $::locale->text('Order Date'), 'transdate' ],
- [ $::locale->text('Order Number'), sub { $_[0]->presenter->purchase_order(display => 'table-cell') } ],
- [ $::locale->text('Request for Quotation'), 'quonumber' ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Order Date'), 'transdate' ],
+ [ $::locale->text('Order Number'), sub { $_[0]->presenter->purchase_order(display => 'table-cell') } ],
+ [ $::locale->text('Request for Quotation'), 'quonumber' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
+ ],
+ %params,
+ );
+}
+
+sub _purchase_order_confirmation_list {
+ my ($list, %params) = @_;
+
+ return record_list(
+ $list,
+ title => $::locale->text('Purchase Order Confirmations'),
+ type => 'purchase_order_confirmation',
+ columns => [
+ [ $::locale->text('Confirmation Date'), 'transdate' ],
+ [ $::locale->text('Confirmation Number'), sub { $_[0]->presenter->purchase_order_confirmation(display => 'table-cell') } ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -406,14 +428,14 @@ sub _sales_delivery_order_list {
title => $::locale->text('Sales Delivery Orders'),
type => 'sales_delivery_order',
columns => [
- [ $::locale->text('Delivery Order Date'), 'transdate' ],
- [ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->sales_delivery_order(display => 'table-cell') } ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Delivered'), 'delivered' ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Delivery Order Date'), 'transdate' ],
+ [ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->sales_delivery_order(display => 'table-cell') } ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Delivered'), 'delivered' ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -427,14 +449,14 @@ sub _rma_delivery_order_list {
title => $::locale->text('RMA Delivery Orders'),
type => 'rma_delivery_order',
columns => [
- [ $::locale->text('Delivery Order Date'), 'transdate' ],
- [ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->rma_delivery_order(display => 'table-cell') } ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Delivered'), 'delivered' ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Delivery Order Date'), 'transdate' ],
+ [ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->rma_delivery_order(display => 'table-cell') } ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Delivered'), 'delivered' ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -450,10 +472,10 @@ sub _purchase_delivery_order_list {
columns => [
[ $::locale->text('Delivery Order Date'), 'transdate' ],
[ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->purchase_delivery_order(display => 'table-cell') } ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
[ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Project'), 'globalproject', ],
[ $::locale->text('Delivered'), 'delivered' ],
[ $::locale->text('Closed'), 'closed' ],
],
@@ -471,10 +493,10 @@ sub _supplier_delivery_order_list {
columns => [
[ $::locale->text('Delivery Order Date'), 'transdate' ],
[ $::locale->text('Delivery Order Number'), sub { $_[0]->presenter->supplier_delivery_order(display => 'table-cell') } ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
[ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Project'), 'globalproject', ],
[ $::locale->text('Delivered'), 'delivered' ],
[ $::locale->text('Closed'), 'closed' ],
],
@@ -510,13 +532,13 @@ sub _purchase_reclamation_list {
title => $::locale->text('Purchase Reclamation'),
type => 'purchase_reclamation',
columns => [
- [ $::locale->text('Reclamation Date'), 'transdate' ],
+ [ $::locale->text('Reclamation Date'), 'transdate' ],
[ $::locale->text('Reclamation Number'), sub { $_[0]->presenter->purchase_reclamation(display => 'table-cell') } ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
- [ $::locale->text('Project'), 'globalproject', ],
- [ $::locale->text('Delivered'), 'delivered' ],
- [ $::locale->text('Closed'), 'closed' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Project'), 'globalproject', ],
+ [ $::locale->text('Delivered'), 'delivered' ],
+ [ $::locale->text('Closed'), 'closed' ],
],
%params,
);
@@ -530,15 +552,15 @@ sub _sales_invoice_list {
title => $::locale->text('Sales Invoices'),
type => 'sales_invoice',
columns => [
- [ $::locale->text('Invoice Date'), 'transdate' ],
- [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
+ [ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
[ $::locale->text('Invoice Number'), sub { $_[0]->presenter->sales_invoice(display => 'table-cell') } ],
- [ $::locale->text('Quotation Number'), 'quonumber' ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Paid'), 'paid' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Quotation Number'), 'quonumber' ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Paid'), 'paid' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
],
%params,
);
@@ -552,14 +574,14 @@ sub _purchase_invoice_list {
title => $::locale->text('Purchase Invoices'),
type => 'purchase_invoice',
columns => [
- [ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Invoice Date'), 'transdate' ],
[ $::locale->text('Invoice Number'), sub { $_[0]->presenter->purchase_invoice(display => 'table-cell') } ],
- [ $::locale->text('Request for Quotation Number'), 'quonumber' ],
- [ $::locale->text('Order Number'), 'ordnumber' ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Paid'), 'paid' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Request for Quotation Number'), 'quonumber' ],
+ [ $::locale->text('Order Number'), 'ordnumber' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Paid'), 'paid' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
],
%params,
);
@@ -573,13 +595,13 @@ sub _ar_transaction_list {
title => $::locale->text('AR Transactions'),
type => 'ar_transaction',
columns => [
- [ $::locale->text('Invoice Date'), 'transdate' ],
- [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
+ [ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
[ $::locale->text('Invoice Number'), sub { $_[0]->presenter->ar_transaction(display => 'table-cell') } ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Paid'), 'paid' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Paid'), 'paid' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
],
%params,
);
@@ -593,12 +615,12 @@ sub _ap_transaction_list {
title => $::locale->text('AP Transactions'),
type => 'ap_transaction',
columns => [
- [ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Invoice Date'), 'transdate' ],
[ $::locale->text('Invoice Number'), sub { $_[0]->presenter->ap_transaction(display => 'table-cell') } ],
- [ $::locale->text('Vendor'), 'vendor' ],
- [ $::locale->text('Net amount'), 'netamount' ],
- [ $::locale->text('Paid'), 'paid' ],
- [ $::locale->text('Transaction description'), 'transaction_description' ],
+ [ $::locale->text('Vendor'), 'vendor' ],
+ [ $::locale->text('Net amount'), 'netamount' ],
+ [ $::locale->text('Paid'), 'paid' ],
+ [ $::locale->text('Transaction description'), 'transaction_description' ],
],
%params,
);
@@ -612,8 +634,8 @@ sub _gl_transaction_list {
title => $::locale->text('GL Transactions'),
type => 'gl_transaction',
columns => [
- [ $::locale->text('Transdate'), 'transdate' ],
- [ $::locale->text('Reference'), 'reference' ],
+ [ $::locale->text('Transdate'), 'transdate' ],
+ [ $::locale->text('Reference'), 'reference' ],
[ $::locale->text('Description'), sub { $_[0]->presenter->gl_transaction(display => 'table-cell') } ],
],
%params,
@@ -628,16 +650,16 @@ sub _bank_transactions {
title => $::locale->text('Bank transactions'),
type => 'bank_transactions',
columns => [
- [ $::locale->text('Transdate'), 'transdate' ],
- [ $::locale->text('Local Bank Code'), sub { $_[0]->local_bank_account->presenter->bank_code } ],
+ [ $::locale->text('Transdate'), 'transdate' ],
+ [ $::locale->text('Local Bank Code'), sub { $_[0]->local_bank_account->presenter->bank_code } ],
[ $::locale->text('Local account number'), sub { $_[0]->local_bank_account->presenter->account_number } ],
- [ $::locale->text('Remote Bank Code'), 'remote_bank_code' ],
- [ $::locale->text('Remote account number'),'remote_account_number' ],
- [ $::locale->text('Valutadate'), 'valutadate' ],
- [ $::locale->text('Amount'), 'amount' ],
- [ $::locale->text('Currency'), sub { $_[0]->currency->name } ],
- [ $::locale->text('Remote name'), 'remote_name' ],
- [ $::locale->text('Purpose'), 'purpose' ],
+ [ $::locale->text('Remote Bank Code'), 'remote_bank_code' ],
+ [ $::locale->text('Remote account number'),'remote_account_number' ],
+ [ $::locale->text('Valutadate'), 'valutadate' ],
+ [ $::locale->text('Amount'), 'amount' ],
+ [ $::locale->text('Currency'), sub { $_[0]->currency->name } ],
+ [ $::locale->text('Remote name'), 'remote_name' ],
+ [ $::locale->text('Purpose'), 'purpose' ],
],
%params,
);
@@ -686,11 +708,11 @@ sub _letter_list {
title => $::locale->text('Letters'),
type => 'letter',
columns => [
- [ $::locale->text('Date'), 'date' ],
+ [ $::locale->text('Date'), 'date' ],
[ $::locale->text('Letternumber'), sub { $_[0]->presenter->letter(display => 'table-cell') } ],
- [ $::locale->text('Customer'), 'customer' ],
- [ $::locale->text('Reference'), 'reference' ],
- [ $::locale->text('Subject'), 'subject' ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Reference'), 'reference' ],
+ [ $::locale->text('Subject'), 'subject' ],
],
%params,
);
@@ -704,11 +726,11 @@ sub _email_journal_list {
title => $::locale->text('Email'),
type => 'email_journal',
columns => [
- [ $::locale->text('Sent on'), sub { $_[0]->sent_on->to_kivitendo(precision => 'seconds') } ],
+ [ $::locale->text('Sent on'), sub { $_[0]->sent_on->to_kivitendo(precision => 'seconds') } ],
[ $::locale->text('Subject'), sub { $_[0]->presenter->email_journal(display => 'table-cell') } ],
- [ $::locale->text('Status'), 'status' ],
- [ $::locale->text('From'), 'from' ],
- [ $::locale->text('To'), 'recipients' ],
+ [ $::locale->text('Status'), 'status' ],
+ [ $::locale->text('From'), 'from' ],
+ [ $::locale->text('To'), 'recipients' ],
],
%params,
);
diff --git a/SL/TransNumber.pm b/SL/TransNumber.pm
index 165acd0be3..e19c111ec4 100644
--- a/SL/TransNumber.pm
+++ b/SL/TransNumber.pm
@@ -17,7 +17,7 @@ use Rose::Object::MakeMethods::Generic
);
my @SUPPORTED_TYPES = (
- qw(invoice invoice_for_advance_payment final_invoice credit_note customer vendor sales_delivery_order purchase_delivery_order sales_order_intake sales_order purchase_order sales_quotation request_quotation purchase_quotation_intake part service assembly assortment letter),
+ qw(invoice invoice_for_advance_payment final_invoice credit_note customer vendor sales_delivery_order purchase_delivery_order sales_order_intake sales_order purchase_order purchase_order_confirmation sales_quotation request_quotation purchase_quotation_intake part service assembly assortment letter),
@{ SL::DB::DeliveryOrder::TypeData::valid_types() },
);
@@ -72,6 +72,13 @@ sub _get_filters {
$filters{where} = 'NOT COALESCE(quotation, FALSE)';
$filters{where} .= $type =~ /^sales/ ? ' AND (customer_id IS NOT NULL)' : ' AND (vendor_id IS NOT NULL)';
+ } elsif ($type =~ /^purchase_order_confirmation$/) {
+ $filters{trans_number} = "ordnumber";
+ $filters{numberfield} = "pocnumber";
+ $filters{table} = "oe";
+ $filters{where} = 'record_type = ?';
+ $filters{values} = $type;
+
} elsif ($type =~ /_quotation$/) {
$filters{trans_number} = "quonumber";
$filters{numberfield} = $type eq 'sales_quotation' ? "sqnumber" : "rfqnumber";
diff --git a/SL/Webdav.pm b/SL/Webdav.pm
index df2e4b005c..3b4c314875 100644
--- a/SL/Webdav.pm
+++ b/SL/Webdav.pm
@@ -23,6 +23,7 @@ my %type_to_path = (
request_quotation => 'anfragen',
purchase_quotation_intake => 'angebotseingaenge',
purchase_order => 'lieferantenbestellungen',
+ purchase_order_confirmation => 'lieferantenauftragsbestaetigungen',
sales_delivery_order => 'verkaufslieferscheine',
purchase_delivery_order => 'einkaufslieferscheine',
supplier_delivery_order => 'beistelllieferscheine',
diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl
index d0be653968..031a76a091 100644
--- a/bin/mozilla/do.pl
+++ b/bin/mozilla/do.pl
@@ -778,7 +778,9 @@ sub orders {
my @columns = qw(
ids transdate reqdate
id donumber
- ordnumber customernumber cusordnumber
+ ordnumber order_confirmation_number
+ customernumber vendor_confirmation_number
+ cusordnumber
name employee salesman
shipvia globalprojectnumber
transaction_description department
@@ -799,7 +801,8 @@ sub orders {
push @hidden_variables, $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered donumber ordnumber serialnumber cusordnumber
transaction_description transdatefrom transdateto reqdatefrom reqdateto
type vc employee_id salesman_id project_id parts_partnumber parts_description
- insertdatefrom insertdateto business_id all department_id chargenumber full_text);
+ insertdatefrom insertdateto business_id all department_id chargenumber full_text
+ vendor_confirmation_number order_confirmation_number);
my $href = build_std_url('action=orders', grep { $form->{$_} } @hidden_variables);
@@ -823,9 +826,11 @@ sub orders {
'department' => { 'text' => $locale->text('Department'), },
'insertdate' => { 'text' => $locale->text('Insert Date'), },
'items' => { 'text' => $locale->text('Positions'), },
+ 'vendor_confirmation_number' => { 'text' => $locale->text('Vendor Confirmation Number'), },
+ 'order_confirmation_number' => { 'text' => $locale->text('Order Confirmation Number'), },
);
- foreach my $name (qw(id transdate reqdate donumber ordnumber name employee salesman shipvia transaction_description department insertdate)) {
+ foreach my $name (qw(id transdate reqdate donumber ordnumber name employee salesman shipvia transaction_description department insertdate vendor_confirmation_number)) {
my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
$column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
}
@@ -861,6 +866,12 @@ sub orders {
if ($form->{ordnumber}) {
push @options, $locale->text('Order Number') . " : $form->{ordnumber}";
}
+ if ($form->{order_confirmation_number}) {
+ push @options, $locale->text('Order Confirmation Number') . " : $form->{order_confirmation_number}";
+ }
+ if ($form->{vendor_confirmation_number}) {
+ push @options, $locale->text('Vendor Confirmation Number') . " : $form->{vendor_confirmation_number}";
+ }
push @options, $locale->text('Serial Number') . " : $form->{serialnumber}" if $form->{serialnumber};
if ($form->{business_id}) {
my $vc_type_label = $form->{vc} eq 'customer' ? $locale->text('Customer type') : $locale->text('Vendor type');
@@ -951,7 +962,7 @@ sub orders {
$dord->{open} = $dord->{closed} ? $locale->text('No') : $locale->text('Yes');
$dord->{delivered} = $dord->{delivered} ? $locale->text('Yes') : $locale->text('No');
- my $row = { map { $_ => { 'data' => $dord->{$_} } } grep {$_ ne 'items'} @columns };
+ my $row = { map { $_ => { 'data' => $dord->{$_} } } grep {$_ ne 'items' || $_ ne 'order_confirmation_numbers'} @columns };
my $ord_id = $dord->{id};
$row->{ids} = {
@@ -964,6 +975,15 @@ sub orders {
$row->{donumber}->{link} = SL::Controller::DeliveryOrder->url_for(action => "edit", id => $dord->{id});
$row->{ordnumber}->{link} = $edit_order_url . "&id=" . E($dord->{oe_id}) . "&callback=${callback}" if $dord->{oe_id};
+ foreach my $order_confirmation (@{ $dord->{order_confirmation_numbers} }) {
+ if (lc($report->{options}->{output_format}) eq 'html') {
+ $row->{order_confirmation_number}->{raw_data} .= SL::Presenter::Tag::link_tag(build_std_url('script=controller.pl', 'action=Order/edit', 'id=' . $order_confirmation->{id}, 'type=' . 'purchase_order_confirmation'), $order_confirmation->{number} . '
');
+ } elsif (lc($report->{options}->{output_format}) ne 'html') {
+ my $sep = $row->{order_confirmation_number}->{data} ? ' ' : '';
+ $row->{order_confirmation_number}->{data} .= $sep . $order_confirmation->{number};
+ }
+ }
+
if ($form->{l_items}) {
my $items = SL::DB::Manager::DeliveryOrderItem->get_all_sorted(where => [id => $dord->{item_ids}]);
$row->{items}->{raw_data} = SL::Presenter::ItemsList::items_list($items) if lc($report->{options}->{output_format}) eq 'html';
diff --git a/bin/mozilla/generictranslations.pl b/bin/mozilla/generictranslations.pl
index d1fff87dcf..7d2545a73d 100644
--- a/bin/mozilla/generictranslations.pl
+++ b/bin/mozilla/generictranslations.pl
@@ -25,6 +25,7 @@
preset_text_request_quotation => t8('Preset email text for requests (rfq)'),
preset_text_purchase_quotation_intake => t8('Preset email text for purchase quotation intakes'),
preset_text_purchase_order => t8('Preset email text for purchase orders'),
+ preset_text_purchase_order_confirmation => t8('Preset email text for purchase orders confirmations'),
preset_text_purchase_reclamation => t8('Preset email text for purchase reclamations'),
preset_text_periodic_invoices_email_body => t8('Preset email body for periodic invoices'),
preset_text_periodic_invoices_email_subject => t8('Preset email subject for periodic invoices'),
diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl
index b71a58e0a6..2d3626da70 100644
--- a/bin/mozilla/oe.pl
+++ b/bin/mozilla/oe.pl
@@ -81,21 +81,23 @@
# $locale->text('Workflow sales_quotation');
my $oe_access_map = {
- 'sales_order_intake' => 'sales_order_edit',
- 'sales_order' => 'sales_order_edit',
- 'purchase_order' => 'purchase_order_edit',
- 'request_quotation' => 'request_quotation_edit',
- 'sales_quotation' => 'sales_quotation_edit',
- 'purchase_quotation_intake' => 'request_quotation_edit',
+ 'sales_order_intake' => 'sales_order_edit',
+ 'sales_order' => 'sales_order_edit',
+ 'purchase_order' => 'purchase_order_edit',
+ 'purchase_order_confirmation' => 'purchase_order_edit',
+ 'request_quotation' => 'request_quotation_edit',
+ 'sales_quotation' => 'sales_quotation_edit',
+ 'purchase_quotation_intake' => 'request_quotation_edit',
};
my $oe_view_access_map = {
- 'sales_order_intake' => 'sales_order_edit | sales_order_view',
- 'sales_order' => 'sales_order_edit | sales_order_view',
- 'purchase_order' => 'purchase_order_edit | purchase_order_view',
- 'request_quotation' => 'request_quotation_edit | request_quotation_view',
- 'sales_quotation' => 'sales_quotation_edit | sales_quotation_view',
- 'purchase_quotation_intake' => 'request_quotation_edit | request_quotation_view',
+ 'sales_order_intake' => 'sales_order_edit | sales_order_view',
+ 'sales_order' => 'sales_order_edit | sales_order_view',
+ 'purchase_order' => 'purchase_order_edit | purchase_order_view',
+ 'purchase_order_confirmation' => 'purchase_order_edit | purchase_order_view',
+ 'request_quotation' => 'request_quotation_edit | request_quotation_view',
+ 'sales_quotation' => 'sales_quotation_edit | sales_quotation_view',
+ 'purchase_quotation_intake' => 'request_quotation_edit | request_quotation_view',
};
sub check_oe_access {
@@ -949,6 +951,12 @@ sub search {
$form->{title} = $locale->text('Purchase Orders');
$form->{ordlabel} = $locale->text('Order Number');
+ } elsif ($form->{type} eq 'purchase_order_confirmation') {
+ $form->{vc} = 'vendor';
+ $form->{ordnrname} = 'ordnumber';
+ $form->{title} = $locale->text('Purchase Order Confirmations');
+ $form->{ordlabel} = $locale->text('Order Confirmation Number');
+
} elsif ($form->{type} eq 'request_quotation') {
$form->{vc} = 'vendor';
$form->{ordnrname} = 'quonumber';
@@ -1047,7 +1055,7 @@ sub orders {
my %params = @_;
check_oe_access(with_view => 1);
- my $ordnumber = ($form->{type} =~ /_order_intake$|_order$/) ? "ordnumber" : "quonumber";
+ my $ordnumber = ($form->{type} =~ /_order_intake$|_order$|purchase_order_confirmation/) ? "ordnumber" : "quonumber";
($form->{ $form->{vc} }, $form->{"$form->{vc}_id"}) = split(/--/, $form->{ $form->{vc} });
report_generator_set_default_sort('transdate', 1);
@@ -1058,7 +1066,8 @@ sub orders {
my @columns = (
"transdate", "reqdate",
"id", $ordnumber,
- "cusordnumber", "customernumber",
+ "cusordnumber", "vendor_confirmation_number",
+ "customernumber",
"name", "netamount",
"tax", "amount",
"remaining_netamount", "remaining_amount",
@@ -1094,6 +1103,9 @@ sub orders {
if ($form->{type} eq 'purchase_order') {
$form->{title} = $locale->text('Purchase Orders');
$attachment_basename = $locale->text('purchase_order_list');
+ } elsif ($form->{type} eq 'purchase_order_confirmation') {
+ $form->{title} = $locale->text('Purchase Order Confirmations');
+ $attachment_basename = $locale->text('purchase_order_confirmation_list');
} elsif ($form->{type} eq 'purchase_quotation_intake') {
$form->{title} = $locale->text('Purchase Quotation Intakes');
$attachment_basename = $locale->text('purchase_quotation_intake_list');
@@ -1136,6 +1148,7 @@ sub orders {
parts_description all department_id intnotes phone_notes fulltext
order_status_id shiptoname shiptodepartment_1 shiptodepartment_2
shiptostreet shiptozipcode shiptocity shiptocountry
+ vendor_confirmation_number
);
push @hidden_variables, map { "cvar_$_->{name}" } @ct_searchable_custom_variables;
@@ -1149,7 +1162,7 @@ sub orders {
'transdate' => { 'text' => $locale->text('Date'), },
'reqdate' => { 'text' => $form->{type} =~ /_order/ ? $locale->text('Required by') : $locale->text('Valid until') },
'id' => { 'text' => $locale->text('ID'), },
- 'ordnumber' => { 'text' => $locale->text('Order'), },
+ 'ordnumber' => { 'text' => $form->{type} eq "purchase_order_confirmation" ? $locale->text('Confirmation'): $locale->text('Order'), },
'quonumber' => { 'text' => $form->{type} eq "request_quotation" ? $locale->text('RFQ') : $locale->text('Quotation'), },
'cusordnumber' => { 'text' => $locale->text('Customer Order Number'), },
'name' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer') : $locale->text('Vendor'), },
@@ -1191,13 +1204,14 @@ sub orders {
shiptozipcode => { 'text' => $locale->text('Zipcode (Shipping)'), },
shiptocity => { 'text' => $locale->text('City (Shipping)'), },
shiptocountry => { 'text' => $locale->text('Country (Shipping)'), },
+ vendor_confirmation_number => { 'text' => $locale->text('Vendor Confirmation Number'), },
%column_defs_cvars,
);
foreach my $name (qw(id transdate reqdate quonumber ordnumber cusordnumber
name employee salesman shipvia transaction_description
shippingpoint taxzone insertdate payment_terms department
- intnotes order_status)) {
+ intnotes order_status vendor_confirmation_number)) {
my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
$column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
}
@@ -1231,6 +1245,7 @@ sub orders {
push @options, $locale->text('Contact Person') . " : $form->{cp_name}" if $form->{cp_name};
push @options, $locale->text('Department') . " : $form->{department}" if $form->{department};
push @options, $locale->text('Order Number') . " : $form->{ordnumber}" if $form->{ordnumber};
+ push @options, $locale->text('Vendor Confirmation Number') . " : $form->{vendor_confirmation_number}" if $form->{vendor_confirmation_number};
push @options, $locale->text('Customer Order Number') . " : $form->{cusordnumber}" if $form->{cusordnumber};
push @options, $locale->text('Notes') . " : $form->{notes}" if $form->{notes};
push @options, $locale->text('Internal Notes') . " : $form->{intnotes}" if $form->{intnotes};
@@ -1711,7 +1726,7 @@ sub invoice {
$form->get_employee();
- if ($form->{type} =~ /_order$/) {
+ if ($form->{type} =~ /_order$|purchase_order_confirmation/) {
# these checks only apply if the items don't bring their own ordnumbers/transdates.
# The if clause ensures that by searching for empty ordnumber_#/transdate_# fields.
@@ -1777,6 +1792,7 @@ sub invoice {
my ($script);
if ( $form->{type} eq 'purchase_order'
+ || $form->{type} eq 'purchase_order_confirmation'
|| $form->{type} eq 'request_quotation') {
$form->{title} = $locale->text('Add Vendor Invoice');
$form->{script} = 'ir.pl';
diff --git a/doc/changelog b/doc/changelog
index baea5fb4d7..abc0fee4ee 100644
--- a/doc/changelog
+++ b/doc/changelog
@@ -82,6 +82,8 @@ Mittelgroße neue Features:
und Auftrag.
- Neuer Workflow Angebots-Eingang auf der Einkaufsseite zwischen Preisanfrage
und Lieferantenauftrag.
+ - Neuer Workflow Lieferantenauftragsbestätigung auf der Einkaufsseite nach
+ Lieferantenauftrag.
- Scan Funktion für Schweizer QR-Rechnungen in mobilen templates. Die QR-Rechnung kann
mittels eingebauter Kamera Funktion eingescannt werden. Anschließend wird die Rechnung
einem Lieferanten zugeordnet und als Kreditorbuchung gespeichert.
diff --git a/js/kivi.Order.js b/js/kivi.Order.js
index fe0c3ec578..8fdffeafc0 100644
--- a/js/kivi.Order.js
+++ b/js/kivi.Order.js
@@ -835,7 +835,7 @@ namespace('kivi.Order', function(ns) {
var type = $('#type').val();
var number_info = '';
- if ($('#type').val() == 'sales_order_intake' || $('#type').val() == 'sales_order' || $('#type').val() == 'purchase_order') {
+ if ($('#type').val() == 'sales_order_intake' || $('#type').val() == 'sales_order' || $('#type').val() == 'purchase_order' || $('#type').val() == 'purchase_order_confirmation') {
number_info = $('#order_ordnumber').val();
} else if ($('#type').val() == 'sales_quotation' || $('#type').val() == 'request_quotation' || $('#type').val() == 'purchase_quotation_intake') {
number_info = $('#order_quonumber').val();
@@ -844,7 +844,7 @@ namespace('kivi.Order', function(ns) {
var name_info = '';
if ($('#type').val() == 'sales_order_intake' || $('#type').val() == 'sales_order' || $('#type').val() == 'sales_quotation') {
name_info = $('#order_customer_id_name').val();
- } else if ($('#type').val() == 'purchase_order' || $('#type').val() == 'request_quotation' || $('#type').val() == 'purchase_quotation_intake') {
+ } else if ($('#type').val() == 'purchase_order' || $('#type').val() == 'purchase_order_confirmation' || $('#type').val() == 'request_quotation' || $('#type').val() == 'purchase_quotation_intake') {
name_info = $('#order_vendor_id_name').val();
}
diff --git a/locale/de/all b/locale/de/all
index df7ad68cce..f7867f2bdb 100644
--- a/locale/de/all
+++ b/locale/de/all
@@ -207,6 +207,7 @@ $self->{texts} = {
'Add Project' => 'Projekt erfassen',
'Add Purchase Delivery Order' => 'Lieferschein (Einkauf) erfassen',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
+ 'Add Purchase Order Confirmation' => 'Lieferantenauftragsbestätigung erfassen',
'Add Purchase Quotation Intake' => 'Angebotseingang erfassen',
'Add Purchase Reclamation' => 'Einkaufsreklamation erfassen',
'Add Quotation' => 'Angebot erfassen',
@@ -802,6 +803,8 @@ $self->{texts} = {
'Configure' => 'Konfigurieren',
'Confirm!' => 'Bestätigen Sie!',
'Confirmation' => 'Auftragsbestätigung',
+ 'Confirmation Date' => 'Bestätigungsdatum',
+ 'Confirmation Number' => 'Bestätigungsnummer',
'Consume average' => 'Durchschnittsverbrauch',
'Contact' => 'Kontakt',
'Contact Departments' => 'Abteilungen von Ansprechpersonen',
@@ -1403,6 +1406,7 @@ $self->{texts} = {
'Edit Printer' => 'Drucker bearbeiten',
'Edit Purchase Delivery Order' => 'Lieferschein (Einkauf) bearbeiten',
'Edit Purchase Order' => 'Lieferantenauftrag bearbeiten',
+ 'Edit Purchase Order Confirmation' => 'Lieferantenauftragsbestätigung bearbeiten',
'Edit Purchase Quotation Intake' => 'Angebotseingang bearbeiten',
'Edit Purchase Reclamation' => 'Einkaufsreklamation bearbeiten',
'Edit Quotation' => 'Angebot bearbeiten',
@@ -2168,6 +2172,7 @@ $ ./scripts/installation_check.pl',
'Last Invoice Number' => 'Letzte Rechnungsnummer',
'Last Numbers / Prefixes' => 'Letzte Nummern / Präfixe',
'Last Purchase Delivery Order Number' => 'Letzte Lieferscheinnummer (Einkauf)',
+ 'Last Purchase Order Confirmation Number' => 'Letzte Lieferantenauftragsbestätigungs-Nummer',
'Last Purchase Order Number' => 'Letzte Lieferantenauftragsnummer',
'Last Purchase Quotation Intake Number' => 'Letzte Angebotsseingangsnummer',
'Last Purchase Reclamation Number' => 'Letzte Einkaufsreklamationsnummer',
@@ -2646,6 +2651,7 @@ $ ./scripts/installation_check.pl',
'Order' => 'Auftrag',
'Order & Articles' => 'Auftrag & Artikel',
'Order & Numbers' => 'Auftrag & Nummern',
+ 'Order Confirmation Number' => 'Auftragsbestätigungsnummer',
'Order Controller' => 'Auftrags-Controller',
'Order Date' => 'Auftragsdatum',
'Order Date missing!' => 'Auftragsdatum fehlt!',
@@ -2914,6 +2920,7 @@ $ ./scripts/installation_check.pl',
'Preset email subject for periodic invoices' => 'Vorbelegter E-Mail-Betreff für wiederkehrende Rechnungen',
'Preset email text for credit notes' => 'Vorbelegter E-Mail-Text für Gutschriften',
'Preset email text for purchase orders' => 'Vorbelegter E-Mail-Text für Einkaufsaufträge',
+ 'Preset email text for purchase orders confirmations' => 'Vorbelegter E-Mail-Text für Lieferantenauftragsbestätigungen',
'Preset email text for purchase quotation intakes' => 'Vorbelegter E-Mail-Text für Angebotseingänge',
'Preset email text for purchase reclamations' => 'Vorbelegter E-Mail-Text für Einkaufsreklamation',
'Preset email text for requests (rfq)' => 'Vorbelegter E-Mail-Text für Anfragen',
@@ -3037,6 +3044,8 @@ $ ./scripts/installation_check.pl',
'Purchase Invoice' => 'Einkaufsrechnung',
'Purchase Invoices' => 'Einkaufsrechnungen',
'Purchase Order' => 'Lieferantenauftrag',
+ 'Purchase Order Confirmation' => 'Lieferantenauftragsbestätigung',
+ 'Purchase Order Confirmations' => 'Lieferantenauftragsbestätigungen',
'Purchase Orders' => 'Lieferantenaufträge',
'Purchase Orders Services are deliverable' => 'Dienstleistungen im Einkaufsauftrag sind lieferbar',
'Purchase Orders deleteable' => 'Lieferantenaufträge löschbar',
@@ -3373,6 +3382,7 @@ $ ./scripts/installation_check.pl',
'Save and Purchase Delivery Order' => 'Speichern und Lieferschein (Einkauf)',
'Save and Purchase Delivery Order with item selection' => 'Speichern und Lieferschein (Einkauf) mit Artikelauswahl',
'Save and Purchase Order' => 'Speichern und Lieferantenauftrag',
+ 'Save and Purchase Order Confirmation' => 'Speichern und Lieferantenauftragsbesätigung',
'Save and Purchase Quotation Intake' => 'Speichern und Angebotseingang',
'Save and Purchase Reclamation' => 'Speichern und Einkaufsreklamation',
'Save and Quotation' => 'Speichern und Angebot',
@@ -4651,6 +4661,7 @@ $ ./scripts/installation_check.pl',
'Vendor & Transaction' => 'Lieferant & Buchung',
'Vendor (database ID)' => 'Lieferant (Datenbank-ID)',
'Vendor (name)' => 'Lieferant (Name)',
+ 'Vendor Confirmation Number' => 'Bestätigungsnummer des Lieferanten',
'Vendor Discount' => 'Lieferantenrabatt',
'Vendor GLN' => 'GLN des Lieferanten',
'Vendor Invoice' => 'Einkaufsrechnung',
@@ -5065,6 +5076,8 @@ $ ./scripts/installation_check.pl',
'prospective' => 'zukünftig',
'purchase_delivery_order_list' => 'lieferscheinliste_einkauf',
'purchase_order' => 'Auftrag',
+ 'purchase_order_confirmation' => 'Lieferantenauftragsbestätigung',
+ 'purchase_order_confirmation_list' => 'lieferantenauftragsbestaetigungsliste',
'purchase_order_list' => 'lieferantenauftragsliste',
'purchase_quotation_intake' => 'Angebotseingang',
'purchase_quotation_intake_list' => 'angebotseingangsliste',
diff --git a/locale/en/all b/locale/en/all
index 4e0125611b..5fdb308604 100644
--- a/locale/en/all
+++ b/locale/en/all
@@ -207,6 +207,7 @@ $self->{texts} = {
'Add Project' => '',
'Add Purchase Delivery Order' => '',
'Add Purchase Order' => '',
+ 'Add Purchase Order Confirmation' => '',
'Add Purchase Quotation Intake' => '',
'Add Purchase Reclamation' => '',
'Add Quotation' => '',
@@ -802,6 +803,8 @@ $self->{texts} = {
'Configure' => '',
'Confirm!' => '',
'Confirmation' => '',
+ 'Confirmation Date' => '',
+ 'Confirmation Number' => '',
'Consume average' => '',
'Contact' => '',
'Contact Departments' => '',
@@ -1403,6 +1406,7 @@ $self->{texts} = {
'Edit Printer' => '',
'Edit Purchase Delivery Order' => '',
'Edit Purchase Order' => '',
+ 'Edit Purchase Order Confirmation' => '',
'Edit Purchase Quotation Intake' => '',
'Edit Purchase Reclamation' => '',
'Edit Quotation' => '',
@@ -2167,6 +2171,7 @@ $self->{texts} = {
'Last Invoice Number' => '',
'Last Numbers / Prefixes' => '',
'Last Purchase Delivery Order Number' => '',
+ 'Last Purchase Order Confirmation Number' => '',
'Last Purchase Order Number' => '',
'Last Purchase Quotation Intake Number' => '',
'Last Purchase Reclamation Number' => '',
@@ -2645,6 +2650,7 @@ $self->{texts} = {
'Order' => '',
'Order & Articles' => '',
'Order & Numbers' => '',
+ 'Order Confirmation Number' => '',
'Order Controller' => '',
'Order Date' => '',
'Order Date missing!' => '',
@@ -2913,6 +2919,7 @@ $self->{texts} = {
'Preset email subject for periodic invoices' => '',
'Preset email text for credit notes' => '',
'Preset email text for purchase orders' => '',
+ 'Preset email text for purchase orders confirmations' => '',
'Preset email text for purchase quotation intakes' => '',
'Preset email text for purchase reclamations' => '',
'Preset email text for requests (rfq)' => '',
@@ -3036,6 +3043,8 @@ $self->{texts} = {
'Purchase Invoice' => '',
'Purchase Invoices' => '',
'Purchase Order' => '',
+ 'Purchase Order Confirmation' => '',
+ 'Purchase Order Confirmations' => '',
'Purchase Orders' => '',
'Purchase Orders Services are deliverable' => '',
'Purchase Orders deleteable' => '',
@@ -3372,6 +3381,7 @@ $self->{texts} = {
'Save and Purchase Delivery Order' => '',
'Save and Purchase Delivery Order with item selection' => '',
'Save and Purchase Order' => '',
+ 'Save and Purchase Order Confirmation' => '',
'Save and Purchase Quotation Intake' => '',
'Save and Purchase Reclamation' => '',
'Save and Quotation' => '',
@@ -4649,6 +4659,7 @@ $self->{texts} = {
'Vendor & Transaction' => '',
'Vendor (database ID)' => '',
'Vendor (name)' => '',
+ 'Vendor Confirmation Number' => '',
'Vendor Discount' => '',
'Vendor GLN' => '',
'Vendor Invoice' => '',
@@ -5063,6 +5074,8 @@ $self->{texts} = {
'prospective' => '',
'purchase_delivery_order_list' => '',
'purchase_order' => '',
+ 'purchase_order_confirmation' => '',
+ 'purchase_order_confirmation_list' => '',
'purchase_order_list' => '',
'purchase_quotation_intake' => '',
'purchase_quotation_intake_list' => '',
diff --git a/menus/user/90-purchase-order-confirmation.yaml b/menus/user/90-purchase-order-confirmation.yaml
new file mode 100644
index 0000000000..4c30e9c119
--- /dev/null
+++ b/menus/user/90-purchase-order-confirmation.yaml
@@ -0,0 +1,19 @@
+- parent: ap
+ id: ap_add_purchase_order_confirmation_experimental
+ name: Add Purchase Order Confirmation
+ icon: purchase_order_add
+ order: 250
+ access: purchase_order_edit & client/feature_experimental_order
+ params:
+ action: Order/add
+ type: purchase_order_confirmation
+- parent: ap_reports
+ id: ap_reports_purchase_order_confirmations
+ name: Purchase Order Confirmations
+ icon: purchase_order_report
+ order: 250
+ access: purchase_order_edit | purchase_order_view
+ module: oe.pl
+ params:
+ action: search
+ type: purchase_order_confirmation
diff --git a/sql/Pg-upgrade2/file_storage_purchase_order_confirmation.sql b/sql/Pg-upgrade2/file_storage_purchase_order_confirmation.sql
new file mode 100644
index 0000000000..3bf73d1a6f
--- /dev/null
+++ b/sql/Pg-upgrade2/file_storage_purchase_order_confirmation.sql
@@ -0,0 +1,22 @@
+-- @tag: file_storage_purchase_order_confirmation
+-- @description: Dateispeicher auch für Lieferantenauftragsbestätigungen
+-- @depends: file_storage_purchase_quotation_intake
+
+ALTER TABLE files
+ DROP CONSTRAINT valid_type;
+ALTER TABLE files
+ ADD CONSTRAINT valid_type CHECK (
+ (object_type = 'credit_note' ) OR (object_type = 'invoice' )
+ OR (object_type = 'sales_order' ) OR (object_type = 'sales_order_intake' )
+ OR (object_type = 'sales_quotation' ) OR (object_type = 'sales_delivery_order' )
+ OR (object_type = 'request_quotation' ) OR (object_type = 'purchase_quotation_intake' )
+ OR (object_type = 'purchase_order' ) OR (object_type = 'purchase_order_confirmation')
+ OR (object_type = 'purchase_delivery_order' ) OR (object_type = 'purchase_invoice' )
+ OR (object_type = 'vendor' ) OR (object_type = 'customer' ) OR (object_type = 'part' )
+ OR (object_type = 'gl_transaction' ) OR (object_type = 'dunning' ) OR (object_type = 'dunning1' )
+ OR (object_type = 'dunning2' ) OR (object_type = 'dunning3' ) OR (object_type = 'dunning_orig_invoice' )
+ OR (object_type = 'dunning_invoice' ) OR (object_type = 'draft' ) OR (object_type = 'statement' )
+ OR (object_type = 'shop_image' ) OR (object_type = 'letter' ) OR (object_type = 'project' )
+ OR (object_type = 'invoice_for_advance_payment') OR (object_type = 'final_invoice' ) OR (object_type = 'supplier_delivery_order')
+ OR (object_type = 'sales_reclamation' ) OR (object_type = 'purchase_reclamation' ) OR (object_type = 'rma_delivery_order' )
+ );
diff --git a/sql/Pg-upgrade2/oe_delivery_orders_add_vendor_confirmation_number.sql b/sql/Pg-upgrade2/oe_delivery_orders_add_vendor_confirmation_number.sql
new file mode 100644
index 0000000000..6f2b141986
--- /dev/null
+++ b/sql/Pg-upgrade2/oe_delivery_orders_add_vendor_confirmation_number.sql
@@ -0,0 +1,6 @@
+-- @tag: oe_delivery_orders_add_vendor_confirmation_number
+-- @description: Auftragsbestätigungs-Nummer des Lieferanten für Aufträge und Lieferscheine
+-- @depends: release_3_8_0
+
+ALTER TABLE oe ADD COLUMN vendor_confirmation_number TEXT;
+ALTER TABLE delivery_orders ADD COLUMN vendor_confirmation_number TEXT;
diff --git a/sql/Pg-upgrade2/oe_purchase_order_confirmation.sql b/sql/Pg-upgrade2/oe_purchase_order_confirmation.sql
new file mode 100644
index 0000000000..8bbb02221b
--- /dev/null
+++ b/sql/Pg-upgrade2/oe_purchase_order_confirmation.sql
@@ -0,0 +1,5 @@
+-- @tag: oe_purchase_order_confirmation
+-- @description: Neuer Einkaufsbeleg: Lieferantenauftragsbesätigung (purchase_order_confirmation)
+-- @depends: release_3_8_0
+
+ALTER TABLE defaults ADD pocnumber TEXT;
diff --git a/sql/Pg-upgrade2/oe_purchase_order_confirmation_order_types.sql b/sql/Pg-upgrade2/oe_purchase_order_confirmation_order_types.sql
new file mode 100644
index 0000000000..dd04ce99cc
--- /dev/null
+++ b/sql/Pg-upgrade2/oe_purchase_order_confirmation_order_types.sql
@@ -0,0 +1,5 @@
+-- @tag: oe_purchase_order_confirmation_order_types
+-- @description: order_types-Eintrag für Lieferantenauftragsbesätigung (purchase_order_confirmation)
+-- @depends: order_type
+
+ALTER TYPE order_types ADD VALUE IF NOT EXISTS 'purchase_order_confirmation';
diff --git a/t/workflow/delivery_order_reclamation.t b/t/workflow/delivery_order_reclamation.t
index 56951ca38a..f368668795 100644
--- a/t/workflow/delivery_order_reclamation.t
+++ b/t/workflow/delivery_order_reclamation.t
@@ -285,6 +285,7 @@ my @different_record_values = qw(
cp_id contact_id
cusordnumber cv_record_number
donumber record_number
+ vendor_confirmation_number
);
my @different_record_item_values = qw(
id delivery_order_id reclamation_id itime mtime
diff --git a/t/workflow/order_reclamation.t b/t/workflow/order_reclamation.t
index eff758d7da..5aa1c99533 100644
--- a/t/workflow/order_reclamation.t
+++ b/t/workflow/order_reclamation.t
@@ -285,6 +285,7 @@ my @different_record_values = qw(
cusordnumber cv_record_number
ordnumber record_number
intake
+ vendor_confirmation_number
);
my @different_record_item_values = qw(
id trans_id reclamation_id itime mtime
diff --git a/templates/design40_webpages/client_config/_ranges_of_numbers.html b/templates/design40_webpages/client_config/_ranges_of_numbers.html
index a35b68a070..0466ac0455 100644
--- a/templates/design40_webpages/client_config/_ranges_of_numbers.html
+++ b/templates/design40_webpages/client_config/_ranges_of_numbers.html
@@ -46,6 +46,10 @@
- [% IF (TYPE == "sales_order_intake" || TYPE == "sales_order" || TYPE == "purchase_order") %] + [% IF (TYPE == "sales_order_intake" || TYPE == "sales_order" || TYPE == "purchase_order" || TYPE == "purchase_order_confirmation") %] [% 'Serial No.' | $T8 %] [% L.input_tag("order.orderitems[].serialnumber", ITEM.serialnumber, size = 15, "data-validate"="trimmed_whitespaces") %] [% END %] [% 'Project' | $T8 %] [% P.project.picker("order.orderitems[].project_id", ITEM.project_id, size = 15) %] - [% IF (TYPE == "sales_order_intake" || TYPE == "sales_order" || TYPE == "purchase_order") %] + [% IF (TYPE == "sales_order_intake" || TYPE == "sales_order" || TYPE == "purchase_order" || TYPE == "purchase_order_confirmation") %] [% 'Reqdate' | $T8 %] [% L.date_tag("order.orderitems[].reqdate_as_date", ITEM.reqdate_as_date) %] [% END %] [% 'Subtotal' | $T8 %] [% L.yes_no_tag("order.orderitems[].subtotal", ITEM.subtotal) %] diff --git a/templates/design40_webpages/order/tabs/basic_data.html b/templates/design40_webpages/order/tabs/basic_data.html index 9b2cf02cf1..3cd68c8c42 100644 --- a/templates/design40_webpages/order/tabs/basic_data.html +++ b/templates/design40_webpages/order/tabs/basic_data.html @@ -230,9 +230,9 @@ title_key='safe_name') %] | |||||||||
[% 'Order Number' | $T8 %] | +[% IF SELF.type == "purchase_order_confirmation" %][% 'Order Confirmation Number' | $T8 %][% ELSE %][% 'Order Number' | $T8 %][% END %] | [%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %] [% L.input_tag('order.ordnumber', SELF.order.ordnumber, onchange='kivi.Order.set_number_in_title(this)', class='wi-normal') %] @@ -245,6 +245,20 @@ | |||||||
---|---|---|---|---|---|---|---|---|---|
[% 'Order Number' | $T8 %] | + [%- + numbers = []; + FOREACH p = SELF.order.preceding_purchase_orders(); + numbers.push(p.ordnumber); + END; + %] +[% numbers.join(', ') %] | +||||||||
[% quo_nr_txt | $T8 %] | - [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] + [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation") -%] [% L.input_tag('order.quonumber', SELF.order.quonumber, class='wi-normal') %] [%- ELSIF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %] [% L.input_tag('order.quonumber', SELF.order.quonumber, onchange='kivi.Order.set_number_in_title(this)', class='wi-normal') %] @@ -265,7 +279,13 @@ [%- END %] | ||||||||
[% 'Vendor Confirmation Number' | $T8 %] | +[% L.input_tag('order.vendor_confirmation_number', SELF.order.vendor_confirmation_number, class='wi-normal') %] | +||||||||
[% 'Customer Order Number' | $T8 %] | [% L.input_tag('order.cusordnumber', SELF.order.cusordnumber, class='wi-normal') %] | @@ -273,6 +293,8 @@ [% END %] [% IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") %] [% SET transdate_txt = 'Order Date' %] + [% ELSIF SELF.type == "purchase_order_confirmation" -%] + [%- SET transdate_txt = 'Confirmation Date' -%] [% ELSIF (SELF.type == "sales_quotation" || SELF.type == "purchase_quotation_intake") %] [% SET transdate_txt = 'Quotation Date' %] [% ELSE %] @@ -286,7 +308,7 @@[% 'Tax point' | $T8 %] | [% L.date_tag('order.tax_point_as_date', SELF.order.tax_point_as_date, class='wi-date recalc') %] | [% 'Type' | $T8 %] | [% 'Description' | $T8 %] | - [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] + [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation") -%][% 'Delivered' | $T8 %] | [%- END -%][% 'Qty' | $T8 %] | diff --git a/templates/webpages/client_config/_ranges_of_numbers.html b/templates/webpages/client_config/_ranges_of_numbers.html index f186a5ee06..0b6a3f63c7 100644 --- a/templates/webpages/client_config/_ranges_of_numbers.html +++ b/templates/webpages/client_config/_ranges_of_numbers.html @@ -41,6 +41,11 @@[% L.input_tag("defaults.articlenumber", SELF.defaults.articlenumber, size="15") %] | +|
[% LxERP.t8('Last Purchase Order Confirmation Number') %] | +[% L.input_tag("defaults.pocnumber", SELF.defaults.pocnumber, size="15") %] | +||||||||
[% LxERP.t8('Last Sales Quotation Number') %] | [% L.input_tag("defaults.sqnumber", SELF.defaults.sqnumber, size="15") %] | diff --git a/templates/webpages/delivery_order/tabs/basic_data.html b/templates/webpages/delivery_order/tabs/basic_data.html index cc753b3db6..71a78584d8 100644 --- a/templates/webpages/delivery_order/tabs/basic_data.html +++ b/templates/webpages/delivery_order/tabs/basic_data.html @@ -129,6 +129,24 @@[% L.input_tag('order.ordnumber', SELF.order.ordnumber, size = 11) %] | |||||||
[% 'Order Confirmation Number' | $T8 %] | + [%- + numbers = []; + FOREACH p = SELF.order.preceding_purchase_order_confirmations(); + numbers.push(p.ordnumber); + END; + %] +[% numbers.join(', ') %] | +||||||||
[% 'Vendor Confirmation Number' | $T8 %] | +[% L.input_tag('order.vendor_confirmation_number', SELF.order.vendor_confirmation_number, size = 11) %] | +||||||||
[% IF SELF.type_data.properties('is_customer') %][% 'Customer Order Number' | $T8 %][% ELSE %][% 'Vendor Order Number' | $T8 %][% END %] | [% L.input_tag('order.cusordnumber', SELF.order.cusordnumber, size = 11) %] | diff --git a/templates/webpages/do/search.html b/templates/webpages/do/search.html index 1c3794f6e5..f35d43a801 100644 --- a/templates/webpages/do/search.html +++ b/templates/webpages/do/search.html @@ -41,6 +41,18 @@||||||||
[% 'Order Confirmation Number' | $T8 %] | ++ | ||||||||
[% 'Vendor Confirmation Number' | $T8 %] | ++ | ||||||||
[% 'Customer Order Number' | $T8 %] | @@ -177,6 +189,17 @@ | + + + | ++ + + | + [%- END %] +
diff --git a/templates/webpages/oe/search.html b/templates/webpages/oe/search.html
index 08d8a623c3..e5f32b1e9a 100644
--- a/templates/webpages/oe/search.html
+++ b/templates/webpages/oe/search.html
@@ -37,6 +37,12 @@ [% HTML.escape(title) %] | [% L.select_tag('order_status_id', ALL_ORDER_STATUSES, default = order_status_id, title_key = 'name', with_empty = 1, style=style) %] | ||||
[% LxERP.t8("Vendor Confirmation Number") %] | +[% L.input_tag("vendor_confirmation_number", '', style=style) %] | +||||||||
[% LxERP.t8("Customer Order Number") %] | @@ -161,7 +167,7 @@|||||||||
[% 'Order probability' | $T8 %] | - [% L.select_tag('order_probability_op', [[ 'ge', '>=' ], [ 'le', '<=' ]]) %] + [% L.select_tag('order_probability_op', [[ 'ge', '>=' ], [ 'le', '<=' ]]) %] [%-# '> make emacs happy %] [% L.select_tag('order_probability_value', ORDER_PROBABILITIES, title='title', with_empty=1) %] | + + + | +[% END %]|||||||
diff --git a/templates/webpages/order/tabs/_price_sources_dialog.html b/templates/webpages/order/tabs/_price_sources_dialog.html index f3af001025..7f44c9351e 100644 --- a/templates/webpages/order/tabs/_price_sources_dialog.html +++ b/templates/webpages/order/tabs/_price_sources_dialog.html @@ -8,7 +8,7 @@ [% IF (FORM.type == "sales_order" || FORM.type == "sales_order_intake" || FORM.type == "sales_quotation") %] [% SET price_editable = AUTH.assert('sales_edit_prices', 1) %] [% END %] -[% IF (FORM.type == "purchase_order" || FORM.type == "request_quotation" || FORM.type == "purchase_quotation_intake") %] +[% IF (FORM.type == "purchase_order" || FORM.type == "purchase_order_confirmation" || FORM.type == "request_quotation" || FORM.type == "purchase_quotation_intake") %] [% SET price_editable = AUTH.assert('purchase_edit_prices', 1) %] [% END %] [% SET exfactor = price_source.record.exchangerate ? 1 / price_source.record.exchangerate : 1 %] diff --git a/templates/webpages/order/tabs/_row.html b/templates/webpages/order/tabs/_row.html index dc055671f6..4411f80574 100644 --- a/templates/webpages/order/tabs/_row.html +++ b/templates/webpages/order/tabs/_row.html @@ -64,7 +64,7 @@ [%- L.hidden_tag("order.orderitems[].longdescription", ITEM.longdescription) %] [%- L.button_tag("kivi.Order.show_longdescription_dialog(this)", LxERP.t8("L")) %] | - [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] + [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation") -%][%- L.div_tag(LxERP.format_amount(ITEM.shipped_qty, 2, 0) _ ' ' _ ITEM.unit, name="shipped_qty", class="numeric") %] | @@ -104,7 +104,7 @@ [% IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "sales_quotation") %] [% SET RIGHT_TO_EDIT_PRICES = AUTH.assert('sales_edit_prices', 1) %] [% END %] - [% IF (SELF.type == "purchase_order" || SELF.type == "request_quotation" || SELF.type == "purchase_quotation_intake") %] + [% IF (SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation" || SELF.type == "request_quotation" || SELF.type == "purchase_quotation_intake") %] [% SET RIGHT_TO_EDIT_PRICES = AUTH.assert('purchase_edit_prices', 1) %] [% END %]diff --git a/templates/webpages/order/tabs/basic_data.html b/templates/webpages/order/tabs/basic_data.html index 0e6f0ebaeb..88027b7311 100644 --- a/templates/webpages/order/tabs/basic_data.html +++ b/templates/webpages/order/tabs/basic_data.html @@ -176,9 +176,9 @@ | |||||||
[% 'Order Number' | $T8 %] | +[% IF SELF.type == "purchase_order_confirmation" %][% 'Order Confirmation Number' | $T8 %][% ELSE %][% 'Order Number' | $T8 %][% END %] | [%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %] [% L.input_tag('order.ordnumber', SELF.order.ordnumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %] @@ -192,6 +192,19 @@ | |||||||
[% 'Order Number' | $T8 %] | + [%- + numbers = []; + FOREACH p = SELF.order.preceding_purchase_orders(); + numbers.push(p.ordnumber); + END; + %] +[% numbers.join(', ') %] | +||||||||
[% quo_nr_txt | $T8 %] | - [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] + [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation") -%] [% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11) %] [%- ELSIF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %] [% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %] @@ -213,7 +226,14 @@ | ||||||||
[% 'Vendor Confirmation Number' | $T8 %] | +[% L.input_tag('order.vendor_confirmation_number', SELF.order.vendor_confirmation_number, size = 11) %] | +||||||||
[% 'Customer Order Number' | $T8 %] | [% L.input_tag('order.cusordnumber', SELF.order.cusordnumber, size = 11) %] | @@ -222,6 +242,8 @@ [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] [%- SET transdate_txt = 'Order Date' -%] + [%- ELSIF SELF.type == "purchase_order_confirmation" -%] + [%- SET transdate_txt = 'Confirmation Date' -%] [%- ELSIF (SELF.type == "sales_quotation" || SELF.type == "purchase_quotation_intake") -%] [%- SET transdate_txt = 'Quotation Date' -%] [%- ELSE -%] @@ -237,7 +259,7 @@[% L.date_tag('order.tax_point_as_date', SELF.order.tax_point_as_date, class="recalc") %] | [%- 'Type' | $T8 %] | [%- 'Description' | $T8 %] | - [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order") -%] + [%- IF (SELF.type == "sales_order_intake" || SELF.type == "sales_order" || SELF.type == "purchase_order" || SELF.type == "purchase_order_confirmation") -%][%- 'Delivered' | $T8 %] | [%- END -%][%- 'Qty' | $T8 %] |