Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 1310

Přidáno uživatelem Michal Kliment před téměř 13 roky(ů)

Opraveno chyba u strhavani vstupnich prispevku (byla pouzita konstanta pro clenske prispevky). Dopsana funkce pro prepocitani splatek zarizeni clena.

Zobrazit rozdíly:

freenetis/branches/testing/application/i18n/cs_CZ/texts.php
'are you really sure that you use correct username and password?' => 'Jste si opravdu jisti, že používate správné uživatelské jméno a heslo?',
'are you sure you want to deduct all entrance fees' => 'Jste si jistí, že chcete strhnout všechny vstupní příspěvky',
'are you sure you want to deduct all device repayments' => 'Jste si jistí, že chcete strhnout všechny splátky zařízení',
'are you sure you want to recount device repayments of this member' => 'Jste si jistí, že chcete přepočítat splátky zařízení tohoto člena',
'are you sure you want to recount fees of this member' => 'Jste si jistí, že chcete přepočítat členské příspěvky tohoto člena',
'are you sure you want to recount entrance fees of this member' => 'Jste si jistí, že chcete přepočítat vstupní příspěvky tohoto člena',
'area' => 'Oblast',
......
'device monitoring' => 'Monitoring zařízení',
'device name' => 'Název zařízení',
'device repayments' => 'Splátky zařízení',
'device repayments have been successfully recalculated, %d transfers deleted, %d new transfers created' => 'Splátky zařízení byly úspěšně přepočítány, smazáno %d převodů, vytvořeno %d nových převodů.',
'device still has at least one interface' => 'Zařízení má ještě nejméně jedno rozhraní.',
'device still has at least one port' => 'Zařízení má ještě nejméně jeden port.',
'device type' => 'Typ zařízení',
......
'received message' => 'Přijatá zpráva',
'receiver' => 'Příjemce',
'receiver type' => 'Typ příjemce',
'recount of device repayments' => 'Přepočítání splátek zařízení',
'recount of member fees' => 'Přepočítání členských příspěvků',
'recount of entrance fees' => 'Přepočítání vstupních příspěvků',
'redir' => 'Přesm',
freenetis/branches/testing/application/i18n/cs_CZ/help.php
'phone_invoice_user_unlock' => 'Odznačí fakturu jako vyplněnou, čímž Vám umožní její editaci.',
'price_tax' => 'Cena s DPH',
'project_subaccounts' => 'Projektový účet 221103 pro účetního představuje jeden účet. Zde jsou ovšem rozepsány všechny projektové podúčty z pohledu Freenetisu. Každý člen má právo vytvořit svůj projekt, který je v souladu se stanovami sdružení, může jít například o nějakou akci nebo školení. Cílem takovéhoto projektového podúčtu je, aby ostatní členové měli možnost zakladateli projektu přispět peníze ze svého kreditního účtu na realizaci projektu.',
'redirection_port_self_cancel' => 'Port brány pro zrušení samozrušitelného přesměrování IP adresy.',
'recalculate_account_balances' => 'Primárním zdrojem o stavu financí v systému jsou převody. Zůstatky na účtech byly dříve pokaždé počítány na požádání z převodů. Nyní si každý účet ukládá svůj zůstatek kvůli vyšší rychlosti. Tuto funkci použijete v případě přechodu na verzi systému, která tuto optimalizaci obsahuje.',
'recalculate_device_fees' => 'Pro primární strhávání splátek zařízení používejte funkci pro globální strhávání v účetním deníku. Tuto funkci používejte jen v případě, že došlo k nějakému omylu.',
'recalculate_fees' => 'Pro primární strhávání členských příspěvků používejte funkci pro globální strhávání členských příspěvků v Účetním deníku. Tuto funkci používejte opatrně a to jen v případě, že máte správně strženy všechny členské příspěvky pro všechny členy od založení sdružení až po současné datum. Pak můžete tomuto členovi přepočítat stržení členských příspěvků v případě, že u něj došlo k nutnosti je přepočítat, např. chybné datum vstupu, vznikla nutnost přidat přerušení členství apod.',
'recalculate_entrance_fees' => 'Pro primární strhávání vstupních příspěvků používejte funkci pro globální strhávání v účetním deníku. Tuto funkci používejte jen v případě, že došlo k nějakému omylu, například, že měl zaplatit vstupní a pak se ukázalo, že nemusel.',
'redirection_preview' => 'Náhled zobrazí stránku přesně tak, jak se zobrazí dané IP adrese. V případě více aktivovaných přesměrování najednou pro jednu IP adresu se zobrazí jen to, které se členovi zobrazí jako první.',
freenetis/branches/testing/application/helpers/money.php
<?php defined('SYSPATH') or die('No direct script access.');
/*
* This file is part of open source system FreeNetIS
* and it is released under GPLv3 licence.
*
* More info about licence can be found:
* http://www.gnu.org/licenses/gpl-3.0.html
*
* More info about project can be found:
* http://www.freenetis.org/
*
*/
/**
* Money helper.
*
* @author Michal Kliment
* @package Helper
*/
class Money
{
/**
* Finds all payments by given payment rate
*
* @author Michal Kliment
* @param array $payments
* @param integer $month
* @param integer $year
* @param integer $payment_left
* @param integer $payment_rate
*/
public static function find_debt_payments(
&$payments, $month, $year, $payment_left, $payment_rate)
{
while ($payment_left > 0)
{
if ($payment_left > $payment_rate)
$payment = $payment_rate;
else
$payment = $payment_left;
if (isset($payments[$year][$month]))
$payments[$year][$month] += $payment;
else
$payments[$year][$month] = $payment;
$month++;
if ($month > 12)
{
$year++;
$month = 1;
}
$payment_left -= $payment;
}
}
}
freenetis/branches/testing/application/models/account.php
return $transfers_count;
}
/**
* Function deletes device fee deducting transfers of given account.
*
* @author Jiri Svitak
* @param integer $account_id
* @return integer Count of deleted transfers
* @throws Exception On error
*/
public function delete_device_deduct_transfers_of_account($account_id)
{
$transfers_count = 0;
// validates account_id
if (!$account_id || !is_numeric($account_id))
return $transfers_count;
$transfers = ORM::factory('transfer')->where(array
(
'type' => Transfer_Model::DEDUCT_DEVICE_FEE,
'origin_id' => $account_id
))->find_all();
foreach ($transfers as $transfer)
{
$transfers_count++;
$transfer->delete_throwable();
}
// recalculate balance of current credit account
if (!$this->recalculate_account_balance_of_account($account_id))
{
throw new Exception();
}
// recalculate balance of operating account
$operating = ORM::factory('account')->where(array
(
'account_attribute_id' => Account_attribute_Model::OPERATING
))->find();
if (!$this->recalculate_account_balance_of_account($operating->id))
{
throw new Exception();
}
return $transfers_count;
}
/**
freenetis/branches/testing/application/controllers/transfers.php
help::hint('recalculate_entrance_fees')
);
}
if ($this->acl_check_edit('Accounts_Controller', 'transfers'))
{
$m = __('Are you sure you want to recount device repayments of this member');
$transfers_grid->add_new_button(
'transfers/recalculate_device_fees/' .
$account->id, __('Recount of device repayments'),
array('onclick' => 'return window.confirm(\'' . $m . '?\')'),
help::hint('recalculate_device_fees')
);
}
}
$transfers_grid->order_field('id')
->label('ID');
......
Transfer_Model::insert_transfer(
$ca->id, $infrastructure->id, null, null,
$this->session->get('user_id'),
Transfer_Model::DEDUCT_MEMBER_FEE, $date,
Transfer_Model::DEDUCT_ENTRANCE_FEE, $date,
$creation_datetime, __('Entrance fee'), $amount
);
$created_transfers_count++;
......
}
url::redirect('transfers/show_all');
}
/**
* Recalculates device repayments of member by given account
*
* @author Michal Kliment
* @param integer $account_id
*/
public function recalculate_device_fees($account_id = NULL)
{
// bad parameter
if (!$account_id || !is_numeric($account_id))
Controller::warning (PARAMETER);
// access rights
if (!$this->acl_check_new('Accounts_Controller', 'transfers'))
Controller::error(ACCESS);
$account = new Account_Model($account_id);
// record doesn't exist
if (!$account->id)
Controller::error (RECORD);
$operating = ORM::factory('account')->where(
'account_attribute_id', Account_attribute_Model::OPERATING
)->find();
$created_transfers_count = 0;
$current_date = date('Y-m-d');
$creation_datetime = date('Y-m-d H:i:s');
$payments = array();
$deleted_transfers_count = $account->delete_device_deduct_transfers_of_account($account->id);
// finds all member's devices with debt payments
$devices = ORM::factory('device')->get_member_devices_with_debt_payments($account->member_id);
$debt = 0;
// no device with debt payments
if (!count($devices))
{
status::success(
'Device repayments have been successfully recalculated, ' .
'%d transfers deleted, %d new transfers created.',
TRUE, array
(
1 => $deleted_transfers_count,
2 => $created_transfers_count
)
);
url::redirect('transfers/show_by_account/' . $account_id);
}
foreach ($devices as $device)
{
// finds buy date of this device
$buy_date = date_parse(date::get_middle_of_month($device->buy_date));
$debt += $device->price;
// finds all debt payments of this device
money::find_debt_payments(
$payments, $buy_date['month'], $buy_date['year'],
$device->price, $device->payment_rate
);
}
$year = min(array_keys($payments));
$month = min(array_keys($payments[$year]));
$date = date::create(15, $month, $year);
try
{
$account->transaction_start();
while ($debt > 0 && $date < $current_date)
{
if (isset($payments[$year][$month]))
{
$debt -= $payments[$year][$month];
// create new transfer
Transfer_Model::insert_transfer(
$account->id, $operating->id, null, null,
$this->session->get('user_id'),
Transfer_Model::DEDUCT_DEVICE_FEE, $date,
$creation_datetime, __('Device repayments'),
$payments[$year][$month]
);
$created_transfers_count++;
}
$month++;
if ($month == 13)
{
$month = 1;
$year++;
}
$date = date::create(15, $month, $year);
}
$account->transaction_commit();
status::success(
'Device repayments have been successfully recalculated, ' .
'%d transfers deleted, %d new transfers created.',
TRUE, array
(
1 => $deleted_transfers_count,
2 => $created_transfers_count
)
);
}
catch (Exception $e)
{
$account->transaction_rollback();
status::error('Error - cant recalculate device repayments.');
}
url::redirect('transfers/show_by_account/' . $account_id);
}
/**
* Function adds member fee payment by cash.
*

Také k dispozici: Unified diff