Revize 552
Přidáno uživatelem Jiří Sviták před téměř 15 roky(ů)
freenetis/trunk/kohana/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'date and time' => 'Datum a čas',
|
||
'date and time of creation' => 'Datum a čas vytvoření',
|
||
'date from' => 'Datum od',
|
||
'date from (first day in month)' => 'Datum od (první den v měsíci)',
|
||
'date from must be smaller then date to' => 'Datum od musí být menší než datum do',
|
||
'date of foundation' => 'Datum založení',
|
||
'date of issue' => 'Datum vystavení',
|
||
'date to' => 'Datum do',
|
||
'date to (last day in month)' => 'Datum do (poslední den v měsíci)',
|
||
'date vat' => 'Datum uskutečnění zdanitelného plnění',
|
||
'day' => 'Den',
|
||
'day book' => 'Účetní deník',
|
||
... | ... | |
'export to xls' => 'Exportovat do XLS',
|
||
'export to csv (utf-8)' => 'Exportovat do CSV (utf-8)',
|
||
'export to csv (windows-1250)' => 'Exportovat do CSV (windows-1250)',
|
||
'fatal error' => 'Kritická chyba',
|
||
'fee' => 'Poplatek',
|
||
'fee has been successfully added' => 'Poplatek byl úspěšně uložen',
|
||
'fee has been successfully deleted' => 'Poplatek byl úspěšně smazán',
|
||
... | ... | |
'fee or penalty comment' => 'Komentář k poplatku/pokutě',
|
||
'fees' => 'Poplatky',
|
||
'fees have been successfully deducted' => 'Členské příspěvky byly úspěšně strženy.',
|
||
'fees have not been set!' => 'Členské příspěvky nebyly nastaveny!',
|
||
'file' => 'Soubor',
|
||
'file type' => 'Typ souboru',
|
||
'file with bank transfer listing' => 'Soubor s bankovním výpisem',
|
||
... | ... | |
'filter' => 'Filtrovat',
|
||
'finances' => 'Finance',
|
||
'first number mustn\'t be larger then second number' => 'První číslo nesmí být větší než druhé číslo',
|
||
'first or last day of month is not valid' => 'První nebo poslední den v měsíci není správně.',
|
||
'format' => 'Formát',
|
||
'former member' => 'Bývalý člen',
|
||
'frequence' => 'Frekvence',
|
||
... | ... | |
'the transfer successfully done' => 'Převod úspěšně dokončen',
|
||
'there are no items yet' => 'Neobsahuje žádné záznamy.',
|
||
'this account does not exist' => 'Tento účet neexistuje.',
|
||
'this month has been already deducted!' => 'Tento měsíc už byl stržen!',
|
||
'time' => 'čas',
|
||
'time deposits' => 'Termínované vklady',
|
||
'time deposits nr' => 'Počet termínovaných vkladů',
|
freenetis/trunk/kohana/application/models/member.php | ||
---|---|---|
}
|
||
}
|
||
return self::$db->query("SELECT
|
||
m.id, m.registration, m.name, s.street, ap.street_number, t.town, t.quarter, m.variable_symbol, a.id AS aid
|
||
m.id, m.registration, m.name,
|
||
s.street, ap.street_number, t.town, t.quarter,
|
||
m.variable_symbol, a.id AS aid, (q2.inbound - q2.outbound) AS balance
|
||
FROM members m
|
||
LEFT JOIN address_points ap ON m.address_point_id = ap.id
|
||
LEFT JOIN streets s ON ap.street_id = s.id
|
||
LEFT JOIN towns t ON ap.town_id = t.id
|
||
LEFT JOIN accounts a ON a.member_id = m.id AND m.id <> 1
|
||
LEFT JOIN
|
||
(
|
||
SELECT q1.id, q1.inbound, IFNULL(SUM(t.amount),0) AS outbound
|
||
FROM
|
||
(
|
||
SELECT a.id, IFNULL(SUM(t.amount),0) AS inbound
|
||
FROM accounts a
|
||
LEFT JOIN transfers t ON t.destination_id = a.id
|
||
GROUP BY a.id
|
||
) q1
|
||
LEFT JOIN transfers t ON t.origin_id = q1.id
|
||
GROUP BY q1.id
|
||
) q2 ON q2.id = a.id
|
||
$where
|
||
ORDER BY $order_by $order_by_direction
|
||
LIMIT $limit_from, $limit_results"
|
freenetis/trunk/kohana/application/models/account.php | ||
---|---|---|
}
|
||
|
||
/**
|
||
* Function gets accounts of all members. Used for member fee deduction (one transfer per month).
|
||
* @author Jiri Svitak
|
||
*/
|
||
public function get_accounts_to_deduct($date)
|
||
{
|
||
return self::$db->query("
|
||
SELECT a.id, m.entrance_date, m.leaving_date,
|
||
IF(e.value = 'Regular member' OR e.value = 'Former member', 1, 0) AS type,
|
||
IFNULL(miid, 0) AS miid
|
||
FROM accounts a
|
||
JOIN members m ON a.member_id = m.id
|
||
LEFT JOIN enum_types e ON e.id = m.type
|
||
LEFT JOIN
|
||
(
|
||
SELECT mi.id as miid, member_id
|
||
FROM membership_interrupts mi
|
||
WHERE mi.from <= '$date' AND mi.to > '$date'
|
||
) mi ON m.id = mi.member_id
|
||
WHERE m.id <> 1 AND a.account_attribute_id = ".Account_attribute_Model::$credit."
|
||
");
|
||
}
|
||
|
||
|
||
/**
|
||
* Function gets all members to deduct entrance fees.
|
||
* @author Jiri Svitak
|
||
* @return unknown_type
|
||
... | ... | |
WHERE a.account_attribute_id = ".Account_attribute_Model::$credit."
|
||
");
|
||
}
|
||
|
||
|
||
}
|
||
|
||
?>
|
freenetis/trunk/kohana/application/controllers/membership_interrupts.php | ||
---|---|---|
$this->form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
$this->form->group('')->label(url_lang::lang('texts.Basic data'));
|
||
$this->form->dropdown('member_id')->label(url_lang::lang('texts.Member').':')->options($arr_members)->rules('required');
|
||
$this->form->date('from')->label(url_lang::lang('texts.Date from').':')->years(date('Y')-10, date('Y')+10)->rules('required');
|
||
$this->form->date('to')->label(url_lang::lang('texts.Date to').':')->years(date('Y')-10, date('Y')+10)->rules('required')->callback(array($this, 'valid_interrupt_interval'));
|
||
$this->form->date('from')->label(url_lang::lang('texts.Date from (first day in month)').':')->years(date('Y')-10, date('Y')+10)->rules('required');
|
||
$this->form->date('to')->label(url_lang::lang('texts.Date to (last day in month)').':')->years(date('Y')-10, date('Y')+10)->rules('required')->callback(array($this, 'valid_interrupt_interval'));
|
||
$this->form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,250]|required');
|
||
$this->form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
special::required_forge_style($this->form, ' *', 'required');
|
||
... | ... | |
$this->form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
$this->form->group('')->label(url_lang::lang('texts.Basic data'));
|
||
$this->form->dropdown('member_id')->label(url_lang::lang('texts.Member').':')->options($arr_members)->rules('required')->selected($membership_interrupt->member_id);
|
||
$this->form->date('from')->label(url_lang::lang('texts.Date from').':')->years(date('Y')-10, date('Y')+10)->rules('required')->value(strtotime($membership_interrupt->from));
|
||
$this->form->date('to')->label(url_lang::lang('texts.Date to').':')->years(date('Y')-10, date('Y')+10)->rules('required')->callback(array($this, 'valid_interrupt_interval'))->value(strtotime($membership_interrupt->to));
|
||
$this->form->date('from')->label(url_lang::lang('texts.Date from (first day in month)').':')->years(date('Y')-10, date('Y')+10)->rules('required')->value(strtotime($membership_interrupt->from));
|
||
$this->form->date('to')->label(url_lang::lang('texts.Date to (last day in month)').':')->years(date('Y')-10, date('Y')+10)->rules('required')->callback(array($this, 'valid_interrupt_interval'))->value(strtotime($membership_interrupt->to));
|
||
$this->form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,250]|required')->value($membership_interrupt->comment);
|
||
$this->form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
special::required_forge_style($this->form, ' *', 'required');
|
||
... | ... | |
$from = $this->input->$method('from');
|
||
$to = $this->input->$method('to');
|
||
|
||
if ($from['day'] != 1 || $to['day'] < 28)
|
||
$input->add_error('required', url_lang::lang('texts.First or last day of month is not valid.'));
|
||
|
||
$from_date = date::round_month($from['day'],$from['month'],$from['year']);
|
||
$to_date = date::round_month($to['day'],$to['month'],$to['year']);
|
||
|
||
$diff = date::diff_month($to_date,$from_date);
|
||
if ($diff < 0)
|
||
{
|
||
$input->add_error('required', url_lang::lang('texts.date from must be smaller then date to').'.');
|
||
$input->add_error('required', url_lang::lang('texts.Date from must be smaller then date to').'.');
|
||
}
|
||
|
||
if ($diff < 1)
|
||
{
|
||
$input->add_error('required', url_lang::lang('texts.minimal duration of interrupt is one month').'.');
|
||
$input->add_error('required', url_lang::lang('texts.Minimal duration of interrupt is one month').'.');
|
||
}
|
||
|
||
$membership_interrupt_model = new Membership_interrupt_Model();
|
||
if ($membership_interrupt_model->check_overlaps($from_date,$to_date,$member_id,$this->membership_interrupt_id))
|
||
{
|
||
$input->add_error('required', url_lang::lang('texts.interval of interruption collides with another interruption of this member').'.');
|
||
$input->add_error('required', url_lang::lang('texts.Interval of interruption collides with another interruption of this member').'.');
|
||
}
|
||
}
|
||
}
|
freenetis/trunk/kohana/application/controllers/members.php | ||
---|---|---|
$grid->order_field('street')->label(url_lang::lang('texts.Street'));
|
||
$grid->order_field('street_number')->label(url_lang::lang('texts.Street number'));
|
||
$grid->order_field('town')->label(url_lang::lang('texts.Town'));
|
||
$grid->order_field('quarter')->label(url_lang::lang('texts.Quarter'));
|
||
//$grid->order_field('quarter')->label(url_lang::lang('texts.Quarter'));
|
||
$grid->order_field('balance')->label(url_lang::lang('texts.Balance'));
|
||
//$grid->order_field('comment')->label(url_lang::lang('texts.Comment'));
|
||
if ($this->acl_check_view(get_class($this), 'members'))
|
||
$grid->action_field('id') ->label(url_lang::lang('texts.Member')) ->url(url_lang::base().'members/show') ->action(url_lang::lang('texts.Show'));
|
freenetis/trunk/kohana/application/controllers/transfers.php | ||
---|---|---|
* @author Jiri Svitak
|
||
* @return unknown_type
|
||
*/
|
||
/*
|
||
function deduct_fees()
|
||
{
|
||
// access rights
|
||
... | ... | |
$db = new Database();
|
||
$db->query("START TRANSACTION;");
|
||
// it goes through all credit accounts and it creates their outbound transfers to operating account
|
||
|
||
// debugging
|
||
/*
|
||
$grid = new Grid(url_lang::base().'transfers/deduct_fees', null, array());
|
||
$first = true;
|
||
*/
|
||
foreach($credit_accounts as $ca)
|
||
{
|
||
// debugging
|
||
/*
|
||
foreach ($ca as $key => $value)
|
||
{
|
||
if ($first)
|
||
$grid->field($key)->label($key);
|
||
}
|
||
$first = false;
|
||
continue;
|
||
*/
|
||
|
||
if (empty($ca->transfer_id))
|
||
{
|
||
if ($ca->months == 0)
|
||
... | ... | |
continue;
|
||
$transfer = new Transfer_Model($ca->transfer_id);
|
||
}
|
||
|
||
$transfer->origin_id = $ca->id;
|
||
$transfer->destination_id = $operating->id;
|
||
$transfer->user_id = $this->session->get('user_id');
|
||
... | ... | |
if (!$transfer->save())
|
||
$save_successful = false;
|
||
}
|
||
|
||
// debugging
|
||
/*
|
||
$grid->datasource($credit_accounts);
|
||
echo $grid;
|
||
$this->profiler = new Profiler();
|
||
echo $this->profiler->render(true);
|
||
die();
|
||
*/
|
||
|
||
// end of transaction processing
|
||
if ($save_successful)
|
||
{
|
||
... | ... | |
$view->render(TRUE);
|
||
}
|
||
}
|
||
*/
|
||
|
||
function deduct_fees()
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_new('Accounts_Controller', 'transfers'))
|
||
Controller::error(ACCESS);
|
||
// content of dropdown for months
|
||
for ($i = 1; $i <= 12; $i++)
|
||
$arr_months[$i] = $i;
|
||
// content of dropdown for years
|
||
$year_from = date('Y') - 20;
|
||
for ($i = 1; $i <= 20; $i++)
|
||
$arr_years[$i] = $year_from + $i;
|
||
$form = new Forge(url_lang::base().'transfers/deduct_fees', '', 'POST', array('id' => 'article_form'));
|
||
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
$form->dropdown('year')->label(url_lang::lang('texts.Year').':')->rules('required')->options($arr_years)->selected(20);
|
||
$form->dropdown('month')->label(url_lang::lang('texts.Month').':')->rules('required')->options($arr_months)->selected(1);
|
||
$form->submit('submit')->value(url_lang::lang('texts.Deduct'));
|
||
special::required_forge_style($form, ' *', 'required');
|
||
// form validation
|
||
if ($form->validate())
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_new('Accounts_Controller', 'transfers'))
|
||
Controller::error(ACCESS);
|
||
$form_data = $form->as_array();
|
||
foreach($form_data as $key => $value)
|
||
{
|
||
$form_data[$key] = htmlspecialchars($value);
|
||
}
|
||
$date = date('Y-m-d', mktime(0, 0, 0, $form_data['month'], 15, $arr_years[$form_data['year']]));
|
||
$creation_datetime = date('Y-m-d H:i:s');
|
||
|
||
$fee_model = new Fee_Model();
|
||
$fee = $fee_model->get_by_date_type($date, 'regular member fee');
|
||
if ($fee->id)
|
||
$member_fee = $fee->fee;
|
||
else
|
||
throw new Kohana_User_Exception(url_lang::lang('texts.Fatal error'), url_lang::lang('texts.Fees have not been set!'));
|
||
// test if there exist already deduct transfer for given month
|
||
$transfer = ORM::factory('transfer')->
|
||
like(array('type' => Transfer_Model::$deduct_member_fee, 'datetime' => $date))->find_all();
|
||
if (count($transfer) > 0)
|
||
throw new Kohana_User_Exception(url_lang::lang('texts.Fatal error'), url_lang::lang('texts.This month has been already deducted!'));
|
||
|
||
$operating = ORM::factory('account')->
|
||
where('account_attribute_id', Account_attribute_Model::$operating)->find();
|
||
$text = url_lang::lang('texts.Deduction of member fee');
|
||
$account_model = new Account_Model();
|
||
$accounts = $account_model->get_accounts_to_deduct($date);
|
||
$save_successful = true;
|
||
foreach ($accounts as $account)
|
||
{
|
||
$transfer = new Transfer_Model();
|
||
$transfer->origin_id = $account->id;
|
||
$transfer->destination_id = $operating->id;
|
||
$transfer->user_id = $this->session->get('user_id');
|
||
$transfer->type = Transfer_Model::$deduct_member_fee;
|
||
$transfer->datetime = $date;
|
||
$transfer->creation_datetime = $creation_datetime;
|
||
$transfer->text = $text;
|
||
|
||
if ($account->leaving_date == '0000-00-00')
|
||
$leaving_date = '9999-99-99';
|
||
else
|
||
$leaving_date = $account->leaving_date;
|
||
if ($account->entrance_date <= $date && $leaving_date > $date && $account->miid == 0 && $account->type == 1)
|
||
$transfer->amount = $member_fee;
|
||
else
|
||
$transfer->amount = 0;
|
||
// money transfer is saved and checked
|
||
if (!$transfer->save())
|
||
$save_successful = false;
|
||
}
|
||
/*
|
||
echo '<table>';
|
||
foreach ($accounts as $account)
|
||
{
|
||
echo '<tr>';
|
||
foreach ($account as $item)
|
||
echo '<td>'.$item.'</td>';
|
||
echo '</tr>';
|
||
}
|
||
echo '</table>';
|
||
*/
|
||
if ($save_successful)
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.Fees have been successfully deducted.'));
|
||
}
|
||
else
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.Error - some fees have not been deducted.'));
|
||
}
|
||
url::redirect(url_lang::base().'transfers/show_all');
|
||
}
|
||
else
|
||
{
|
||
$headline = url_lang::lang('texts.Deduction of member fees');
|
||
$view = new View('main');
|
||
$view->title = $headline;
|
||
$view->content = new View('form');
|
||
$view->content->headline = $headline;
|
||
$view->content->form = $form->html();
|
||
$view->content->link_back = html::anchor(url_lang::base().'transfers/show_all',url_lang::lang('texts.Back to day book'));
|
||
$view->render(TRUE);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Function deducts entrance fees. This fee is deducted only one once to each member.
|
||
* It checks each member if his fee was deducted, and if it is not, then
|
freenetis/trunk/kohana/application/views/grid_template.php | ||
---|---|---|
// money format
|
||
if (trim($item->$field) == '')
|
||
echo ' ';
|
||
elseif ($field->name == 'balance')
|
||
echo number_format((float)$item->$field, 2, ',', ' ');
|
||
elseif ($field->name == 'amount')
|
||
//elseif ($field->name == 'balance')
|
||
// echo number_format((float)$item->$field, 2, ',', ' ');
|
||
elseif ($field->name == 'amount' || $field->name == 'balance')
|
||
{
|
||
if ($item->$field > 0)
|
||
echo '<span style="color:green">'.$item->$field.'</span>';
|
Také k dispozici: Unified diff
Zmenen system strhavani. Jeden mesic = jeden strhavaci prevod. Jednodussi manipulaci pro spravce penez. Zadne prepocitavani zpetne -> mensi riziko chyb. Nevyhoda je 12x vyssi pocet prevodu. Uprava preruseni clenstvi - lze jen od prvniho dne v mesici do posledniho dne v jinem nebo stejnem mesici. Ve vypisu clenu je i jejich stav kreditu.