From 6c4f2e7d2ba67e2981e9e36e9ac072eaf88720ab Mon Sep 17 00:00:00 2001 From: Irina Peshinskaya Date: Fri, 9 May 2014 03:12:07 +0300 Subject: [PATCH] MT#5879 Web generation is working. For further testing and improvements. --- lib/NGCP/Panel/Controller/Invoice.pm | 26 +++++--- lib/NGCP/Panel/Form/Invoice/Generate.pm | 5 +- lib/NGCP/Panel/Model/DB/InvoiceTemplate.pm | 71 ++++++++++++---------- share/templates/invoice/list.tt | 2 +- 4 files changed, 62 insertions(+), 42 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Invoice.pm b/lib/NGCP/Panel/Controller/Invoice.pm index 7f3fbd9e65..009b31a0ed 100644 --- a/lib/NGCP/Panel/Controller/Invoice.pm +++ b/lib/NGCP/Panel/Controller/Invoice.pm @@ -222,7 +222,7 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) { my $parser = DateTime::Format::Strptime->new( #pattern => '%Y-%m-%d %H:%M', - pattern => '%Y-%m-%d', + pattern => '%Y-%m-%d %H:%M:%S', ); if($in->{start}) { $in->{stime} = $parser->parse_datetime($in->{start}); @@ -230,6 +230,7 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) { if($in->{end}) { $in->{etime} = $parser->parse_datetime($in->{end}); } + #$c->log->debug("stime=".$in->{stime}.";etime=".$in->{etime}.";"); $in->{provider_id} = $c->stash->{provider}->id; #$in->{client_contact_id} = $c->request->parameters->{client_contact_id}; #(undef,undef,@$in{qw/client_contact_id/}) = @_; @@ -262,14 +263,22 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) { item => $out->{invoice_data}, #item => $out->{invoice_data}, ); + use irka; + use Data::Dumper; + irka::loglong(Dumper($in)); my $in_validated = $validator->fif; if($posted){ - if($validator->validated) { + $c->log->debug("validated=".$validator->validated.";"); + if(1 || $validator->validated) { #copy/pasted from NGCP\Panel\Role\API\Customers.pm + use irka; + use Data::Dumper; + irka::loglong(Dumper($in)); + #$c->log->debug('getInvoice:contract_id='.Dumper($in).';'); my $client_contract = $backend->getContractInfo('contract_id' => $in->{client_contract_id}); - my $client_contact = $backend->getContactInfo('contact_id' => $client_contract->contact_id); + my $client_contact = $backend->getContactInfo('contact_id' => $client_contract->get_column('contact_id') ); my $provider_contract = $backend->getContractInfo('contract_id' => $c->stash->{provider}->contract_id); - my $provider_contact = $backend->getContactInfo('contact_id' => $provider_contract->id); + my $provider_contact = $backend->getContactInfo('contact_id' => $provider_contract->get_column('id')); my $contract_balance = $backend->getContractBalance($in); #$c->log->debug("customer->id="..";"); if(!$contract_balance){ @@ -284,14 +293,17 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) { $contract_balance = $backend->getContractBalance($in); } my $invoice; - if($contract_balance->invoice_id){ - $invoice = $backend->getInvoice('invoice_id' => $contract_balance->invoice_id); + if($contract_balance->get_column('invoice_id')){ + $invoice = $backend->getInvoice('invoice_id' => $contract_balance->get_column('invoice_id') ); + #$c->log->debug('getInvoice:invoice.id='.$invoice->get_column('id').';'); + $c->log->debug('getInvoice:invoice.id='.$contract_balance->get_column('invoice_id').';'); }else{ $invoice = $backend->createInvoice( 'contract_balance' => $contract_balance, stime => $in->{stime}, etime => $in->{etime}, ); + $c->log->debug('createInvoice:invoice.id='.$invoice->get_column('id').';'); } $c->forward('invoice_details_calls'); $c->forward('invoice_details_zones'); @@ -322,7 +334,7 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) { } $svg = $c->view('SVG')->getTemplateProcessed($c,\$svg, $stash ); NGCP::Panel::Utils::InvoiceTemplate::convertSvg2Pdf($c,\$svg,$in,$out); - $backend->storeInvoiceData($invoice,\$out->{tt_string_pdf}); + $backend->storeInvoiceData('invoice'=>$invoice,'data'=>\$out->{tt_string_pdf}); try { #$backend->storeInvoiceTemplateInfo(%$in_validated); $c->flash(messages => [{type => 'success', text => $c->loc( diff --git a/lib/NGCP/Panel/Form/Invoice/Generate.pm b/lib/NGCP/Panel/Form/Invoice/Generate.pm index 6b00fdfcd0..bd0f3b12f0 100644 --- a/lib/NGCP/Panel/Form/Invoice/Generate.pm +++ b/lib/NGCP/Panel/Form/Invoice/Generate.pm @@ -54,7 +54,8 @@ has_field 'save' => ( element_class => [qw/btn btn-primary/], do_label => 0, ); -has_field 'client_contact_id' => ( + +has_field 'client_contract_id' => ( type => 'Hidden', required => 1, ); @@ -62,7 +63,7 @@ has_field 'client_contact_id' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/start end/], + render_list => [qw/start end client_contract_id/], ); has_block 'actions' => ( diff --git a/lib/NGCP/Panel/Model/DB/InvoiceTemplate.pm b/lib/NGCP/Panel/Model/DB/InvoiceTemplate.pm index 9781dd6dcb..21d41a3c3e 100644 --- a/lib/NGCP/Panel/Model/DB/InvoiceTemplate.pm +++ b/lib/NGCP/Panel/Model/DB/InvoiceTemplate.pm @@ -225,7 +225,7 @@ sub getContractInfo{ my ($contract_id) = @params{qw/contract_id/}; return $self->schema->resultset('contracts')->search({ id => $contract_id, - }); + })->first; } sub getContactInfo{ my $self = shift; @@ -233,12 +233,12 @@ sub getContactInfo{ my ($contact_id) = @params{qw/contact_id/}; return $self->schema->resultset('contacts')->search({ id => $contact_id, - }); + })->first; } sub getBillingProfile{ my $self = shift; my (%params) = @_; - my ($client_contract_id, $stime, $etime) = @params{qw/client_contract_id start end/}; + my ($client_contract_id, $stime, $etime) = @params{qw/client_contract_id stime etime/}; #select distinct billing_profiles.* #from billing_mappings #inner join billing_profiles on billing_mappings.billing_profile_id=billing_profiles.id @@ -263,12 +263,12 @@ sub getBillingProfile{ ], },{ 'join' => [ { 'billing_mappings' => [ 'product', 'contract' ] } ], - }); + })->first; } sub getContractBalance{ my $self = shift; - my (%params) = @_; - my ($client_contact_id, $stime, $etime) = @params{qw/client_contact_id start end/}; + my ($params) = @_; + my ($client_contract_id, $stime, $etime) = @$params{qw/client_contract_id stime etime/}; #select distinct billing_profiles.* #from billing_mappings #inner join billing_profiles on billing_mappings.billing_profile_id=billing_profiles.id @@ -280,19 +280,17 @@ sub getContractBalance{ # and (billing_mappings.start_date <= ? OR billing_mappings.start_date IS NULL) # and (billing_mappings.end_date >= ? OR billing_mappings.end_date IS NULL) return $self->schema->resultset('contract_balances')->search({ - 'contract.contact_id' => $client_contact_id, + 'contract_id' => $client_contract_id, #'contract.status' => { '!=' => 'terminated' }, 'start' => [ - { '<=' => $etime->epoch }, + { '<=' => $etime->ymd }, { '-is' => undef }, ], 'end' => [ - { '>=' => $stime->epoch }, + { '>=' => $stime->ymd }, { '-is' => undef }, ], - },{ - 'join' => [ 'contract' ], - }); + },undef)->first; } sub getProviderInvoiceList{ @@ -349,37 +347,46 @@ sub createInvoice{ #my $invoice_id = $dbh->last_insert_id(undef,'billing','invoices','id'); #$dbh->do('update contract_balances set invoice_id = ? where contract_id=? and start=? and end=?', undef, $invoice_id,$contract_id, $stime->datetime, $etime->datetime ); #return $dbh->selectrow_hashref('select * from invoices where id=?',undef, $invoice_id); + my $invoice; + if( $contract_balance->get_column('invoice_id')){ + $invoice = $self->schema->resultset('invoices')->search({ + id => $contract_balance->get_column('invoice_id'), + })->first; + }else{ - - my $invoice_serial = $self->schema->resultset('invoices')->search(undef, { - 'select' => { 'max' => 'me.serial', '-as' => 'serial_max'}, - })->first->get_column('serial_max'); - $invoice_serial +=1; + my $invoice_serial = $self->schema->resultset('invoices')->search(undef, { + 'select' => { 'max' => 'me.serial', '-as' => 'serial_max'}, + })->first->get_column('serial_max'); + $invoice_serial +=1; - my $invoice_record = $self->schema->resultset('invoices')->create({ - year => $stime->year, - month => $stime->month, - serial => $invoice_serial, - data => $data, - }); - if($invoice_record){ - $self->schema->resultset('contract_balances')->search({ - id => $contract_balance->id, - })->update({ - invoice_id => $invoice_record->id() + my $invoice_record = $self->schema->resultset('invoices')->create({ + year => $stime->year, + month => $stime->month, + serial => $invoice_serial, + data => $data, }); + if($invoice_record){ + $self->schema->resultset('contract_balances')->search({ + id => $contract_balance->get_column('id'), + })->update({ + invoice_id => $invoice_record->id() + }); + $invoice = $self->schema->resultset('invoices')->search({ + id => $invoice_record->id(), + })->first; + } } - return $invoice_record; + return $invoice; } sub storeInvoiceData{ my $self = shift; my (%params) = @_; my ($invoice,$data_ref) = @params{qw/invoice data/}; $self->schema->resultset('invoices')->search({ - id => $invoice->id, + id => $invoice->get_column('id'), })->update({ - data => $invoice->data + data => $$data_ref }); } sub getInvoice{ @@ -388,7 +395,7 @@ sub getInvoice{ my ($invoice_id) = @params{qw/invoice_id/}; return $self->schema->resultset('invoices')->search({ 'id' => $invoice_id, - },undef ); + }, undef )->first; } sub getInvoiceProviderClients{ my $self = shift; diff --git a/share/templates/invoice/list.tt b/share/templates/invoice/list.tt index aa7f748009..d71b24ea89 100644 --- a/share/templates/invoice/list.tt +++ b/share/templates/invoice/list.tt @@ -85,7 +85,7 @@ function applyClientFilter(table,tr,contact_id){ { name => 'contracts.status', title => c.loc('Status'), search => 1 }, ]; helper.dt_buttons = [ - { name => c.loc('Generate invoice'), uri => 'javascript:void(0);', onclick => "fetch_into(\\'invoice_generate_form\\', \\'" _ c.uri_for_action('/invoice/invoice_generate', [ provider.id]) _ "\\',\\'item=invoice_generate&client_contract_id='+full.contract_id+'\\',function(){modalFormScript();});void(0);", class => 'btn-small btn-primary', icon => 'icon-star' }, + { name => c.loc('Generate invoice'), uri => 'javascript:void(0);', onclick => "fetch_into(\\'invoice_generate_form\\', \\'" _ c.uri_for_action('/invoice/invoice_generate', [ provider.id]) _ "\\',\\'item=invoice_generate&client_contract_id='+full.contracts_id+'\\',function(){modalFormScript();});void(0);", class => 'btn-small btn-primary', icon => 'icon-star' }, { name => c.loc('Filter invoices'), uri=>'javascript:void(0);', onclick => "applyClientFilter(\\'\\',\$(this).closest(\\'tr\\'),'+full.id+');", class => 'btn-small btn-primary', icon => 'icon-glass', tooltip => 'Click twice to clear client filter.' }, ]; helper.identifier = 'provider_client_list_ajax';