MT#5879 Save intermediate state with separation of invoice_template logic for further usage in admin and customer areas.

ipeshinskaya/InvoiceTemplate5
Irina Peshinskaya 12 years ago committed by Victor Seva
parent 7f6ce297b4
commit 6fdd7d43ab

@ -192,7 +192,7 @@ sub create :Chained('list_customer') :PathPart('create') :Args(0) {
sub base :Chained('list_customer') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $contract_id) = @_;
$c->log->debug('list_customer => base');
unless($contract_id && $contract_id->is_integer) {
NGCP::Panel::Utils::Message->error(
c => $c,
@ -268,13 +268,6 @@ sub base :Chained('list_customer') :PathPart('') :CaptureArgs(1) {
});
}
my $zonecalls_rs = NGCP::Panel::Utils::Contract::get_contract_calls_rs(
c => $c,
contract_id => $contract_id,
stime => $stime,
etime => $etime,
);
my $product_id = $contract_rs->first->get_column('product_id');
NGCP::Panel::Utils::Message->error(
c => $c,
@ -354,18 +347,6 @@ sub base :Chained('list_customer') :PathPart('') :CaptureArgs(1) {
$c->stash(template => 'customer/details.tt');
$c->stash(contract => $contract_first);
$c->stash(contract_rs => $contract_rs);
#FAKE FAKE FAKE FAKE
$zonecalls_rs = [$zonecalls_rs->all()];
my @array = @$zonecalls_rs;
##@array = (@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array);
$zonecalls_rs = [@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array];
##$zonecalls_rs = [ 1..100 ];
my $i = 1;
$zonecalls_rs = [map{[$i++,$_]}@$zonecalls_rs];
$c->stash(zonecalls_rs => $zonecalls_rs );
$c->stash(billing_mapping => $billing_mapping );
}
@ -542,7 +523,16 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
sub details :Chained('base') :PathPart('details') :Args(0) {
my ($self, $c) = @_;
return;
NGCP::Panel::Utils::Sounds::stash_soundset_list(c => $c, contract => $c->stash->{contract});
$c->stash->{contact_hash} = { $c->stash->{contract}->contact->get_inflated_columns };
if(defined $c->stash->{contract}->max_subscribers) {
$c->stash->{subscriber_count} = $c->stash->{contract}->voip_subscribers
->search({ status => { -not_in => ['terminated'] } })
->count;
}
#didn't find a way to make it correct with chain
$c->forward('invoice_data');
#$self->invoice_data($c);
}
sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
@ -822,39 +812,91 @@ sub edit_balance :Chained('base') :PathPart('balance/edit') :Args(0) {
$c->stash(edit_flag => 1);
}
sub calls :Chained('base') :PathPart('calls') :Args(0) {
sub invoice :Chained('base') :PathPart('invoice') :CaptureArgs(0) {
my ($self, $c) = @_;
$c->stash(template => 'customer/invoice.tt');
}
sub invoice_template_list :Chained('invoice') :PathPart('') :CaptureArgs(0) {
my ($self, $c) = @_;
my($validator,$backend,$in,$out);
#this is just copy-paste from method above
#of course we are chained and we can put in and out to stash
#input
$in->{contract_id} = $c->stash->{contract}->id;
if( ! $c->stash->{zonecalls_rs} ){
my $contract_id = $c->stash->{contract}->id;
my $stime = NGCP::Panel::Utils::DateTime::current_local()->truncate(to => 'month');
my $etime = $stime->clone->add(months => 1);
my $zonecalls_rs = NGCP::Panel::Utils::Contract::get_contract_calls_rs(
c => $c,
contract_id => $contract_id,
stime => $stime,
etime => $etime,
);
#my @array = $zonecalls_rs->all();
#s$zonecalls_rs = [@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array,@array];
#$c->stash(zonecalls_rs => $zonecalls_rs);
$c->stash(zonecalls_rs => [1..100] );
#output
$out={};
#input checking & simple preprocessing
$validator = NGCP::Panel::Form::Customer::InvoiceTemplate->new;
# $form->schema( $c->model('DB::InvoiceTemplate')->schema );
#to common form package ? removing is necessary due to FormHandler param presence evaluation - it is based on key presence, not on defined/not defined value
foreach ( keys %$in) { if(!( defined $in->{$_} )){ delete $in->{$_}; } };
#storage
#pass scheme here is ugly, and should be moved somehow to DB::Base
$backend = NGCP::Panel::Model::DB::InvoiceTemplate->new( schema => $c->model('DB') );
#really, we don't need a form here at all
#just use as already implemented fields checking and defaults applying
#$validator->setup_form(
$validator->process(
posted => 1,
params => $in,
);
#$validator->validate_form();
#multi return...
$c->log->debug("validated=".$validator->validated.";\n");
if(!$validator->validated){
return;
}
$c->stash(template => 'customer/calls.tt');
my $in_validated = $validator->fif;
#dirty hack 1
#really model logic should recieve validated input, but raw input also should be saved somewhere
$in = $in_validated;
#think about it more
#$out->{invoice_template_list} = $backend->getCustomerInvoiceTemplateList( %$in );
$c->stash(invoice_template_list => $backend->getCustomerInvoiceTemplateList( %$in ) );
}
sub invoice_data :Chained('invoice_template_list') :PathPart('') :CaptureArgs(0) {
my ($self, $c) = @_;
$c->log->debug('calls_list');
my $contract_id = $c->stash->{contract}->id;
my $stime = NGCP::Panel::Utils::DateTime::current_local()->truncate(to => 'month');
my $etime = $stime->clone->add(months => 1);
#look, NGCP::Panel::Utils::Contract - it is kind of backend separation here
my $zonecalls_rs = NGCP::Panel::Utils::Contract::get_contract_calls_rs(
c => $c,
contract_id => $contract_id,
stime => $stime,
etime => $etime,
);
#FAKE FAKE FAKE FAKE
$zonecalls_rs = [$zonecalls_rs->all()];
my $i = 1;
$zonecalls_rs = [map{[$i++,$_]} (@$zonecalls_rs) x 21];
$c->stash(zonecalls_rs => $zonecalls_rs );
}
sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
sub invoice_template :Chained('invoice_data') :PathPart('') :CaptureArgs(5) {
my ($self, $c) = @_;
#$c->log->debug($c->model('DB'));
#return;
#my $db = NGCP::Panel::Model::DB::InvoiceTemplate->new();
#$c->log->debug($db);
$c->log->debug('invoice_template');
#my $contract_id = $in->{contract_id} = ;
no warnings 'uninitialized';
#no warnings 'uninitialized';
my($validator,$backend,$in);
my($validator,$backend,$in,$out);
#input
(undef,undef,@$in{qw/tt_type tt_viewmode tt_sourcestate tt_output_type tt_id/}) = @_ ;
@ -862,7 +904,7 @@ sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
$in->{tt_string} = $c->request->body_parameters->{template} || '';
#output
my $out={};
$out={};
#input checking & simple preprocessing
$validator = NGCP::Panel::Form::Customer::InvoiceTemplate->new;
@ -874,7 +916,6 @@ sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
#pass scheme here is ugly, and should be moved somehow to DB::Base
$backend = NGCP::Panel::Model::DB::InvoiceTemplate->new( schema => $c->model('DB') );
#really, we don't need a form here at all
#just use as already implemented fields checking and defaults applying
#$validator->setup_form(
@ -890,10 +931,10 @@ sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
return;
}
my $in_validated = $validator->fif;
use irka;
use Data::Dumper;
irka::loglong(Dumper($in));
irka::loglong(Dumper($in_validated));
#use irka;
#use Data::Dumper;
#irka::loglong(Dumper($in));
#irka::loglong(Dumper($in_validated));
#dirty hack 1
#really model logic should recieve validated input, but raw input also should be saved somewhere
@ -901,6 +942,7 @@ sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
#dirty hack 2
#validate methods in form configuration don't change fields values, will find why later
#for other values see defaults in form
if($in->{tt_type} eq 'svgpdf'){
$in->{tt_type} = 'svg';
$in->{tt_output_type} = 'pdf';
@ -908,7 +950,7 @@ sub calls_svg :Chained('base') :PathPart('calls/template') :Args {
$in->{tt_output_type} = 'html';
}
irka::loglong(Dumper($in));
#irka::loglong(Dumper($in));
#model logic
my $tt_string_default = '';

@ -56,14 +56,14 @@ has_field 'tt_string' => (
);
has_field 'contract_id' => (
type => 'Text',
type => 'Number',
#default => \&
#apply => [ { check => \&validate_tt_string } ],
required => 1,
);
has_field 'tt_id' => (
type => 'Text',
type => 'Number',
#default => \&
#apply => [ { check => \&validate_tt_string } ],
required => 0,

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Loading…
Cancel
Save