Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 506

Přidáno uživatelem Jiří Sviták před asi 15 roky(ů)

Opravena chyba padu pri neexistujici adrese. Upraven filtr clenu, pokud je vysledkem hledani jediny clen, pak se primo zobrazi jeho profil. Rozdelana prace na strhavani clenskych prispevku - bude se resit vic databazove kvuli rychlosti.

Zobrazit rozdíly:

freenetis/trunk/kohana/application/i18n/cs_CZ/texts.php
'do you want to end membership of this member' => 'Chcete ukončit členství tohoto člena',
'do you want to restore membership of this member' => 'Chcete obnovit členství tohoto člena',
'documentation' => 'Dokumentace',
'domicile' => 'Bydliště',
'double entry account' => 'Podvojný účet',
'double-entry accounts' => 'Podvojné účty',
'due date' => 'Datum splatnosti',
freenetis/trunk/kohana/application/models/member.php
$where = '';
foreach($filter_values as $key => $value)
{
if ($key == 'street') $key = 's.street';
if ($key == 'town') $key = 't.town';
if ($key == 'name') $key = 'm.name';
if ($key == 'id') $key = 'm.id';
if ($key == 'comment') $key = 'm.comment';
if ($key == 'type' && $value == 0) continue;
if ($key != 'submit' && $key != 'redirect')
{
if ($where == '')
$where = 'WHERE ';
else
$where .= ' AND ';
$where .= $key.' LIKE \'%'.trim($value).'%\' COLLATE utf8_general_ci';
if ($key == 'street')
$where .= "s.street LIKE '%".trim($value)."%' COLLATE utf8_general_ci";
if ($key == 'town')
$where .= "t.town LIKE '%".trim($value)."%' COLLATE utf8_general_ci";
if ($key == 'name')
$where .= "m.name LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'comment')
$where .= "m.comment LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'type' && $value != 0)
$where .= "m.type = $value";
if ($key == 'id')
$where .= "m.id = ".trim($value);
}
if ($key == 'redirect' && $value == self::$redirected)
{
......
$where = '';
foreach($filter_values as $key => $value)
{
if ($key == 'street') $key = 's.street';
if ($key == 'town') $key = 't.town';
if ($key == 'name') $key = 'm.name';
if ($key == 'id') $key = 'm.id';
if ($key == 'comment') $key = 'm.comment';
if ($key == 'type' && $value == 0) continue;
if ($key != 'submit' && $key != 'redirect')
{
if ($where == '')
$where = 'WHERE ';
else
$where .= ' AND ';
$where .= $key.' LIKE \'%'.trim($value).'%\' COLLATE utf8_general_ci';
if ($key == 'street')
$where .= "s.street LIKE '%".trim($value)."%' COLLATE utf8_general_ci";
if ($key == 'town')
$where .= "t.town LIKE '%".trim($value)."%' COLLATE utf8_general_ci";
if ($key == 'name')
$where .= "m.name LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'comment')
$where .= "m.comment LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'type' && $value != 0)
$where .= "m.type = $value";
if ($key == 'id')
$where .= "m.id = ".trim($value);
}
if ($key == 'redirect' && $value == self::$redirected)
{
freenetis/trunk/kohana/application/models/account.php
* Function gets credit accounts of regular members.
* @return unknown_type
*/
public function get_accounts_of_regular_members($start_date, $finish_date)
// old
/*
public function get_accounts_of_regular_members()
{
/// @todo not finished yet...
die();
return self::$db->query("SELECT a.id, a.member_id
FROM accounts a
JOIN members m ON a.member_id = m.id
......
");
}
*/
/**
* Function gets credit accounts of regular members.
* @return unknown_type
*/
public function get_accounts_of_regular_members($start_date, $finish_date)
{
/*
return self::$db->query("
SELECT q3.id, q3.member_id, q3.entrance_date, q3.leaving_date, q3.days1, q3.days2, q3.days3, m.mi_days, m.mi_days % 30 as mim,
MONTH(ADDDATE('$start_date', INTERVAL (q3.days3 - IF(DAY(ADDDATE('$start_date', m.mi_days)) > 15, m.mi_days + (30 - (m.mi_days % 30)), m.mi_days - (m.mi_days % 30)) - 15) DAY)) AS months
FROM
(
SELECT q2.id, q2.member_id, q2.entrance_date, q2.leaving_date, q2.finish_date, q2.days1, q2.days2,
IF(q2.finish_date < q2.leaving_date, q2.days2, q2.days2 - DATEDIFF(q2.finish_date, q2.leaving_date)) AS days3
FROM
(
SELECT q1.id, q1.member_id, q1.entrance_date, q1.leaving_date, q1.finish_date, q1.days1,
IF(q1.entrance_date <= '$start_date', q1.days1, q1.days1 - DATEDIFF(q1.entrance_date, '$start_date')) AS days2
FROM
(
SELECT a.id, a.member_id, m.entrance_date,
IF(m.leaving_date IS NULL OR m.leaving_date = '0000-00-00', '9999-01-01', m.leaving_date) AS leaving_date,
DATEDIFF(ADDDATE('$finish_date', INTERVAL 1 MONTH), '$start_date') AS days1,
SUBDATE(ADDDATE('$finish_date', INTERVAL 1 MONTH), INTERVAL 1 DAY) AS finish_date
FROM accounts a
JOIN members m ON a.member_id = m.id
JOIN enum_types e ON m.type = e.id
WHERE a.account_attribute_id = ".Account_attribute_Model::$credit."
AND (e.value = 'Regular member' OR e.value = 'Former member')
) q1
) q2
) q3
LEFT JOIN
(
SELECT m.id,
SUM(IF(mi.to IS NULL OR mi.from IS NULL, 0,
DATEDIFF(
IF(mi.to < SUBDATE(ADDDATE('$finish_date', INTERVAL 1 MONTH), INTERVAL 1 DAY), mi.to, SUBDATE(ADDDATE('$finish_date', INTERVAL 1 MONTH), INTERVAL 1 DAY)),
IF('$start_date' < mi.from, mi.from, '$start_date')
)
)) AS mi_days
FROM members m
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
GROUP BY m.id
) m ON q3.member_id = m.id
");
*/
return self::$db->query("
SELECT q4.id, q4.member_id, q4.entrance_date, q4.leaving_date, q4.days1, q4.days2, q4.days3, q4.mi_days,
ADDDATE('$start_date', q4.days1 - 1) AS d1, ADDDATE('$start_date', q4.days2 - 1) AS d2, ADDDATE('$start_date', q4.days3 - 1) AS d3,
MONTH(ADDDATE('$start_date', q4.days3 - q4.mi_days)) AS months
FROM
(
SELECT q3.id, q3.member_id, q3.entrance_date, q3.leaving_date, q3.days1, q3.days2, q3.days3,
SUM(IF(mi.to IS NULL OR mi.from IS NULL, 0,
DATEDIFF(
IF(
IF(DAY(mi.to) > 15, SUBDATE(ADDDATE(mi.to, INTERVAL 1 MONTH), 1), SUBDATE(mi.to, DAY(mi.to) - 1)) <= q3.finish_date,
IF(DAY(mi.to) > 15, SUBDATE(ADDDATE(mi.to, INTERVAL 1 MONTH), 1), SUBDATE(mi.to, DAY(mi.to) - 1)),
q3.finish_date
),
IF(
'$start_date' <= IF(DAY(mi.from) > 15, SUBDATE(ADDDATE(mi.from, INTERVAL 1 MONTH), 1), SUBDATE(mi.from, DAY(mi.from) - 1)),
IF(DAY(mi.from) > 15, SUBDATE(ADDDATE(mi.from, INTERVAL 1 MONTH), 1), SUBDATE(mi.from, DAY(mi.from) - 1)),
'$start_date'
)
)
)) AS mi_days
FROM
(
SELECT q2.id, q2.member_id, q2.entrance_date, q2.leaving_date, q2.finish_date, q2.days1, q2.days2,
IF(q2.finish_date <= q2.leaving_date, q2.days2, q2.days2 - DATEDIFF(q2.finish_date, q2.leaving_date)) AS days3
FROM
(
SELECT q1.id, q1.member_id, q1.entrance_date, q1.leaving_date, q1.finish_date, q1.days1,
IF(q1.entrance_date <= '$start_date', q1.days1, q1.days1 - DATEDIFF(q1.entrance_date, '$start_date')) AS days2
FROM
(
SELECT a.id, a.member_id,
IF(DAY(m.entrance_date) > 15, SUBDATE(ADDDATE(m.entrance_date, INTERVAL 1 MONTH), DAY(m.entrance_date) - 1), SUBDATE(m.entrance_date, DAY(m.entrance_date) - 1)) AS entrance_date,
IF(m.leaving_date IS NULL OR m.leaving_date = '0000-00-00', '9999-01-01',
IF(DAY(m.leaving_date) > 15, SUBDATE(ADDDATE(m.leaving_date, INTERVAL 1 MONTH), DAY(m.leaving_date) - 1), SUBDATE(m.leaving_date, DAY(m.leaving_date) - 1))
) AS leaving_date,
DATEDIFF(SUBDATE(ADDDATE('$finish_date', INTERVAL 1 MONTH), 1), '$start_date') + 1 AS days1,
SUBDATE(ADDDATE('$finish_date', INTERVAL 1 MONTH), 1) AS finish_date
FROM accounts a
JOIN members m ON a.member_id = m.id
JOIN enum_types e ON m.type = e.id
WHERE a.account_attribute_id = ".Account_attribute_Model::$credit."
AND (e.value = 'Regular member' OR e.value = 'Former member')
) q1
) q2
) q3
LEFT JOIN membership_interrupts mi ON q3.member_id = mi.member_id
GROUP BY q3.member_id
) q4
");
}
}
?>
freenetis/trunk/kohana/application/models/transfer.php
$where = '';
foreach($filter_values as $key => $value)
{
if ($key != 'submit')
{
$where .= ' AND '.$key.' LIKE \'%'.$value.'%\' COLLATE utf8_general_ci';
}
$where .= ' AND ';
if ($key == 'name')
$where .= "a.name LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'text')
$where .= "t.text LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'datetime')
$where .= "t.datetime LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'amount')
$where .= "t.amount LIKE '%".$value."%' COLLATE utf8_general_ci";
}
if ($order_by == 'amount')
$order_by = 'IF( t.destination_id = '.$account_id.', amount, amount*-1 )';
......
WHERE t.origin_id = $account_id OR t.destination_id = $account_id
$where
ORDER BY $order_by $order_by_direction
LIMIT $limit_from, $limit_results"
sLIMIT $limit_from, $limit_results"
);
}
......
$where = '';
foreach($filter_values as $key => $value)
{
if ($key != 'submit')
{
$where .= ' AND '.$key.' LIKE \'%'.$value.'%\' COLLATE utf8_general_ci';
}
$where .= ' AND ';
if ($key == 'name')
$where .= "a.name LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'text')
$where .= "t.text LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'datetime')
$where .= "t.datetime LIKE '%".$value."%' COLLATE utf8_general_ci";
if ($key == 'amount')
$where .= "t.amount LIKE '%".$value."%' COLLATE utf8_general_ci";
}
return self::$db->query("SELECT COUNT(*) AS total
FROM transfers t
freenetis/trunk/kohana/application/controllers/members.php
$sql_offset = 0;
$query = $model_members->get_all_members($sql_offset, (int)$limit_results, $order_by, $order_by_direction, $filter->values());
if ($total_members == 1)
$this->show($query->current()->id);
// it creates grid to view all members
$headline = url_lang::lang('texts.List of all members');
$grid = new Grid(url_lang::base().'members', $headline, array(
......
// address point
$address_point = new Address_point_Model($member_data->address_point_id);
$address = (($address_point->street_id === null) ? '' : $address_point->street->street.' ').$address_point->street_number;
$town = ($address_point->town_id === null) ? '' : $address_point->town->town.' '.$address_point->town->quarter;
$zip = ($address_point->town_id === null) ? '' : $address_point->town->zip_code;
// member type string
$model_translation = new Translation_Model();
......
$view->content->member_data = $member_data;
$view->content->member_type = $member_type;
$view->content->former = $former_member;
$view->content->address_point = $address_point;
$view->content->address = $address;
$view->content->town = $town;
$view->content->zip = $zip;
$view->content->contact_types = $arr_contact_types;
$view->content->contacts = $contacts;
$view->content->message = $this->session->get_once('message');
freenetis/trunk/kohana/application/controllers/transfers.php
}
/**
* Function deducts member fees. This version creates one transfer per month.
* This version is still buggy and uncomplete
* Function deducts member fees. This version creates one deducting transfer per year and its value
* can be recalculated (for example every month).
* Functional and debugged version.
* @author Jiri Svitak
* @return unknown_type
*/
/*
function deduct_fees()
{
// access rights
......
$year_from = date('Y') - 20;
for ($i = 1; $i <= 20; $i++)
$arr_years[$i] = $year_from + $i;
// prefilled member fee
$fee_model = new Fee_Model();
$fee = $fee_model->get_by_date_type(date('Y-m-d'), 'regular member fee');
if ($fee->id)
$member_fee = $fee->fee;
else
$member_fee = 0;
$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 from').':')->rules('required')->options($arr_months)->selected(1);
$form->dropdown('months')->label(url_lang::lang('texts.Number of months').':')->rules('required')->options($arr_months)->selected(1)->callback(array($this, 'valid_months'));
$form->input('fee')->label(url_lang::lang('texts.Monthly member fee').':')->rules('required|valid_numeric');
$form->input('text')->label(url_lang::lang('texts.Text').':')->value(url_lang::lang('texts.Member fee deduction'));
$form->input('fee')->label(url_lang::lang('texts.Monthly member fee').':')->rules('required|valid_numeric')->value($member_fee);
$form->input('text')->label(url_lang::lang('texts.Text').':')->value(url_lang::lang('texts.Deduction of member fee'));
$form->submit('submit')->value(url_lang::lang('texts.Deduct'));
special::required_forge_style($form, ' *', 'required');
// form validation
......
{
$form_data[$key] = htmlspecialchars($value);
}
// all transfer should have the same time of creation
$year = $arr_years[$form_data['year']];
// all transfers should have the same date and time of creation
$creation_datetime = date('Y-m-d H:i:s');
$transfer_model = new Transfer_Model;
// and all transfers should have the same date of deduct start
$start_date = date('Y-m-d', mktime(0, 0, 0, $form_data['month'], 1, $year));
$finish_date = date('Y-m-d', mktime(0, 0, 0, $form_data['months'], 1, $year));
// database models
$transfer = new Transfer_Model();
$account_model = new Account_Model();
// it gets ids and member ids of all credit accounts
//$account_model = new Account_Model();
//$credit_accounts = $account_model->get_accounts_of_regular_members();
$credit_accounts = ORM::factory('account')->find_all_by_account_attribute_id(Account_attribute_Model::$credit);
$credit_accounts = $account_model->get_accounts_of_regular_members($start_date, $finish_date);
// it gets id of operating account, the only destination account
$operating = ORM::factory('account')->find_by_account_attribute_id(Account_attribute_Model::$operating);
$operating = ORM::factory('account')->
where('account_attribute_id', Account_attribute_Model::$operating)->find();
// it supposes that everything will be ok, if a transfer couldn't be created, it sets to false
$save_successful = true;
// it is suppossed that thousands of transfers will be generated, transaction processing required
$save_successful = true;
$db = new Database();
$db->query("BEGIN;");
//$db = new Database();
//$db->query("BEGIN;");
// it goes through all credit accounts and it creates their outbound transfers to operating account
$this->profiler = new Profiler();
echo $this->profiler->render(true);
echo '<table rules="all">';
foreach($credit_accounts as $ca)
{
// it goes through months of interval
for ($i = $form_data['month']; $i <= $form_data['months']; $i++)
echo '<tr><td>'.$ca->member_id.'</td><td>'.$ca->entrance_date.'</td><td>'.$ca->leaving_date.'</td><td>'.$ca->days1.'</td><td>'.$ca->days2.'</td><td>'.$ca->days3.
'</td><td>'.$ca->d1.'</td><td>'.$ca->d2.'</td><td>'.$ca->d3.'</td><td>'.$ca->mi_days.'</td><td>'.$ca->months.'</td></tr>';
if (false)
{
//$month = $arr_years[$form_data['year']].'-'.$i.'-01';
$month = date('Y-m-d', mktime(0, 0, 0, $i, 1, $arr_years[$form_data['year']]));
if ($this->has_to_pay($ca->member_id, $month))
{
// trying to find existing transfer of given month
$existing = $transfer_model->get_deduct_transfer($month, $ca->id);
if (is_object($existing))
$transfer = new Transfer_Model($existing->id);
else
$transfer = new Transfer_Model();
$transfer->origin_id = $ca->id;
$transfer->destination_id = $operating->id;
$transfer->user_id = $this->session->get('user_id');
$transfer->type = Transfer_Model::$deduct_member_fee;
$transfer->datetime = $month;
$transfer->creation_datetime = $creation_datetime;
$transfer->text = $form_data['text'];
$transfer->amount = $form_data['fee'];
// money transfer is saved and checked
if (!$transfer->save())
$save_successful = false;
}
// trying to find existing transfer of given year
$existing = $transfer->get_deduct_transfer($year, $ca->id);
if (is_object($existing))
$transfer = new Transfer_Model($existing->id);
else
$transfer = new Transfer_Model();
$transfer->origin_id = $ca->id;
$transfer->destination_id = $operating->id;
$transfer->user_id = $this->session->get('user_id');
$transfer->type = Transfer_Model::$deduct_member_fee;
$transfer->datetime = $start_date;
$transfer->creation_datetime = $creation_datetime;
$transfer->text = $form_data['text'];
$transfer->amount = $total_months * $form_data['fee'];
// money transfer is saved and checked
if (!$transfer->save())
$save_successful = false;
}
}
echo '</table>';
die();
// end of transaction processing
if ($save_successful)
{
......
else
{
$db->query("ROLLBACK;");
$this->session->set_flash('message', url_lang::lang('texts.Error - fees have not been deducted.'));
$this->session->set_flash('message', url_lang::lang('texts.Error - some fees have not been deducted.'));
}
url::redirect(url_lang::base().'transfers/show_all');
}
......
$view->render(TRUE);
}
}
*/
/**
* Function returns true if member has to pay fee in given month, else it returns false.
* still buggy
* @param $member_id
* @param $month
* @return unknown_type
*/
/*
private function has_to_pay($member_id = null, $month = null)
{
if ($member_id == null || $month == null)
Controller::error(RECORD, 'unexpected error in transfers/has_to_pay function');
$member = new Member_Model($member_id);
if ($member->id == 0)
Controller::error(RECORD);
// entrance date
$entrance = date::month($member->entrance_date) <= $month;
// leaving date
if ($member->leaving_date != '0000-00-00')
$leaving = date::month($member->leaving_date) > $month;
else
$leaving = true;
// membership interrupt
$mi_model = new Membership_interrupt_Model();
$mi = !($mi_model->has_mi_in_month($member_id, $month));
// result
return $entrance && $leaving && $mi;
}
*/
/**
* Function deducts member fees. This version creates one deducting transfer per year and its value
......
* @author Jiri Svitak
* @return unknown_type
*/
/*
function deduct_fees()
{
// access rights
......
$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/members_show.php
</tr>
<tr>
<th><?php echo url_lang::lang('texts.Address') ?></th>
<td><?php echo $address_point->street->street.' '.$address_point->street_number?></td>
<td><?php echo $address ?></td>
</tr>
<tr>
<th><?php echo url_lang::lang('texts.Town') ?></th>
<td><?php echo $address_point->town->town.''.$address_point->street->quarter?></td>
</tr>
<td><?php echo $town ?></td>
</tr>
<tr>
<th><?php echo url_lang::lang('texts.ZIP code') ?></th>
<td><?php echo $address_point->town->zip_code ?></td>
</tr>
<th><?php echo url_lang::lang('texts.Zip code') ?></th>
<td><?php echo $zip ?></td>
</tr>
<?php if ($member_data->member_id != 1) { ?>
<tr>
<th><?php echo url_lang::lang('texts.Registration') ?></th>

Také k dispozici: Unified diff