Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 552

Přidáno uživatelem Jiří Sviták před téměř 15 roky(ů)

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.

Zobrazit rozdíly:

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 '&nbsp;';
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