|
<?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|
*/
|
|
|
|
/**
|
|
* Phone_invoices_Controller managing phone invoices.
|
|
*
|
|
* @author Ondřej Fibich
|
|
*/
|
|
class Phone_invoices_Controller extends Controller_Application
|
|
{
|
|
|
|
/**
|
|
* Fuction checks access rights
|
|
* Return true if user with $login may view own $axo_section
|
|
* in this controller else return false
|
|
* @see Phone_invoices_Controller::user_field
|
|
*
|
|
* @param $axo_value object to view
|
|
* @param string $login
|
|
* @staticvar gacl $gacl_class
|
|
* @return boolean returns true if member has enough access rights
|
|
*/
|
|
private static function _acl_check_view($axo_value, $login)
|
|
{
|
|
static $gacl_class = NULL;
|
|
|
|
if ($gacl_class == NULL)
|
|
{
|
|
require_once(APPPATH.'vendors/phpgacl/gacl.class.php');
|
|
$gacl_class = new gacl();
|
|
}
|
|
|
|
return !empty($login) && $gacl_class->acl_check(
|
|
'freenetis', 'view_own', 'all',
|
|
$login, 'Phone_invoices_Controller', $axo_value
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Index of controller
|
|
* Redirects to show_all
|
|
*/
|
|
public function index()
|
|
{
|
|
url::redirect(url_lang::base() . 'phone_invoices/show_all');
|
|
}
|
|
|
|
/**
|
|
* Imports invoice and save it to the database.
|
|
* Tries to figured out which services was private and which was not.
|
|
*/
|
|
public function import()
|
|
{
|
|
if (! $this->acl_check_new('Phone_invoices_Controller', 'invoices'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
$form = new Forge(url::base().url::current(true), '', 'POST', array('id' => 'phone_invoices_form'));
|
|
$form->textarea('parse')->label(url_lang::lang('texts.Text to parse') . ':')->rules('required');
|
|
$form->checkbox('test_number_count_enabled')->checked(TRUE)->value('1')
|
|
->label(url_lang::lang('texts.Enable integrity test (all numbers in invoice has to be in extended statement)'));
|
|
$form->submit(url_lang::lang('texts.Parse'))->id('phone_invoices_sumit');
|
|
|
|
if ($form->validate())
|
|
{
|
|
try
|
|
{
|
|
$integrity_test = ($form->test_number_count_enabled->value == '1');
|
|
$data = Parser_Vodafone_Invoice::parse($form->parse->value, $integrity_test);
|
|
|
|
$phone_invoice = new Phone_invoice_Model();
|
|
$phone_invoice->date_of_issuance = $data->date_of_issuance->format('Y-m-d');
|
|
$phone_invoice->billing_period_from = $data->billing_period_from->format('Y-m-d');
|
|
$phone_invoice->billing_period_to = $data->billing_period_to->format('Y-m-d');
|
|
$phone_invoice->variable_symbol = $data->variable_symbol;
|
|
$phone_invoice->specific_symbol = $data->specific_symbol;
|
|
$phone_invoice->total_price = $data->total_price;
|
|
$phone_invoice->tax = $data->dph;
|
|
$phone_invoice->tax_rate = $data->dph_rate;
|
|
|
|
// search if invoice is already in database
|
|
$phone_invoice->is_unique();
|
|
if (!$phone_invoice->is_unique())
|
|
{
|
|
throw new Exception(url_lang::lang('texts.Invoice is already in database'));
|
|
}
|
|
|
|
self::_set_invoice_data($data, $phone_invoice);
|
|
|
|
// redirect to edit
|
|
url::redirect(url_lang::base() . '/phone_invoices/show/' . $phone_invoice->id . '/');
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$form->parse->add_error('requied', nl2br($e->getMessage()));
|
|
}
|
|
}
|
|
|
|
|
|
$view = new View('main');
|
|
$view->title = url_lang::lang('texts.Import invoice');
|
|
$view->content = new View('phone_invoices/main');
|
|
$view->content->content = new View('phone_invoices/import');
|
|
$view->content->content->form = $form->html();
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows all invoices.
|
|
* Enable delete invoice.
|
|
*/
|
|
public function show_all()
|
|
{
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'invoices'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
$phone_invoice_model = new Phone_invoice_Model();
|
|
|
|
$query = $phone_invoice_model->get_all_phone_invoices();
|
|
|
|
$grid = new Grid(url::base().url::current(true), null, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
|
|
$grid->field('id')->label(url_lang::lang('texts.ID'));
|
|
$grid->field('date_of_issuance')->label(url_lang::lang('texts.Date of issue'));
|
|
$grid->field('billing_period_from')->label(url_lang::lang('texts.Billing period from'));
|
|
$grid->field('billing_period_to')->label(url_lang::lang('texts.Billing period to'));
|
|
$grid->field('variable_symbol')->label(url_lang::lang('texts.Variable symbol'));
|
|
$grid->field('specific_symbol')->label(url_lang::lang('texts.Specific symbol'));
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price vat'))
|
|
->callback('callback::phone_price_field');
|
|
|
|
$grid->callback_field('edit')->label(url_lang::lang('texts.Edit'))
|
|
->callback('callback::phone_invoice_edit_field');
|
|
|
|
$grid->callback_field('delete')->label(url_lang::lang('texts.Delete'))
|
|
->callback('callback::phone_invoice_delete_field');
|
|
|
|
$grid->datasource($query);
|
|
|
|
$this->app_view->title = url_lang::lang('texts.Show all invoices');
|
|
$this->app_view->content = new View('phone_invoices/main');
|
|
$this->app_view->content->content = new View('phone_invoices/show_all');
|
|
$this->app_view->content->content->grid = $grid;
|
|
}
|
|
|
|
/**
|
|
* Displays detail of invoice and list of phone numbers on invoice
|
|
* Enable assign user to each detail
|
|
* @param integer $phone_invoice_id
|
|
* @param integer $phone_invoice_user_id
|
|
*/
|
|
public function show($phone_invoice_id = -1, $phone_invoice_user_id = -1)
|
|
{
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'details'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
$phone_invoice = new Phone_invoice_Model($phone_invoice_id);
|
|
|
|
if (!$phone_invoice_id || !$phone_invoice->id)
|
|
{
|
|
url::redirect(url_lang::base().'phone_invoices');
|
|
}
|
|
|
|
$form = NULL;
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'details'))
|
|
{
|
|
if (intval($phone_invoice_user_id) >= 0)
|
|
{
|
|
$phone_inv_user_model = new Phone_invoice_user_Model($phone_invoice_user_id);
|
|
$user = new User_Model();
|
|
$users = $user->get_all_user_names();
|
|
$users_data = array();
|
|
|
|
if (!$phone_inv_user_model->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
foreach ($users as $u)
|
|
{
|
|
$users_data[$u->id] = $u->username;
|
|
}
|
|
|
|
$form = new Forge(url::base().url::current(true), '', 'POST', array('id' => 'phone_invoices_form'));
|
|
$form->dropdown('user_id')->label(url_lang::lang('texts.Phone') .' '. $phone_inv_user_model->phone_number)
|
|
->options($users_data)->selected($phone_inv_user_model->user_id)->rules('required');
|
|
|
|
if ($form->validate())
|
|
{
|
|
$phone_inv_user_model->user_id = $form->user_id->value;
|
|
$phone_inv_user_model->save();
|
|
|
|
$this->session->set_flash('message', 'User has been assigned');
|
|
url::redirect(url_lang::base().'phone_invoices/show/'.$phone_invoice_id);
|
|
}
|
|
|
|
$form->submit(url_lang::lang('texts.Save'));
|
|
}
|
|
}
|
|
|
|
$grid = new Grid(url_lang::base().'phone_invoices/show', NULL, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
|
|
$phone_inv_user_model = new Phone_invoice_user_Model();
|
|
$query = $phone_inv_user_model->get_all_invoice_users($phone_invoice->id);
|
|
|
|
$grid->field('id')->label(url_lang::lang('texts.ID'));
|
|
$grid->field('phone_number')->label(url_lang::lang('texts.Phone number'));
|
|
$grid->callback_field('user')->label(url_lang::lang('texts.User'))
|
|
->callback('Phone_invoices_Controller::user_field');
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price out of tax'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->action_field('id')->label(url_lang::lang('texts.Show details'))
|
|
->url(url_lang::base().'phone_invoices/show_details')
|
|
->action(url_lang::lang('texts.Show'));
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'details') &&
|
|
$phone_invoice->locked == 0)
|
|
{
|
|
$grid->action_field('id')->label(url_lang::lang('texts.Assign user'))
|
|
->url(url_lang::base().'phone_invoices/show/'.$phone_invoice->id)
|
|
->action(url_lang::lang('texts.Assign'));
|
|
}
|
|
|
|
if ($this->acl_check_delete('Phone_invoices_Controller', 'details') &&
|
|
$phone_invoice->locked == 0)
|
|
{
|
|
$grid->action_field('id')->label(url_lang::lang('texts.Delete'))
|
|
->url(url_lang::base().'phone_invoices/delete_user_invoice')
|
|
->action(url_lang::lang('texts.Delete'))->class('a_delete');
|
|
}
|
|
|
|
$grid->datasource($query);
|
|
|
|
|
|
$view = new View('main');
|
|
$view->title = url_lang::lang('texts.Detail of invoice');
|
|
$view->content = new View('phone_invoices/main');
|
|
$view->content->content = new View('phone_invoices/show');
|
|
$view->content->content->phone_invoice = $phone_invoice;
|
|
$view->content->content->total_price = $phone_invoice->total_price + $phone_invoice->tax;
|
|
$view->content->content->grid = $grid;
|
|
|
|
if ($form != NULL)
|
|
{
|
|
$view->content->content->form = $form->html();
|
|
}
|
|
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Deletes invoice
|
|
* @param integer $phone_invoice_id
|
|
*/
|
|
public function delete($phone_invoice_id = 0)
|
|
{
|
|
if (! $this->acl_check_delete('Phone_invoices_Controller', 'invoices'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
if (intval($phone_invoice_id) <= 0)
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$phone_invoice = new Phone_invoice_Model($phone_invoice_id);
|
|
|
|
if (!$phone_invoice->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
$phone_invoice->delete();
|
|
$this->session->set_flash('message', url_lang::lang('texts.Phone invoice has been deleted'));
|
|
url::redirect(url_lang::base().'phone_invoices');
|
|
}
|
|
|
|
/**
|
|
* Deletes user phone invoice
|
|
* @param integer $phone_invoice_id
|
|
* @param integer $phone_user_invoice_id
|
|
*/
|
|
public function delete_user_invoice($phone_user_invoice_id)
|
|
{
|
|
if (! $this->acl_check_delete('Phone_invoices_Controller', 'details'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
if (intval($phone_user_invoice_id) <= 0)
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$phone_user_invoice = new Phone_invoice_user_Model($phone_user_invoice_id);
|
|
|
|
if (!$phone_user_invoice->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
$phone_invoice_id = $phone_user_invoice->phone_invoice_id;
|
|
$phone_user_invoice->delete();
|
|
$this->session->set_flash('message', url_lang::lang('texts.Users phone invoice has been deleted'));
|
|
url::redirect(url_lang::base().'phone_invoices/show/'.$phone_invoice_id);
|
|
}
|
|
|
|
/**
|
|
* (Un)Lock invoice for editing
|
|
* @param integer $phone_invoice_id
|
|
*/
|
|
public function lock_set($phone_invoice_id = 0)
|
|
{
|
|
if (! $this->acl_check_new('Phone_invoices_Controller', 'lock'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
if (intval($phone_invoice_id) <= 0)
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$phone_invoice = new Phone_invoice_Model($phone_invoice_id);
|
|
|
|
if (!$phone_invoice->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
$phone_invoice->locked = ! $phone_invoice->locked;
|
|
$phone_invoice->save();
|
|
$this->session->set_flash('message', url_lang::lang('texts.Phone invoice has been') . ' ' .
|
|
url_lang::lang('texts.'. (! $phone_invoice->locked ? 'un' : '') . 'locked'));
|
|
url::redirect(url_lang::base().'phone_invoices/show/'.$phone_invoice_id);
|
|
}
|
|
|
|
/**
|
|
* Sends warning to users which numbers are on invoice.
|
|
* @see Mail_messages_Model
|
|
* @param integer $phone_invoice_id
|
|
*/
|
|
public function post_mail_warning($phone_invoice_id)
|
|
{
|
|
if (! $this->acl_check_new('Phone_invoices_Controller', 'mail_warning'))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
if (intval($phone_invoice_id) <= 0)
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$phone_invoice_model = new Phone_invoice_Model($phone_invoice_id);
|
|
|
|
if (!$phone_invoice_model->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
$phone_invoice_user_model = new Phone_invoice_user_Model();
|
|
$phone_invoice_users = $phone_invoice_user_model->get_all_invoice_users($phone_invoice_model->id);
|
|
|
|
$mail_messsage_model = new Mail_message_Model();
|
|
|
|
foreach ($phone_invoice_users as $phone_invoice_user)
|
|
{
|
|
if ($phone_invoice_user->user_id == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$mail_messsage_model->from_id = $this->session->get('user_id');
|
|
$mail_messsage_model->to_id = $phone_invoice_user->user_id;
|
|
$mail_messsage_model->time = date('Y-m-d H:i:s');
|
|
$mail_messsage_model->from_deleted = 1;// user to can delete it
|
|
$mail_messsage_model->subject = mail_message::format(
|
|
'phone_invoice_warning_subject', array(
|
|
$phone_invoice_user->phone_number,
|
|
$phone_invoice_model->billing_period_from,
|
|
$phone_invoice_model->billing_period_to
|
|
));
|
|
$mail_messsage_model->body = mail_message::format(
|
|
'phone_invoice_warning', array(
|
|
$phone_invoice_user->phone_number,
|
|
url_lang::base() . 'phone_invoices/show_by_user/' . $phone_invoice_user->user_id
|
|
));
|
|
$mail_messsage_model->save();
|
|
$mail_messsage_model->clear();
|
|
}
|
|
|
|
$this->session->set_flash('message', url_lang::lang('texts.Users has been warned about invoice.'));
|
|
url::redirect(url_lang::base().'phone_invoices/show/'.$phone_invoice_id);
|
|
}
|
|
|
|
/**
|
|
* Displays users phone invoices
|
|
* @param integer $user_id
|
|
*/
|
|
public function show_by_user($user_id = 0)
|
|
{
|
|
if (!is_numeric($user_id) || $user_id <= 0)
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$user = new User_Model($user_id);
|
|
|
|
if (!$user->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'user_invoices', $user->member_id))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
$phone_inv_user_model = new Phone_invoice_user_Model();
|
|
$users_inv = $phone_inv_user_model->get_phone_invoices_of_user($user_id);
|
|
|
|
$grid = new Grid(url::base().url::current(true), null, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
|
|
$grid->field('id')->label(url_lang::lang('texts.ID'));
|
|
$grid->field('number')->label(url_lang::lang('texts.Number'));
|
|
$grid->field('billing_period_from')->label(url_lang::lang('texts.Billing period from'));
|
|
$grid->field('billing_period_to')->label(url_lang::lang('texts.Billing period to'));
|
|
$grid->callback_field('price_company')->label(url_lang::lang('texts.Company'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->callback_field('price_private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_price_field');
|
|
|
|
if ($this->acl_check_view('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
$grid->action_field('id')->label(url_lang::lang('texts.Show'))
|
|
->url(url_lang::base().'phone_invoices/show_details')->action(url_lang::lang('texts.Show'));
|
|
}
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
$grid->callback_field('edit')->label(url_lang::lang('texts.Edit'))
|
|
->callback('callback::phone_invoice_user_edit_field');
|
|
}
|
|
|
|
$grid->datasource($users_inv);
|
|
|
|
$view = new View('main');
|
|
$view->title = url_lang::lang('texts.Phone invoices of user');
|
|
$view->content = new View('phone_invoices/show_by_user');
|
|
$view->content->grid = $grid;
|
|
$view->content->total_prices = $phone_inv_user_model->get_total_prices($user_id);
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Show details of phone number on invoice.
|
|
* Show sum of price of each service.
|
|
* Show payment which has to be done by user.
|
|
* Show detail extract of services, enable to set or unset private services
|
|
* @param integer $phone_invoice_user_id
|
|
* @param string $detail_of
|
|
*/
|
|
public function show_details($phone_invoice_user_id = 0, $detail_of = 'calls')
|
|
{
|
|
$detail_of_arrgs = array(
|
|
'calls', 'fixed_calls', 'pays', 'connections', 'pays', 'vpn_calls',
|
|
'sms_messages', 'roaming_sms_messages'
|
|
);
|
|
|
|
$detail_of_arrgs_intelligent_search = array(
|
|
'calls', 'fixed_calls', 'sms_messages', 'roaming_sms_messages'
|
|
);
|
|
|
|
if (!$phone_invoice_user_id || !is_numeric($phone_invoice_user_id))
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
if (array_search($detail_of, $detail_of_arrgs) === false)
|
|
{
|
|
url::redirect(url_lang::base().'phone_invoices/show_details/'.$phone_invoice_user_id.'/calls');
|
|
}
|
|
|
|
$phone_inv_user_model = new Phone_invoice_user_Model($phone_invoice_user_id);
|
|
|
|
if (!$phone_inv_user_model->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
$user = new User_Model($phone_inv_user_model->user_id);
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'dumps') &&
|
|
! $this->acl_check_view('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
$phone_inv_model = new Phone_invoice_Model($phone_inv_user_model->phone_invoice_id);
|
|
|
|
$grid = new Grid(url_lang::base().'phone_invoices/show_details', NULL, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
|
|
$grid->field('id')->label(url_lang::lang('texts.ID'));
|
|
$grid->field('datetime')->label(url_lang::lang('texts.Date'));
|
|
|
|
$heading = null;
|
|
|
|
switch ($detail_of)
|
|
{
|
|
case 'calls':
|
|
$call = new Phone_call_Model();
|
|
|
|
$grid->callback_field('number')->label(url_lang::lang('texts.Called number'))
|
|
->callback('callback::phone_number_field');
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$call->set_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false)->callback('callback::phone_private_checkbox');
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->field('length')->label(url_lang::lang('texts.Length'));
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
|
|
$grid->datasource($call->get_calls_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.Calls');
|
|
break;
|
|
case 'fixed_calls':
|
|
$call = new Phone_fixed_call_Model();
|
|
|
|
$grid->callback_field('number')->label(url_lang::lang('texts.Called number'))
|
|
->callback('callback::phone_number_field');
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$call->set_fixed_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false)->callback('callback::phone_private_checkbox');
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->field('length')->label(url_lang::lang('texts.Length'));
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid->field('destiny')->label(url_lang::lang('texts.Destination'));
|
|
|
|
$grid->datasource($call->get_fixed_calls_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.Fixed calls');
|
|
break;
|
|
case 'vpn_calls':
|
|
$call = new Phone_vpn_call_Model();
|
|
|
|
$grid->callback_field('number')->label(url_lang::lang('texts.Called number'))
|
|
->callback('callback::phone_number_field');
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$call->set_vpn_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false)->callback('callback::phone_private_checkbox');
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->field('length')->label(url_lang::lang('texts.Length'));
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid->field('group')->label(url_lang::lang('texts.Group'));
|
|
|
|
$grid->datasource($call->get_vpn_calls_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.VPN calls');
|
|
break;
|
|
case 'sms_messages':
|
|
$sms = new Phone_sms_message_Model();
|
|
|
|
$grid->callback_field('number')->label(url_lang::lang('texts.Number'))
|
|
->callback('callback::phone_number_field');
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$sms->set_sms_mesages_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false)->callback('callback::phone_private_checkbox');
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid->field('description')->label(url_lang::lang('texts.Description'));
|
|
|
|
$grid->datasource($sms->get_sms_mesages_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.SMS messages');
|
|
break;
|
|
case 'roaming_sms_messages':
|
|
$sms = new Phone_roaming_sms_message_Model();
|
|
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->field('roaming_zone')->label(url_lang::lang('texts.Roaming zone'));
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$sms->set_roaming_sms_messages_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false);
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->datasource($sms->get_roaming_sms_messages_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.SMS messages');
|
|
break;
|
|
case 'pays':
|
|
$pay = new Phone_pay_Model();
|
|
|
|
$grid->callback_field('number')->label(url_lang::lang('texts.Number'))
|
|
->callback('callback::phone_number_field');
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid->field('description')->label(url_lang::lang('texts.Description'));
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$pay->set_pays_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false)->callback('callback::phone_private_checkbox');
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->datasource($pay->get_pays_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.Pays');
|
|
break;
|
|
case 'connections':
|
|
$conn = new Phone_connection_Model();
|
|
|
|
$grid->field('transfered')->label(url_lang::lang('texts.Transfered'));
|
|
$grid->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid->field('apn')->label(url_lang::lang('texts.APN'));
|
|
$grid->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
|
|
if ($this->acl_check_edit('Phone_invoices_Controller', 'dumps') ||
|
|
($phone_inv_model->locked == 0 &&
|
|
$this->acl_check_edit('Phone_invoices_Controller', 'dumps', $user->member_id)))
|
|
{
|
|
if ($_POST && count($_POST))
|
|
{
|
|
$conn->set_connections_private($phone_inv_user_model->id, @$_POST['private']);
|
|
}
|
|
|
|
$grid->form_field('private')->label(url_lang::lang('texts.Private'))
|
|
->type('checkbox')->order(false);
|
|
}
|
|
else
|
|
{
|
|
$grid->callback_field('private')->label(url_lang::lang('texts.Private'))
|
|
->callback('callback::phone_invoice_private_field_locked');
|
|
}
|
|
|
|
$grid->datasource($conn->get_connections_from($phone_inv_user_model->id));
|
|
|
|
$heading = url_lang::lang('texts.Connections');
|
|
break;
|
|
}
|
|
|
|
$prices = $phone_inv_user_model->get_prices();
|
|
|
|
$price_private = $prices->phone_calls_private +
|
|
$prices->phone_fixed_calls_private +
|
|
$prices->phone_vpn_calls_private +
|
|
$prices->phone_connections_private +
|
|
$prices->phone_sms_messages_private +
|
|
$prices->phone_roaming_sms_messages_private +
|
|
$prices->phone_pays_private;
|
|
|
|
$price_company = $prices->phone_calls_company +
|
|
$prices->phone_fixed_calls_company +
|
|
$prices->phone_vpn_calls_company +
|
|
$prices->phone_connections_company +
|
|
$prices->phone_sms_messages_company +
|
|
$prices->phone_roaming_sms_messages_company +
|
|
$prices->phone_pays_company;
|
|
|
|
$phone_invoice = new Phone_invoice_Model($phone_inv_user_model->phone_invoice_id);
|
|
$user = new User_Model($phone_inv_user_model->user_id);
|
|
$price = round($price_private + ($price_private * $phone_invoice->tax_rate / 100), 2);
|
|
|
|
$view = new View('main');
|
|
$view->title = url_lang::lang('texts.Detail of invoice');
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'dumps'))
|
|
{
|
|
$view->content = new View('phone_invoices/show_details');
|
|
$view->content->phone_invoice = $phone_inv_model;
|
|
$view->content->phone_invoice_user = $phone_inv_user_model;
|
|
$view->content->grid = $grid;
|
|
$view->content->heading = $heading;
|
|
$view->content->tax_rate = $phone_invoice->tax_rate;
|
|
$view->content->price = $price;
|
|
$view->content->prices = $prices;
|
|
$view->content->price_company = $price_company;
|
|
$view->content->price_private = $price_private;
|
|
$view->content->user = $user;
|
|
$view->content->detail_of = $detail_of;
|
|
$view->content->intelligent_select_on = array_search(
|
|
$detail_of, $detail_of_arrgs_intelligent_search
|
|
) !== false;
|
|
}
|
|
else
|
|
{
|
|
$view->content = new View('phone_invoices/main');
|
|
$view->content->content = new View('phone_invoices/show_details');
|
|
$view->content->content->phone_invoice = $phone_inv_model;
|
|
$view->content->content->phone_invoice_user = $phone_inv_user_model;
|
|
$view->content->content->grid = $grid;
|
|
$view->content->content->heading = $heading;
|
|
$view->content->content->tax_rate = $phone_invoice->tax_rate;
|
|
$view->content->content->price = $price;
|
|
$view->content->content->prices = $prices;
|
|
$view->content->content->price_company = $price_company;
|
|
$view->content->content->price_private = $price_private;
|
|
$view->content->content->user = $user;
|
|
$view->content->content->detail_of = $detail_of;
|
|
$view->content->content->intelligent_select_on = array_search(
|
|
$detail_of, $detail_of_arrgs_intelligent_search
|
|
) !== false;
|
|
}
|
|
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Show history between user and number.
|
|
* Shows SMS, Calls, Fixed calls
|
|
* @param integer $user_id
|
|
* @param string $number
|
|
* @param integer $phone_invoice_user_id
|
|
*/
|
|
public function show_history($user_id, $number, $phone_invoice_user_id)
|
|
{
|
|
if (!is_numeric($user_id) || empty($number) || !is_numeric($phone_invoice_user_id))
|
|
{
|
|
Controller::warning(PARAMETER);
|
|
}
|
|
|
|
$user = new User_Model($user_id);
|
|
$phone_invoice_user = new Phone_invoice_user_Model($phone_invoice_user_id);
|
|
|
|
if (!$user->id || !$phone_invoice_user->id)
|
|
{
|
|
Controller::error(RECORD);
|
|
}
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'dumps') &&
|
|
! $this->acl_check_view('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
Controller::error(ACCESS);
|
|
}
|
|
|
|
// models for quering data
|
|
$calls_model = new Phone_call_Model();
|
|
$fixed_calls_model = new Phone_fixed_call_Model();
|
|
$sms_model = new Phone_sms_message_Model();
|
|
|
|
// call grid
|
|
$grid_calls = new Grid(url_lang::base().'phone_invoices/show_history', NULL, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
$grid_calls->field('datetime')->label(url_lang::lang('texts.Date'));
|
|
$grid_calls->field('number')->label(url_lang::lang('texts.Called number'));
|
|
$grid_calls->field('length')->label(url_lang::lang('texts.Length'));
|
|
$grid_calls->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid_calls->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid_calls->datasource($calls_model->get_history($user_id, $number));
|
|
|
|
// fixed calls grid
|
|
$grid_fixed_calls = new Grid(url_lang::base().'phone_invoices/show_history', NULL, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
$grid_fixed_calls->field('datetime')->label(url_lang::lang('texts.Date'));
|
|
$grid_fixed_calls->field('number')->label(url_lang::lang('texts.Called number'));
|
|
$grid_fixed_calls->field('length')->label(url_lang::lang('texts.Length'));
|
|
$grid_fixed_calls->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid_fixed_calls->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid_fixed_calls->field('destiny')->label(url_lang::lang('texts.Destination'));
|
|
$grid_fixed_calls->datasource($fixed_calls_model->get_history($user_id, $number));
|
|
|
|
// sms messages grid
|
|
$grid_sms_messages = new Grid(url_lang::base().'phone_invoices/show_history', NULL, array(
|
|
'use_paginator' => false,
|
|
'use_selector' => false
|
|
));
|
|
$grid_sms_messages->field('datetime')->label(url_lang::lang('texts.Date'));
|
|
$grid_sms_messages->field('number')->label(url_lang::lang('texts.Called number'));
|
|
$grid_sms_messages->callback_field('price')->label(url_lang::lang('texts.Price'))
|
|
->callback('callback::phone_price_field');
|
|
$grid_sms_messages->callback_field('period')->label(url_lang::lang('texts.Period'))
|
|
->callback('callback::phone_period_field');
|
|
$grid_sms_messages->field('description')->label(url_lang::lang('texts.Description'));
|
|
$grid_sms_messages->datasource($sms_model->get_history($user_id, $number));
|
|
|
|
// views
|
|
$view = new View('main');
|
|
$view->title = url_lang::lang('texts.History of phone services between user and phone');
|
|
$view->content = new View('phone_invoices/show_history');
|
|
$view->content->number = $number;
|
|
$view->content->user = $user;
|
|
$view->content->grid_calls = $grid_calls;
|
|
$view->content->grid_fixed_calls = $grid_fixed_calls;
|
|
$view->content->grid_sms_messages = $grid_sms_messages;
|
|
$view->content->phone_invoice_user_id = $phone_invoice_user->id;
|
|
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Ajax intelligent handler.
|
|
* Output: - 0 if there is any error
|
|
* - list of ids on success (id,id,id,)
|
|
* @param integer $phone_invoice_user_id
|
|
* @param string $detail_of
|
|
*/
|
|
public function intelligent_select_ajax($phone_invoice_user_id, $detail_of)
|
|
{
|
|
|
|
$detail_of_arrgs = array(
|
|
'calls', 'fixed_calls', 'pays', 'connections', 'pays', 'vpn_calls',
|
|
'sms_messages', 'roaming_sms_messages'
|
|
);
|
|
|
|
if (!$phone_invoice_user_id || !is_numeric($phone_invoice_user_id))
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
if (array_search($detail_of, $detail_of_arrgs) === false)
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
$phone_inv_user_model = new Phone_invoice_user_Model($phone_invoice_user_id);
|
|
|
|
if (!$phone_inv_user_model->id)
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
$user = new User_Model($phone_inv_user_model->user_id);
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'dumps') &&
|
|
! $this->acl_check_view('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
$result = NULL;
|
|
|
|
switch ($detail_of)
|
|
{
|
|
case 'calls':
|
|
$model = new Phone_call_Model();
|
|
$result = $model->get_private_property_by_history($user->id, $phone_invoice_user_id);
|
|
break;
|
|
case 'fixed_calls':
|
|
$model = new Phone_fixed_call_Model();
|
|
$result = $model->get_private_property_by_history($user->id, $phone_invoice_user_id);
|
|
break;
|
|
case 'sms_messages':
|
|
$model = new Phone_sms_message_Model();
|
|
$result = $model->get_private_property_by_history($user->id, $phone_invoice_user_id);
|
|
break;
|
|
case 'roaming_sms_messages':
|
|
$model = new Phone_roaming_sms_message_Model();
|
|
$result = $model->get_private_property_by_history($user->id, $phone_invoice_user_id);
|
|
break;
|
|
default:
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
foreach ($result as $r)
|
|
{
|
|
if ($r->private == '1')
|
|
{
|
|
echo $r->id . ',';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ajax set handler
|
|
* Output: - 0 on any error
|
|
* - 1 on success
|
|
* @param integer $phone_invoice_user_id
|
|
* @param string $detail_of
|
|
*/
|
|
public function user_details_set_private_ajax($phone_invoice_user_id = 0, $detail_of = 'calls')
|
|
{
|
|
$detail_of_arrgs = array(
|
|
'calls', 'fixed_calls', 'pays', 'connections', 'pays', 'vpn_calls',
|
|
'sms_messages', 'roaming_sms_messages'
|
|
);
|
|
|
|
if (!$phone_invoice_user_id || !is_numeric($phone_invoice_user_id))
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
if (array_search($detail_of, $detail_of_arrgs) === false)
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
$phone_inv_user_model = new Phone_invoice_user_Model($phone_invoice_user_id);
|
|
|
|
if (!$phone_inv_user_model->id)
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
$user = new User_Model($phone_inv_user_model->user_id);
|
|
|
|
if (! $this->acl_check_view('Phone_invoices_Controller', 'dumps') &&
|
|
! $this->acl_check_view('Phone_invoices_Controller', 'dumps', $user->member_id))
|
|
{
|
|
echo '0';
|
|
return;
|
|
}
|
|
|
|
switch ($detail_of)
|
|
{
|
|
case 'calls':
|
|
$model = new Phone_call_Model();
|
|
$model->set_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
echo '1';
|
|
break;
|
|
case 'fixed_calls':
|
|
$model = new Phone_fixed_call_Model();
|
|
$model->set_fixed_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
echo '1';
|
|
break;
|
|
case 'vpn_calls':
|
|
$model = new Phone_vpn_call_Model();
|
|
$model->set_vpn_calls_private($phone_inv_user_model->id, @$_POST['private']);
|
|
echo '1';
|
|
break;
|
|
case 'sms_messages':
|
|
$model = new Phone_sms_message_Model();
|
|
$model->set_sms_mesages_private($phone_inv_user_model->id, @$_POST['private']);
|
|
echo '1';
|
|
break;
|
|
case 'roaming_sms_messages':
|
|
$model = new Phone_roaming_sms_message_Model();
|
|
$model->set_roaming_sms_messages_private($phone_inv_user_model->id, @$_POST['private']);
|
|
echo '1';
|
|
break;
|
|
default:
|
|
echo '0';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Callback for user fields in phone invoices.
|
|
* Need Phone_invoices_Controller to work.
|
|
* @see Phone_invoices_Controller::_acl_check_view
|
|
* @param unknown_type $item
|
|
* @param unknown_type $name
|
|
*/
|
|
protected static function user_field($item, $name)
|
|
{
|
|
if (!empty($item->name))
|
|
{
|
|
echo html::anchor(
|
|
url_lang::base().'users/show/'.$item->user_id .'/'.$item->id,
|
|
$item->name
|
|
);
|
|
// is user in telephonists group
|
|
$user_model = new User_Model($item->user_id);
|
|
if (!self::_acl_check_view('user_invoices', $user_model->login))
|
|
{
|
|
echo ' <b style="color: red;">(' . url_lang::lang('texts.Is not telephonists') . '!)</b>';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
echo '<span class="error">'.url_lang::lang('texts.Not assigned').'</span>';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add data from object Bill_Data to database
|
|
* @param Bill_Data $data Data
|
|
* @param Phone_invoice_Model $phone_invoice
|
|
*/
|
|
private function _set_invoice_data(Bill_Data &$data, Phone_invoice_Model &$phone_invoice)
|
|
{
|
|
$phone_invoice->save();
|
|
|
|
/* @var $services Services */
|
|
foreach ($data->bill_numbers as $services)
|
|
{
|
|
$phone_inv_user = new Phone_invoice_user_Model();
|
|
$phone_inv_user->user_id = strval(self::user_number_cache($services->number));
|
|
$phone_inv_user->phone_invoice_id = $phone_invoice->id;
|
|
$phone_inv_user->phone_number = $services->number;
|
|
$phone_inv_user->save();
|
|
|
|
/* @var $item Call_Service */
|
|
foreach ($services->calls as $item)
|
|
{
|
|
$model = new Phone_call_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->length = $item->length;
|
|
$model->number = $item->number;
|
|
$model->period = $item->period;
|
|
|
|
$ppcontact_id = ($phone_inv_user->user_id < 0) ? 0 :
|
|
Private_phone_contacts_Controller::private_contacts_cache(
|
|
$phone_inv_user->user_id, $item->number
|
|
);
|
|
|
|
$model->private = ($ppcontact_id <= 0) ? '0' : '1';
|
|
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item Fixed_Call_Service */
|
|
foreach ($services->fixed_calls as $item)
|
|
{
|
|
$model = new Phone_fixed_call_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->length = $item->length;
|
|
$model->number = $item->number;
|
|
$model->period = $item->period;
|
|
$model->destiny = $item->destiny;
|
|
|
|
$ppcontact_id = ($phone_inv_user->user_id < 0) ? :
|
|
Private_phone_contacts_Controller::private_contacts_cache(
|
|
$phone_inv_user->user_id, $item->number
|
|
);
|
|
|
|
$model->private = (($ppcontact_id <= 0) &&
|
|
(self::user_number_cache($model->number) != 0)) ? '0' : '1';
|
|
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item Vpn_Call_Service */
|
|
foreach ($services->vpn_calls as $item)
|
|
{
|
|
$model = new Phone_vpn_call_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->length = $item->length;
|
|
$model->number = $item->number;
|
|
$model->period = $item->period;
|
|
$model->group = $item->group;
|
|
// VPN calls are payed by org if its not in private numbers
|
|
|
|
$ppcontact_id = ($phone_inv_user->user_id < 0) ? 0 :
|
|
Private_phone_contacts_Controller::private_contacts_cache(
|
|
$phone_inv_user->user_id, $item->number
|
|
);
|
|
|
|
$model->private = ($ppcontact_id <= 0) ? '0' : '1';
|
|
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item Sms_Service */
|
|
foreach ($services->smss as $item)
|
|
{
|
|
$model = new Phone_sms_message_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->number = $item->number;
|
|
$model->period = $item->period;
|
|
$model->description = $item->description;
|
|
|
|
$ppcontact_id = ($phone_inv_user->user_id < 0) ? 0 :
|
|
Private_phone_contacts_Controller::private_contacts_cache(
|
|
$phone_inv_user->user_id, $item->number
|
|
);
|
|
|
|
$model->private = ($ppcontact_id <= 0) ? '0' : '1';
|
|
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item RoamingSms_Service */
|
|
foreach ($services->roaming_smss as $item)
|
|
{
|
|
$model = new Phone_roaming_sms_message_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->roaming_zone = $item->roaming_zone;
|
|
$model->private = '1';
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item Internet_Service */
|
|
foreach ($services->internet as $item)
|
|
{
|
|
$model = new Phone_connection_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->period = $item->period;
|
|
$model->apn = $item->apn;
|
|
$model->transfered = $item->transfered;
|
|
$model->private = '1';
|
|
$model->save();
|
|
}
|
|
|
|
/* @var $item Pay_Service */
|
|
foreach ($services->pays as $item)
|
|
{
|
|
$model = new Phone_pay_Model();
|
|
$model->phone_invoice_user_id = $phone_inv_user->id;
|
|
$model->datetime = $item->date_time->format('Y-m-d H:i:s');
|
|
$model->price = $item->price;
|
|
$model->number = $item->number;
|
|
$model->description = $item->description;
|
|
$model->private = '1';
|
|
|
|
$model->save();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Cache for connection between user and number
|
|
* @param string $number Phone number to find
|
|
* @return integer User ID or zero
|
|
*/
|
|
public static function user_number_cache($number)
|
|
{
|
|
static $user_number_cache = array ();
|
|
static $model = null;
|
|
|
|
if ($model == null)
|
|
{
|
|
$model = new Phone_invoice_user_Model();
|
|
}
|
|
|
|
if (! array_key_exists($number, $user_number_cache))
|
|
{
|
|
$user_number_cache[$number] = $model->get_user_id($number);
|
|
}
|
|
return $user_number_cache[$number];
|
|
}
|
|
|
|
}
|