X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/49f5b7f70599c029e87c494f559a6da5fde0d0c7..b09bc3dee65b562db29f7884024af9720eb527e0:/SL/DB/Invoice.pm diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm index 6af70994b..3ecc9575e 100644 --- a/SL/DB/Invoice.pm +++ b/SL/DB/Invoice.pm @@ -12,12 +12,15 @@ use Rose::DB::Object::Helpers (); use SL::DB::MetaSetup::Invoice; use SL::DB::Manager::Invoice; +use SL::DB::Helper::AttrHTML; use SL::DB::Helper::FlattenToForm; use SL::DB::Helper::LinkedRecords; use SL::DB::Helper::PriceTaxCalculator; use SL::DB::Helper::PriceUpdater; use SL::DB::Helper::TransNumberGenerator; use SL::Locale::String qw(t8); +use SL::DB::CustomVariable; +use SL::DB::AccTransaction; __PACKAGE__->meta->add_relationship( invoiceitems => { @@ -45,10 +48,21 @@ __PACKAGE__->meta->add_relationship( column_map => { id => 'trans_id' }, query_args => [ module => 'AR' ], }, + transactions => { + type => 'one to many', + class => 'SL::DB::AccTransaction', + column_map => { id => 'trans_id' }, + manager_args => { + with_objects => [ 'chart' ], + sort_by => 'acc_trans_id ASC', + }, + }, ); __PACKAGE__->meta->initialize; +__PACKAGE__->attr_html('notes'); + __PACKAGE__->before_save('_before_save_set_invnumber'); # hooks @@ -69,7 +83,7 @@ sub add_items { goto &add_invoiceitems; } sub items_sorted { my ($self) = @_; - return [ sort {$a->id <=> $b->id } @{ $self->items } ]; + return [ sort {$a->position <=> $b->position } @{ $self->items } ]; } sub is_sales { @@ -184,17 +198,20 @@ sub new_from { $item_parents{$source_item_id} ||= $source_item->$item_parent_column; my $item_parent = $item_parents{$source_item_id}; - - SL::DB::InvoiceItem->new(map({ ( $_ => $source_item->$_ ) } - qw(parts_id description qty sellprice discount project_id serialnumber pricegroup_id transdate cusordnumber unit - base_qty longdescription lastcost price_factor_id), @item_columns), - deliverydate => $source_item->reqdate, - fxsellprice => $source_item->sellprice, - custom_variables => \@custom_variables, - ordnumber => ref($item_parent) eq 'SL::DB::Order' ? $item_parent->ordnumber : $source_item->ordnumber, - donumber => ref($item_parent) eq 'SL::DB::DeliveryOrder' ? $item_parent->donumber : $source_item->can('donumber') ? $source_item->donumber : '', - ); - + my $current_invoice_item = + SL::DB::InvoiceItem->new(map({ ( $_ => $source_item->$_ ) } + qw(parts_id description qty sellprice discount project_id serialnumber pricegroup_id transdate cusordnumber unit + base_qty longdescription lastcost price_factor_id active_discount_source active_price_source), @item_columns), + deliverydate => $source_item->reqdate, + fxsellprice => $source_item->sellprice, + custom_variables => \@custom_variables, + ordnumber => ref($item_parent) eq 'SL::DB::Order' ? $item_parent->ordnumber : $source_item->ordnumber, + donumber => ref($item_parent) eq 'SL::DB::DeliveryOrder' ? $item_parent->donumber : $source_item->can('donumber') ? $source_item->donumber : '', + ); + + $current_invoice_item->{"converted_from_orderitems_id"} = $_->{id} if ref($item_parent) eq 'SL::DB::Order'; + $current_invoice_item->{"converted_from_delivery_order_items_id"} = $_->{id} if ref($item_parent) eq 'SL::DB::DeliveryOrder'; + $current_invoice_item; } @{ $items }; @items = grep { $_->qty * 1 } @items if $params{skip_items_zero_qty}; @@ -343,15 +360,67 @@ sub date { goto &transdate; } -sub transactions { +sub reqdate { + goto &duedate; +} + +sub customervendor { + goto &customer; +} + +sub pay_invoice { + my ($self, %params) = @_; + + #Mark invoice as paid + $self->paid($self->paid+$params{amount}); + $self->save; + + Common::check_params(\%params, qw(chart_id trans_id amount transdate)); + + #account of bank account or cash + my $account_bank = SL::DB::Manager::Chart->find_by(id => $params{chart_id}); + + #Search the contra account + my $acc_trans = SL::DB::Manager::AccTransaction->find_by(trans_id => $params{trans_id}, + or => [ chart_link => { like => "%:AR" }, + chart_link => { like => "AR:%" }, + chart_link => "AR" ]); + my $contra_account = SL::DB::Manager::Chart->find_by(id => $acc_trans->chart_id); + + #Two new transfers in acc_trans (for bank account and for contra account) + my $new_acc_trans = SL::DB::AccTransaction->new(trans_id => $params{trans_id}, + chart_id => $account_bank->id, + chart_link => $account_bank->link, + amount => (-1 * $params{amount}), + transdate => $params{transdate}, + source => $params{source}, + memo => '', + taxkey => 0, + tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id); + $new_acc_trans->save; + $new_acc_trans = SL::DB::AccTransaction->new(trans_id => $params{trans_id}, + chart_id => $contra_account->id, + chart_link => $contra_account->link, + amount => $params{amount}, + transdate => $params{transdate}, + source => $params{source}, + memo => '', + taxkey => 0, + tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id); + $new_acc_trans->save; +} + +sub link { my ($self) = @_; - return unless $self->id; + my $html; + $html = SL::Presenter->get->sales_invoice($self, display => 'inline') if $self->invoice; + $html = SL::Presenter->get->ar_transaction($self, display => 'inline') if !$self->invoice; - require SL::DB::AccTransaction; - SL::DB::Manager::AccTransaction->get_all(query => [ trans_id => $self->id ]); + return $html; } +>>>>>>> Test: Bank-Commit zusammengefasst 1; __END__