X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/0395c0364adb8fde7442c6b11ab064e406fd7776..b09bc3dee65b562db29f7884024af9720eb527e0:/SL/DB/Invoice.pm diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm index 08c580973..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 => { @@ -58,6 +61,8 @@ __PACKAGE__->meta->add_relationship( __PACKAGE__->meta->initialize; +__PACKAGE__->attr_html('notes'); + __PACKAGE__->before_save('_before_save_set_invnumber'); # hooks @@ -193,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}; @@ -360,6 +368,59 @@ 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) = @_; + + 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; + + return $html; +} + +>>>>>>> Test: Bank-Commit zusammengefasst 1; __END__