MT#5879 Generation from web: not tested yet.

ipeshinskaya/InvoiceTemplate5
Irina Peshinskaya 11 years ago committed by Victor Seva
parent c1d5983c71
commit d22ade4c4e

@ -153,7 +153,7 @@ sub invoice_details_calls :Chained('invoice_details_zones') :PathPart('') :Captu
$c->stash( invoice_details_calls_ajax => $invoice_details_calls_ajax );
}
sub invoice_list :Chained('invoice_details_calls') :PathPart('list') :Args(0) {
sub invoice_list :Chained('base') :PathPart('list') :Args(0) {
my ($self, $c) = @_;
my $backend = NGCP::Panel::Model::DB::InvoiceTemplate->new( schema => $c->model('DB') );
$c->log->debug('invoice_list');
@ -219,6 +219,7 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) {
#from parameters
$in = $c->request->parameters;
my $parser = DateTime::Format::Strptime->new(
#pattern => '%Y-%m-%d %H:%M',
pattern => '%Y-%m-%d',
@ -265,8 +266,10 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) {
if($posted){
if($validator->validated) {
#copy/pasted from NGCP\Panel\Role\API\Customers.pm
my $client_contract = $backend->getInvoiceClientContractInfo($in);
my $client_contact = $client_contract->contact;
my $client_contract = $backend->getContractInfo('contract_id' => $in->{client_contract_id});
my $client_contact = $backend->getContactInfo('contact_id' => $client_contract->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 $contract_balance = $backend->getContractBalance($in);
#$c->log->debug("customer->id="..";");
if(!$contract_balance){
@ -275,11 +278,51 @@ sub invoice_generate :Chained('base') :PathPart('generate') :Args(0) {
c => $c,
profile => $billing_profile,
contract => $client_contract,
stime => $in->{stime},
etime => $in->{etime},
);
$contract_balance = $backend->getContractBalance($in);
}
my $invoice;
if($contract_balance->invoice_id){
$invoice = $backend->getInvoice('invoice_id' => $contract_balance->invoice_id);
}else{
$invoice = $backend->createInvoice(
'contract_balance' => $contract_balance,
stime => $in->{stime},
etime => $in->{etime},
);
}
$c->forward('invoice_details_calls');
$c->forward('invoice_details_zones');
#additions for generations
$in = {
%$in,
no_fake_data => 1,
tt_type => 'svg',
tt_sourcestate => 'saved',
tt_id => $c->stash->{provider}->id,
};
$out = {
%$out,
tt_id => $c->stash->{provider}->id,
};
my $stash = {
provider => $provider_contact,
client => $client_contact,
invoice => $invoice,
invoice_details_zones => $c->stash->{invoice_details_zones},
invoice_details_calls => $c->stash->{invoice_details_calls},
};
my $svg = '';
$backend->getInvoiceTemplate( %$in, result => \$svg );#provider_id in i is enough
if(!$svg){
NGCP::Panel::Utils::InvoiceTemplate::getDefaultInvoiceTemplate( c => $c, type => 'svg', result => \$svg );
NGCP::Panel::Utils::InvoiceTemplate::preprocessInvoiceTemplateSvg( {no_fake_data => 1}, \$svg);
}
$svg = $c->view('SVG')->getTemplateProcessed($c,\$svg, $stash );
NGCP::Panel::Utils::InvoiceTemplate::convertSvg2Pdf($c,\$svg,$in,$out);
$backend->storeInvoiceData($invoice,\$out->{tt_string_pdf});
try {
#$backend->storeInvoiceTemplateInfo(%$in_validated);
$c->flash(messages => [{type => 'success', text => $c->loc(

@ -219,12 +219,20 @@ sub checkInvoiceTemplateProvider{
return 0;
}
sub getInvoiceClientContractInfo{
sub getContractInfo{
my $self = shift;
my (%params) = @_;
my ($client_contract_id) = @params{qw/client_contract_id/};
my ($contract_id) = @params{qw/contract_id/};
return $self->schema->resultset('contracts')->search({
id => $client_contract_id,
id => $contract_id,
});
}
sub getContactInfo{
my $self = shift;
my (%params) = @_;
my ($contact_id) = @params{qw/contact_id/};
return $self->schema->resultset('contacts')->search({
id => $contact_id,
});
}
sub getBillingProfile{
@ -286,6 +294,7 @@ sub getContractBalance{
'join' => [ 'contract' ],
});
}
sub getProviderInvoiceList{
my $self = shift;
my (%params) = @_;
@ -327,7 +336,52 @@ sub getProviderInvoiceListAjax{
#'alias' => 'me',
});
}
sub createInvoice{
my $self = shift;
my (%params) = @_;
my ($contract_balance,$data,$stime,$etime) = @params{qw/contract_balance data stime etime/};
# my($contract_id, $stime, $etime) = @_;
##my $invoice_serial = $dbh->selectrow_array('select max(invoices.serial) from invoices inner join contract_balances on invoices.id=contract_balances.invoice_id where contract_balances.contract_id=?',undef,$contract_id );
#my $invoice_serial = $dbh->selectrow_array('select max(invoices.serial) from invoices');
#$invoice_serial += 1;
#$dbh->do('insert into invoices(year,month,serial)values(?,?,?)', undef, $stime->year, $stime->month,$invoice_serial );
#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_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()
});
}
return $invoice_record;
}
sub storeInvoiceData{
my $self = shift;
my (%params) = @_;
my ($invoice,$data_ref) = @params{qw/invoice data/};
$self->schema->resultset('invoices')->search({
id => $invoice->id,
})->update({
data => $invoice->data
});
}
sub getInvoice{
my $self = shift;
my (%params) = @_;

@ -16,8 +16,8 @@ sub create_contract_balance {
# first, calculate start and end time of current billing profile
# (we assume billing interval of 1 month)
my $stime = NGCP::Panel::Utils::DateTime::current_local->truncate(to => 'month');
my $etime = $stime->clone->add(months => 1)->subtract(seconds => 1);
my $stime = $params{stime} || NGCP::Panel::Utils::DateTime::current_local->truncate(to => 'month');
my $etime = $params{etime} || $stime->clone->add(months => 1)->subtract(seconds => 1);
# calculate free_time/cash ratio
my ($cash_balance, $cash_balance_interval,

Loading…
Cancel
Save