X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDev%2FRecord.pm;h=5fbbd87389a3f177696f805b37c8e8ac4f0d41e7;hb=98056ff901abcbbbcf3f0499c3149056628631e8;hp=dde842e363b9d1164bb5ed08252d1fde2875a973;hpb=d55cf3464d72d33f5638dd25b8c190cd71b171d0;p=kivitendo-erp.git diff --git a/SL/Dev/Record.pm b/SL/Dev/Record.pm index dde842e36..5fbbd8738 100644 --- a/SL/Dev/Record.pm +++ b/SL/Dev/Record.pm @@ -2,19 +2,21 @@ package SL::Dev::Record; use strict; use base qw(Exporter); -our @EXPORT = qw(create_invoice_item create_sales_invoice create_order_item create_sales_order create_purchase_order create_delivery_order_item create_sales_delivery_order create_project); +our @EXPORT_OK = qw(create_invoice_item create_sales_invoice create_credit_note create_order_item create_sales_order create_purchase_order create_delivery_order_item create_sales_delivery_order create_purchase_delivery_order create_project); +our %EXPORT_TAGS = (ALL => \@EXPORT_OK); use SL::DB::Invoice; use SL::DB::InvoiceItem; use SL::DB::Employee; -use SL::Dev::Part; -use SL::Dev::CustomerVendor; +use SL::Dev::Part qw(new_part); +use SL::Dev::CustomerVendor qw(new_vendor new_customer); use SL::DB::Project; use SL::DB::ProjectStatus; use SL::DB::ProjectType; use DateTime; my %record_type_to_item_type = ( sales_invoice => 'SL::DB::InvoiceItem', + credit_note => 'SL::DB::InvoiceItem', sales_order => 'SL::DB::OrderItem', purchase_order => 'SL::DB::OrderItem', sales_delivery_order => 'SL::DB::DeliveryOrderItem', @@ -27,7 +29,7 @@ sub create_sales_invoice { my $invoiceitems = delete $params{invoiceitems} // _create_two_items($record_type); _check_items($invoiceitems, $record_type); - my $customer = delete $params{customer} // SL::Dev::CustomerVendor::create_customer(name => 'Testcustomer')->save; + my $customer = delete $params{customer} // new_customer(name => 'Testcustomer')->save; die "illegal customer" unless defined $customer && ref($customer) eq 'SL::DB::Customer'; my $invoice = SL::DB::Invoice->new( @@ -42,10 +44,44 @@ sub create_sales_invoice { salesman_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, transdate => $params{transdate} // DateTime->today_local->to_kivitendo, payment_id => $params{payment_id} // undef, - gldate => DateTime->today_local->to_kivitendo, + gldate => DateTime->today, invoiceitems => $invoiceitems, - %params, ); + $invoice->assign_attributes(%params) if %params; + + $invoice->post; + return $invoice; +} + +sub create_credit_note { + my (%params) = @_; + + my $record_type = 'credit_note'; + my $invoiceitems = delete $params{invoiceitems} // _create_two_items($record_type); + _check_items($invoiceitems, $record_type); + + my $customer = delete $params{customer} // new_customer(name => 'Testcustomer')->save; + die "illegal customer" unless defined $customer && ref($customer) eq 'SL::DB::Customer'; + + # adjust qty for credit note items + $_->qty( $_->qty * -1) foreach @{$invoiceitems}; + + my $invoice = SL::DB::Invoice->new( + invoice => 1, + type => 'credit_note', + customer_id => $customer->id, + taxzone_id => $customer->taxzone->id, + invnumber => delete $params{invnumber} // undef, + currency_id => $params{currency_id} // $::instance_conf->get_currency_id, + taxincluded => $params{taxincluded} // 0, + employee_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, + salesman_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, + transdate => $params{transdate} // DateTime->today_local->to_kivitendo, + payment_id => $params{payment_id} // undef, + gldate => DateTime->today, + invoiceitems => $invoiceitems, + ); + $invoice->assign_attributes(%params) if %params; $invoice->post; return $invoice; @@ -58,7 +94,7 @@ sub create_sales_delivery_order { my $orderitems = delete $params{orderitems} // _create_two_items($record_type); _check_items($orderitems, $record_type); - my $customer = $params{customer} // SL::Dev::CustomerVendor::create_customer(name => 'Testcustomer')->save; + my $customer = $params{customer} // new_customer(name => 'Testcustomer')->save; die "illegal customer" unless ref($customer) eq 'SL::DB::Customer'; my $delivery_order = SL::DB::DeliveryOrder->new( @@ -71,10 +107,38 @@ sub create_sales_delivery_order { taxincluded => $params{taxincluded} // 0, employee_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, salesman_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, - transdate => $params{transdate} // DateTime->today_local->to_kivitendo, + transdate => $params{transdate} // DateTime->today, orderitems => $orderitems, - %params ); + $delivery_order->assign_attributes(%params) if %params; + $delivery_order->save; + return $delivery_order; +} + +sub create_purchase_delivery_order { + my (%params) = @_; + + my $record_type = 'purchase_delivery_order'; + my $orderitems = delete $params{orderitems} // _create_two_items($record_type); + _check_items($orderitems, $record_type); + + my $vendor = $params{vendor} // new_vendor(name => 'Testvendor')->save; + die "illegal customer" unless ref($vendor) eq 'SL::DB::Vendor'; + + my $delivery_order = SL::DB::DeliveryOrder->new( + 'is_sales' => 'false', + 'closed' => undef, + vendor_id => $vendor->id, + taxzone_id => $vendor->taxzone_id, + donumber => $params{donumber} // undef, + currency_id => $params{currency_id} // $::instance_conf->get_currency_id, + taxincluded => $params{taxincluded} // 0, + employee_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, + salesman_id => $params{employee_id} // SL::DB::Manager::Employee->current->id, + transdate => $params{transdate} // DateTime->today, + orderitems => $orderitems, + ); + $delivery_order->assign_attributes(%params) if %params; $delivery_order->save; return $delivery_order; } @@ -88,7 +152,7 @@ sub create_sales_order { my $save = delete $params{save} // 0; - my $customer = $params{customer} // SL::Dev::CustomerVendor::create_customer(name => 'Testcustomer')->save; + my $customer = $params{customer} // new_customer(name => 'Testcustomer')->save; die "illegal customer" unless ref($customer) eq 'SL::DB::Customer'; my $order = SL::DB::Order->new( @@ -96,12 +160,12 @@ sub create_sales_order { taxzone_id => delete $params{taxzone_id} // $customer->taxzone->id, currency_id => delete $params{currency_id} // $::instance_conf->get_currency_id, taxincluded => delete $params{taxincluded} // 0, - # employee_id => delete $params{employee_id} // SL::DB::Manager::Employee->current->id, - # salesman_id => delete $params{employee_id} // SL::DB::Manager::Employee->current->id, - transdate => delete $params{transdate} // DateTime->today_local->to_kivitendo, + employee_id => delete $params{employee_id} // SL::DB::Manager::Employee->current->id, + salesman_id => delete $params{employee_id} // SL::DB::Manager::Employee->current->id, + transdate => delete $params{transdate} // DateTime->today, orderitems => $orderitems, - %params ); + $order->assign_attributes(%params) if %params; if ( $save ) { $order->calculate_prices_and_taxes; @@ -119,7 +183,7 @@ sub create_purchase_order { my $save = delete $params{save} // 0; - my $vendor = $params{vendor} // SL::Dev::CustomerVendor::create_vendor(name => 'Testvendor')->save; + my $vendor = $params{vendor} // new_vendor(name => 'Testvendor')->save; die "illegal vendor" unless ref($vendor) eq 'SL::DB::Vendor'; my $order = SL::DB::Order->new( @@ -127,11 +191,11 @@ sub create_purchase_order { taxzone_id => delete $params{taxzone_id} // $vendor->taxzone->id, currency_id => delete $params{currency_id} // $::instance_conf->get_currency_id, taxincluded => delete $params{taxincluded} // 0, - transdate => delete $params{transdate} // DateTime->today_local->to_kivitendo, + transdate => delete $params{transdate} // DateTime->today, 'closed' => undef, orderitems => $orderitems, - %params ); + $order->assign_attributes(%params) if %params; if ( $save ) { $order->calculate_prices_and_taxes; # not tested for purchase orders @@ -192,20 +256,20 @@ sub _create_item { description => $part->description, unit => $part->unit, qty => $params{qty} || 5, - %params, ); + $item->assign_attributes(%params) if %params; return $item; } sub _create_two_items { my ($record_type) = @_; - my $part1 = SL::Dev::Part::create_part(description => 'Testpart 1', - sellprice => 12, - )->save; - my $part2 = SL::Dev::Part::create_part(description => 'Testpart 2', - sellprice => 10, - )->save; + my $part1 = new_part(description => 'Testpart 1', + sellprice => 12, + )->save; + my $part2 = new_part(description => 'Testpart 2', + sellprice => 10, + )->save; my $item1 = _create_item(record_type => $record_type, part => $part1, qty => 5); my $item2 = _create_item(record_type => $record_type, part => $part2, qty => 8); return [ $item1, $item2 ]; @@ -220,8 +284,8 @@ sub create_project { valid => 1, project_status_id => SL::DB::Manager::ProjectStatus->find_by(name => "running")->id, project_type_id => SL::DB::Manager::ProjectType->find_by(description => "Standard")->id, - %params, )->save; + $project->assign_attributes(%params) if %params; return $project; } @@ -250,10 +314,25 @@ Example with params: my $invoice2 = SL::Dev::Record::create_sales_invoice( invnumber => 777, - transdate => DateTime->today_local->subtract(days => 7), + transdate => DateTime->today->subtract(days => 7), taxincluded => 1, ); +=head2 C + +Create a credit note (sales). Use positive quantities when adding items. + +Example including creation of parts and of credit_note + my $part1 = SL::Dev::Part::create_part( partnumber => 'T4254')->save; + my $part2 = SL::Dev::Part::create_service(partnumber => 'Serv1')->save; + my $credit_note = SL::Dev::Record::create_credit_note( + invnumber => '34', + taxincluded => 0, + invoiceitems => [ SL::Dev::Record::create_invoice_item(part => $part1, qty => 3, sellprice => 70), + SL::Dev::Record::create_invoice_item(part => $part2, qty => 10, sellprice => 50), + ] + ); + =head2 C Examples: @@ -279,6 +358,15 @@ Example including creation of part and of sales order. ] ); +Example: create 100 orders with the same part for 100 new customers: + + my $part1 = SL::Dev::Part::create_part(partnumber => 'T6256')->save; + SL::Dev::Record::create_sales_order( + save => 1, + taxincluded => 0, + orderitems => [ SL::Dev::Record::create_order_item(part => $part1, qty => 1, sellprice => 9) ] + ) for 1 .. 100; + =head2 C See comments for C. @@ -296,7 +384,7 @@ Required params: record_type (sales_invoice, sales_order, sales_delivery_order) Example including creation of part and of invoice: my $part = SL::Dev::Part::create_part( partnumber => 'T4254')->save; - my $item = SL::Dev::Record::create_item(record_type => 'sales_invoice', part => $part, qty => 2.5); + my $item = SL::Dev::Record::create_invoice_item(part => $part, qty => 2.5); my $invoice = SL::Dev::Record::create_sales_invoice( taxincluded => 0, invoiceitems => [ $item ],