run($_GET['task']);
}
class PokazOfertyRouter {
public function run($task) {
if (method_exists($this, $task)) {
$this->{$task}();
}
else {
$this->defaultAction();
}
}
public function dodaj_aneks() {
/*
* 1. wybierz budynek - S_ADDRESS_STREET
* 2. wybierz ofertę - id_group, wraz z opcjami (id_options_NET, id_options_TV, id_options_TEL)
* 3. wybierz klienta - na podstawie aktywnych umów na wybranym budynku
* 4. wybierz aktywne umowy
* 5. utwórz rekord w DEALS_TABLE
* 6. utwórz rekordy w USERS2_DEALS wg. wybranych usług i zaznaczonych opcji
*/
/*
[MENU_INIT] => POKAZ_OFERTY_AKTUALNE_FUNC
[task] => dodaj_aneks
[S_ADDRESS_STREET] => ci50%
[id_group] => 1474
[id_options_NET] => Array
[0] => 445
[1] => 1247
[id_options_TV] => Array
[0] => 598
[print] =>
*/
$view = new PokazOfertyView();
echo $view->print_css();
$con = new PokazOfertyController();
$con->set_params_from_request();
echo'
con: (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($con);echo' ';
if ($con->hasOptionsToServices()) {
?>
Uwaga wersja testowa! wymagane utworzenie specjalengo pakietu na podstawie wybranych opcji.
convertOptionsToSrv()) : ?>
Bład! nie udało się utworzyć nowej grupy na podstawie wybranych parametrów.
Nowy numer oferty to get_param('id_group'); ?>.
';
echo '' . "POKAZ OFERTY AKTUALNE" . ' ';
echo " » ";
echo '' . " Oferta " . $con->get_param('id_group') . " " . ' ';
if ($con->get_param('user_id') > 0) {
echo " » ";
echo '' . " Klient " . $con->get_param('user_id') . " " . ' ';
}
echo '';
$group = $con->get_group();
if (!$group) {
echo '' . "Errro: bledny numer pakietu '" . $con->get_param('id_group') . "'" . '
';
return;
}
$con->fetch_group_data();
$view->print_group_info($group, array('user_id'=>$con->get_param('user_id')));
// TODO: user_id is required? or ajax search for user_id
if ($con->get_param('user_id') <= 0) {
echo '' . "Nie wybrano klienta!" . '
';
return;
$active_deals = PokazOfertyHelper::get_deals_active_by_street($con->get_param('S_ADDRESS_STREET'));
if (empty($active_deals)) {
echo '' . "Brak aktywnych umów na danym adresie '" . $con->get_param('S_ADDRESS_STREET') . "'" . '
';
// TODO: wybierz innego klienta?
return;
}
echo '' . "Wybierz klienta z aktualną umową na adresie '" . $con->get_param('S_ADDRESS_STREET') . "'" . ' ';
$tbl_cells = array();// field_name => label
$tbl_cells['ID_BILLING_USERS'] = 'ID klienta';
$tbl_cells['P_NAME'] = 'Imię i nazwisko';
$tbl_cells['ID_DEALS'] = 'ID umowy';
$tbl_cells['SERVICES_S_ADDRESS_STREET'] = 'adres instalacji usług';
echo '';
echo '';
echo '';
echo '' . " " . ' ';
foreach ($tbl_cells as $k_field => $v_label) {
echo '' . $v_label . ' ';
}
echo ' ';
echo ' ';
echo '';
$t = 0;
foreach ($active_deals as $v_usr_arr) {
$v_cell = array();
foreach ($v_usr_arr as $v_usr) {
foreach ($v_usr as $k_field => $v_value) {
if (array_key_exists($k_field, $v_cell)) {
if ($v_cell[$k_field] != $v_value) {
$v_cell[$k_field] .= ', ' . $v_value;
}
} else {
$v_cell[$k_field] = $v_value;
}
}
}
echo '';
echo '' . '' . " Wybierz " . ' ' . ' ';
foreach ($tbl_cells as $k_field => $v_label) {
echo '' . $v_cell[$k_field] . ' ';
}
echo ' ';
}
echo ' ';
echo '
';
return;
}
// dodaj aneks dla klienta, numeru pakietu i opcji dodatkowych
$user = PokazOfertyHelper::get_user_info($con->get_param('user_id'));
if (!$user) {
echo '' . "Error: brak informacji o kleincie '" . $con->get_param('user_id') . "'" . '
';
return;
}
// aktywne umowy klienta na danym adresie
$active_deals_by_id = $con->get_deals_active_with_info();
$view->user_with_services($user, $active_deals_by_id);
/* $user = stdClass Object
[ID_BILLING_USERS] => 2138// [id_users] => 2138
[is_firma] => 0
[P_NAME] => Agnieszka
[P_NAME_SECOND] => Katka
[P_NIP] => AIX286269
[P_PESEL] =>
[P_PHONE] => 303-38-75; 507-093-885
[P_ADDRESS_REGION] => 11
[P_ADDRESS_CITY] => Gdańsk
[P_ADDRESS_POST_CODE] => 80-809
[P_ADDRESS_STREET] => Cieszyńskiego
[P_ADDRESS_HOME] => 38
[P_ADDRESS_HOUSE] => 50
[user_mail_contact] => sole@chelmnet.pl
*
* kwerenda ODBC
, '' as KLIENT_ID
, '' as KLIENT_IS_FIRMA -- X or ''
, '' as KLIENT_IS_OSOBA_FIZYCZNA -- X or ''
, '' as KLIENT_P_NAME
, '' as KLIENT_P_NAME_SECOND
, '' as KLIENT_P_NIP
, '' as KLIENT_P_PESEL
, '' as KLIENT_P_PHONE
, '' as KLIENT_P_ADDRESS_REGION
, '' as KLIENT_P_ADDRESS_CITY
, '' as KLIENT_P_ADDRESS_POST_CODE
, '' as KLIENT_P_ADDRESS_STREET
, '' as KLIENT_P_ADDRESS_HOME
, '' as KLIENT_P_ADDRESS_HOUSE
, '' as KLIENT_user_mail_contact
, '' as NR_UMOWY
, '' as NR_ANEKSU
*/
if (empty($active_deals_by_id)) {
//echo '' . "Error: brak aktywnych umów klienta " . $con->get_param('user_id') . '
';
//return;
}
// echo'active_deals (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($active_deals_by_id);echo' ';
$con->_deals_table = PokazOfertyHelper::get_deals_table_empty_object();
$con->_deals_table->set_new_deal_data($group);
//echo'$user (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($user);echo' ';
$con->_deals_table->set_s_address_street($con->get_param('S_ADDRESS_STREET'));
$con->_deals_table->set_user_data($user);
$con->_deals_table->generate_P_DEALNUMBER();
$users2_deals = PokazOfertyHelper::get_users2_deals_empty_object();
$users2_deals->set_deal_table($con->_deals_table);
$users2_deals->set_s_address_street($con->get_param('S_ADDRESS_STREET'));
//$users2_deals->set_new_deal_data($group);
$users2_deals->set_old_deals_data($active_deals_by_id);
$users2_deals->generate_srv_map();
?>
_show_deal_form = true;
if ('' != V::get('save_deal_form', '', $_POST)) {
$con->save_deal_form(V::get('active_deal_id', 0, $_POST, 'int'), $users2_deals);
}
if ($con->_show_deal_form) {
echo '' . "Wybierz umowy do aneksu lub nową umowę" . ' ';
echo '';// #deal_form
} else {
// OK utworzono umowę - pokaz dodane rekordy? link do edycji rekordu?
return;
}
echo ' ';
echo '' . "Podgląd rekordów do utworzenia:" . ' ';
$con->_deals_table->view_table();
echo ' ';
$users2_deals->view_table();
}
public function ajax_search_user() {
$q = V::get('q', '', $_REQUEST);
header('Content-Type: text/plain; charset=utf8');
$users = array();
$users_rows = PokazOfertyHelper::get_users_by_query($q);
//die(V::json_encode_latin2($streets));
if (empty($users_rows)) {
die('Brak danych');
}
foreach ($users_rows as $r) {
$v_user = '' . $r->P_NAME . ' ' . $r->P_NAME_SECOND . ' ';
if ($r->is_firma) $v_user = '(Firma) ' . $v_user;
$v_user_add = array();
if (!empty($r->P_PESEL)) $v_user_add []= 'PESEL: ' . $r->P_PESEL;
if (!empty($r->P_NIP)) $v_user_add []= 'NIP: ' . $r->P_NIP;
if (!empty($v_user_add)) {
$v_user .= ' (' . implode(', ', $v_user_add) . ')';
}
$users [$r->ID]= $v_user;
}
if (empty($users)) {
die('Brak danych');
}
$size = count($users_rows);
if ($size > 10) $size = 10;
else if ($size < 2) $size = 2;
echo '';
foreach ($users as $k_user => $v_user) {
echo '' . $v_user . " " . '';
}
echo ' ';
?>
_($street);
$sql = "select m.`ID`, m.`S_ADDRESS_STREET`, m.`T_TELBOX_BUILDING_IN`
from `USERS2_MARKETING` as m
where m.`A_STATUS` in('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD')
and m.`S_ADDRESS_STREET` like '{$sqlStreet}%'
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$r->T_TELBOX_BUILDING_IN = $r->T_TELBOX_BUILDING_IN;
$r->S_ADDRESS_STREET = $r->S_ADDRESS_STREET;
$s_address_street = explode('/', $r->S_ADDRESS_STREET, 2);
$r->dom = intval( preg_replace('/[^0-9]/', '', reset($s_address_street)) );// reset($s_address_street);
$r->nr_domu = end($s_address_street);
$streets_rows[] = $r;
}
if (empty($streets_rows)) {
die('Brak danych');
}
function sort_streets_callback($a, $b) {
if ($a->dom < $b->dom) {
return -1;
} else if ($a->dom > $b->dom) {
return 1;
} else if ($a->nr_domu < $b->nr_domu) {
return -1;
} else if ($a->nr_domu > $b->nr_domu) {
return 1;
} else {
return 0;
}
}
uasort($streets_rows, 'sort_streets_callback');
foreach ($streets_rows as $v_street) {
$streets[] = $v_street->S_ADDRESS_STREET;
}
//die(V::json_encode_latin2($streets));
if (empty($streets)) {
die('Brak danych');
}
$size = count($streets);
if ($size > 5) $size = 5;
else if ($size < 2) $size = 2;
echo '';
foreach ($streets as $v_street) {
//echo '' . $v_street . " " . '';
echo ' ' . $v_street . " " . '';
}
echo ' ';
?>
' . "Error: Brak danych." . '';
return;
}
$deal = new Column_deals_table();
$deal->set_from_raw_data($deal_row);
$usrId = $deal->get('ID_BILLING_USERS');
if ($usrId > 0) {
Lib::loadClass('ColumnDealsStatus');
ColumnDealsStatus::run_update_for_user($usrId);
}
$deal_type = $deal->get_type();
if ($deal_type == 'ACTIVATE_OPTIONS') {
$deal_form = new DealActivateOptionsForm();
$deal_form->set_deal($deal);
$deal_form->run();
return;
}
else if ($deal_type == 'REZYGNACJA') {
$deal_form = new DealActivateRezygnacja();
$deal_form->set_deal($deal);
$deal_form->run();
return;
}
$conv = new Services_Converter();
$conv->set_deal($deal);
if (!$conv->fetch_group()) {
echo '' . "Error: brak grupy ofert (ID_OFFERS_GROUP)" . '
';
return;
}
$conv->fetch_offers();
$conv->fetch_old_deal();
$conv->generate_srv_map();
//$deal->fetch_users2_deals_rows();// TODO: TO REMOVE IN FUTURE - not needed - use field ID_OFFERS_ON, ID_OFFERS_OFF in DEALS_TABLE
//$deal->fetch_offers_rows();// by users2_deals.P_OFFER_ID_NEW - TODO: use field ID_OFFERS_ON, ID_OFFERS_OFF in DEALS_TABLE
//$deal->fetch_group_row();// use data from fetch_offers_rows
echo'deal (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deal);echo' ';
echo '';
$conv->validate_edit();
echo'conv (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($conv);echo' ';
if ($conv->has_errors()) {
echo '' . "Wróć do " . '' . " DEALS_TABLE " . ' ' . '
';
echo '' . "Rekord zawiera następujące błędy: " . ' ' . implode(' ', $conv->get_errors()) . '
';
echo'conv->get_errors (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($conv->get_errors());echo' ';
return;
}
echo 'OK';
$conv->generate_preview();
echo'conv (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($conv);echo' ';
if (1 == V::get('activate', '', $_POST)) {
Lib::loadClass('SimulateDBTask');
$simulate_db = null;
if (true) {// if (V::get('_sim', 0, $_GET, 'int') > 0) {
$db = DB::getDB();
$simulate_db = new SimulateDBTask($db, "DEALS_TABLE-{$id_deal}");
if ($simulate_db->has_todo()) {
echo '';
echo '
' . "Istnieją nieskończone zadania w kolejce dla tego rekordu!" . '
';
// TODO: skontaktuj się z administratorem?
$simulate_db->run();
echo '
';
}
}
$err_msgs = array();
$log_arr = array();
if ($conv->edit_update($err_msgs, $log_arr, $simulate_db)) {
echo '' . "Umowa aktywowana" . '
';
} else {
echo '' . "Podczas aktywowania umowy wystąpiły następujące błędy:" . ' ' . implode(' ', $err_msgs) . '
';
}
if (!empty($log_arr)) {
echo '' . "Log: " . ' ' . implode(' ', $log_arr) . '
';
}
echo '' . "Wróć do " . '' . " DEALS_TABLE " . ' ' . '
';
if ($simulate_db) {
echo '';
echo '
' . "Run database tasks:" . '
';
$simulate_db->run();
echo '
' . "database tasks end." . '
';
echo '
';
{// update created SES_USERS2_A
$ses_users2_a_update = array();
$tasks = $simulate_db->get_tasks();
foreach ($tasks as $v_task) {
if ($v_task->TASK == 'ADD_NEW_OBJ' && $v_task->DB_TABLE == 'SES_USERS2_A' && $v_task->TASK_DONE == 1) {
$ses_users2_a_update []= $v_task->RESULT_ID;
}
}
if (!empty($ses_users2_a_update)) {
echo '' . "Aktualizacja SES_USERS2_A: " . implode(',', $ses_users2_a_update) . " - pola: S_HOST, S_DOMAIN, T_NETWORK_SERVER ..." . '
';
$sql = "update `SES_USERS2_A` u, `USERS2_MARKETING` m, `BUILDINGS` b
set
u.`S_HOST`=concat('komp-', u.`ID_SERVICES`)
, u.`S_DOMAIN`=b.`T_NETWORK_SERVER`
, u.`T_NETWORK_SERVER`=b.`T_NETWORK_SERVER`
where
u.`ID` in(" . implode(',', $ses_users2_a_update) . ")
and m.`S_ADDRESS_STREET`=u.`S_ADDRESS_STREET`
and b.`S_ADDRESS_STREET`=m.`T_TELBOX_BUILDING_IN`
and m.`ID` is not null
and b.`ID` is not null
and u.`S_HOST` is null
and u.`S_DOMAIN` is null
and u.`T_NETWORK_SERVER`=''
";
$db = DB::getDB();
$db->query($sql);
$affected = $db->affected_rows();
echo '' . "Zaktualizowano {$affected} rekordów w SES_USERS2_A." . '
';
}
}
}
}
else {
$conv->print_html_data();
echo ' ';
$conv->edit_preview();
echo '';
}
}
public function verify_deal() {
$id_deal = V::get('id_deal', 0, $_REQUEST, 'int');
$deal_row = PokazOfertyHelper::get_deal($id_deal);
if (!$deal_row) {
echo '' . "Error: Brak danych." . '
';
return;
}
$deal = new Column_deals_table();
$deal->set_from_raw_data($deal_row);
echo '';
echo '
' . "Umowa ID " . $deal->get('ID') . ". Data umowy: " . $deal->get('P_DEALDATE') . ' ';
$deal_type = $deal->get_type();
echo "Wykryty rodzaj dokumentu: " . ((!$deal_type)? '
' . "NIEZNANY" . ' ' : '
' . $deal_type . ' ') . '
';
if ($deal_type) {
//$deal->_group->get_zysk_netto();
$id_offers_group = $deal->get('ID_OFFERS_GROUP');
if ($id_offers_group <= 0) {
echo '
' . "Brak numeru grupy ofert!" . ' ';
} else {
echo "Numer grupy ofert:
{$id_offers_group} ";
$group = PokazOfertyHelper::get_group($id_offers_group);
if (!$group) {
echo '
' . "Brak grupy ofert!" . ' ';
} else {
$group->fetch_offers();
echo " Zysk netto: " . '
' . number_format($group->get_zysk_netto(), 2, ',', ' ') . " zł" . ' ';
echo " Okres trwania umowy:
" . $group->get('P_DEALTERM_MONTHS') . " miesięcy";
}
}
echo '
';
if ($deal_type == 'ANEKS') {
$deal_old_id = $deal->get('P_DEALNUMBER_OLD');
$old_offers_ids = array();
if ($deal->get('ID_OFFERS_OFF') != '') {
$old_offers_ids = explode(',', $deal->get('ID_OFFERS_OFF'));
} else {
echo '
' . "Error: ANEKS - powinno być uzupełnione pole ID_OFFERS_OFF - numery ofert do wyłączenia" . '
';
}
echo '
' . "Umowa old: {$deal_old_id} " . ' ';
$deal_old_row = PokazOfertyHelper::get_deal($deal_old_id);
if (!$deal_old_row) {
echo '
' . "Error: umowa nie istnieje - prawdopodobnie błędny numer ID umowy w polu P_DEALNUMBER_OLD." . ' ';
} else {
$deal_old = new Column_deals_table();
$deal_old->set_from_raw_data($deal_old_row);
echo'
$deal_old (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deal_old);echo' ';
$deal_old_type = $deal_old->get_type();
echo "Od " . $deal_old->get('P_DEALDATE') . " do " . $deal_old->get('P_DEALDATE_TERM') . '
';
if ($deal_old->get('P_DEALDATE_TERM') > $deal->get('P_DEALDATE')) {
echo "Data zakończenia poprzedniej umowy: " . '
' . $deal_old->get('P_DEALDATE_TERM') . ' ' . " - należy od zysku z nowej umowy odjąć zysk z pozostałej części starej umowy." . '
';
$diff_days = PokazOfertyHelper::date_diff_days($deal_old->get('P_DEALDATE_TERM'), $deal->get('P_DEALDATE'));
$diff_months = PokazOfertyHelper::date_diff_months($deal_old->get('P_DEALDATE_TERM'), $deal->get('P_DEALDATE'));
echo '
'."Roznica dni: $diff_days, miesiecy: $diff_months".'
';
if (empty($old_offers_ids)) {
$users2_deals_rows = PokazOfertyHelper::get_users2_deals_by_deal_id($deal_old->get('ID'), array('WAITING','NORMAL'));
echo'
users2_deals_rows (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($users2_deals_rows);echo' ';
foreach ($users2_deals_rows as $v_users2_deal) {
if ($v_users2_deal->P_OFFER_ID_NEW > 0) {
$old_offers_ids []= $v_users2_deal->P_OFFER_ID_NEW;
}
}
if (!empty($old_offers_ids)) {
echo '
' . "Na podstawie wpisów w USERS2_DEALS dla umowy ID " . $deal_old->get('ID') . " udało się wykryć numery ofert: " . implode(',', $old_offers_ids) . '
';
} else {
echo '
' . "Nie udało się wykryć numerów ofert dla umowy ID " . $deal_old->get('ID') . " na podstawie wpisów w USERS2_DEALS." . '
';
}
}
if (!empty($old_offers_ids)) {
if ($diff_months > 0) {
$loss_log = array();
$old_deal_months = PokazOfertyHelper::date_diff_months($deal_old->get('P_DEALDATE_TERM'), $deal_old->get('P_DEALDATE'));
$loss = PokazOfertyHelper::get_aneks_loss($old_offers_ids, $diff_months, $old_deal_months, $loss_log);
echo'
loss('.$loss.') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($loss_log);echo' ';
foreach ($loss_log as $k_offer_id => $v_loss) {
}
}
}
} else {
echo "Poprzednia umowa przeszła na czas nieokreślony." . '
';
}
//echo "Wykryty rodzaj dokumentu: " . ((!$deal_old_type)? '
' . "NIEZNANY" . ' ' : '
' . $deal_old_type . ' ') . '
';
$old_id_group = $deal_old->get('ID_OFFERS_GROUP');
if ($old_id_group <= 0) {
echo '
' . "Brak numeru grupy ofert!" . ' ';
} else {
echo "Numer grupy ofert:
{$old_id_group} ";
$group_old = PokazOfertyHelper::get_group($old_id_group);
if (!$group_old) {
echo '
' . "Brak grupy ofert!" . ' ';
} else {
$group_old->fetch_offers();
echo " Zysk netto: " . '
' . number_format($group_old->get_zysk_netto(), 2, ',', ' ') . " zł" . ' ';
echo " Okres trwania umowy:
" . $group_old->get('P_DEALTERM_MONTHS') . " miesięcy";
}
}
}
echo '
';
}
}
echo '
';
/*
$_SESSION['USERS2_DEALS_COLUMN']['RELATIVEDB']['TRG_COLUMN']['CHECK_NEW_BONUS']="(
(
(OF_NEW.P_PROMO_MONTH_PRICE_NETTO * OF_NEW.P_DEAL_PROMO_MONTHS)
+ (OF_NEW.P_CONTRACT_PRICE_NETTO * (OF_NEW.P_DEALTERM_MONTHS - OF_NEW.P_DEAL_PROMO_MONTHS))
) * 1
-- tutaj odejmiemy utracony zysk, czyli ilosc od daty umowy do konca * (zysk - koszt starych ofert)
-
if (PERIOD_DIFF(date_format(USERS2_DEALS.P_DEALTERM_OLD, '%Y%m'), date_format(USERS2_DEALS.DATA_DOK, '%Y%m')) * OF_OLD.P_CONTRACT_PRICE_NETTO > 0
, PERIOD_DIFF(date_format(USERS2_DEALS.P_DEALTERM_OLD,'%Y%m'), date_format(USERS2_DEALS.DATA_DOK,'%Y%m')) * (OF_OLD.P_CONTRACT_PRICE_NETTO - COSTS_GROUPS.P_OFFER_COSTS)
,0) * 1
-- tutaj okreslamy koszt biezacej oferty NEW
-
(UOCG2_B.P_OFFER_COSTS * OF_NEW.P_DEALTERM_MONTHS) * 1
)
-- dajemy warunek jezeli nie jest to wypowiedzenie
*
if(USERS2_DEALS.RODZAJ_DZIALANIA_HANDLOWEGO='UMOWA_BEZPOSREDNIA',
0.15,
if(USERS2_DEALS.RODZAJ_DZIALANIA_HANDLOWEGO in ('UMOWA_POSREDNIA','TELEMARKETING','UMOWA W BOK ZWYCZAJNA','REZYGNACJA CESJA'),
0.05,
0
)
)
LEFT JOIN USERS2_OFFERS as OF_OLD on OF_OLD.ID=USERS2_DEALS.P_OFFER_ID_OLD
left join USERS2_OFFERS_GROUPS as UOG_B on UOG_B.ID=OF_OLD.ID_COSTS_GROUPS
left join USERS2_OFFERS_COSTS_GROUPS as COSTS_GROUPS on ( COSTS_GROUPS.ID=UOG_B.ID )
LEFT JOIN USERS2_OFFERS as OF_NEW on OF_NEW.ID=USERS2_DEALS.P_OFFER_ID_NEW
left join USERS2_OFFERS_GROUPS as UOG2_B on UOG2_B.ID=OF_NEW.ID_COSTS_GROUPS
left join USERS2_OFFERS_COSTS_GROUPS as UOCG2_B on ( UOCG2_B.ID=UOG2_B.ID )
*/
$conv = new Services_Converter();
$conv->set_deal($deal);
$conv->fetch_group();
$conv->fetch_offers();
$conv->fetch_old_deal();
$conv->generate_srv_map();
//$deal->fetch_users2_deals_rows();// TODO: TO REMOVE IN FUTURE - not needed - use field ID_OFFERS_ON, ID_OFFERS_OFF in DEALS_TABLE
//$deal->fetch_offers_rows();// by users2_deals.P_OFFER_ID_NEW - TODO: use field ID_OFFERS_ON, ID_OFFERS_OFF in DEALS_TABLE
//$deal->fetch_group_row();// use data from fetch_offers_rows
echo'deal (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deal);echo' ';
echo '';
echo'conv (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($conv);echo' ';
$conv->print_html_data();
echo ' ';
$conv->generate_preview();
echo'conv (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($conv);echo' ';
$conv->verify_preview();
echo ' ';
$force_run_task = V::get('force_run_task', 0, $_GET, 'int');
Lib::loadClass('SimulateDBTask');
$db = DB::getDB();
$simulate_db = new SimulateDBTask($db, "DEALS_TABLE-{$id_deal}");
if ($simulate_db->has_tasks()) {
$tasks = $simulate_db->get_tasks();
echo '';
echo '
' . "Zadania dla rekordu umowy" . '
';
echo '
';
echo '';
echo '';
echo '' . "ID" . ' ';
echo '' . "A_RECORD_CREATE_DATE" . ' ';
echo '' . "A_RECORD_CREATE_AUTHOR" . ' ';
echo '' . "A_RECORD_UPDATE_DATE" . ' ';
echo '' . "A_RECORD_UPDATE_AUTHOR" . ' ';
echo '' . "TRANSACTION_ID" . ' ';
echo '' . "TASK" . ' ';
echo '' . "DB_TABLE" . ' ';
echo '' . "DB_OBJ" . ' ';
echo '' . "PARAMS" . ' ';
echo '' . "RESULT_ID" . ' ';
echo '' . "TASK_DONE" . ' ';
echo ' ';
echo ' ';
echo '';
$t = 0;
foreach ($tasks as $v_task) {
echo '';
echo '' . $v_task->ID . ' ';
echo '' . $v_task->A_RECORD_CREATE_DATE . ' ';
echo '' . $v_task->A_RECORD_CREATE_AUTHOR . ' ';
echo '' . $v_task->A_RECORD_UPDATE_DATE . ' ';
echo '' . $v_task->A_RECORD_UPDATE_AUTHOR . ' ';
echo '' . $v_task->TRANSACTION_ID . ' ';
echo '' . $v_task->TASK . ' ';
echo '' . $v_task->DB_TABLE . ' ';
echo '' . str_replace("\n", ' ', $v_task->DB_OBJ) . ' ';
echo '' . $v_task->PARAMS . ' ';
echo '' . $v_task->RESULT_ID . ' ';
echo '' . $v_task->TASK_DONE;
echo ' ID}" . '">Run ';
echo ' ';
echo ' ';
}
echo ' ';
echo '
';
echo '
';
if ($force_run_task) {
$simulate_db->force_run_task($force_run_task);
}
} else {
echo '' . "Brak zadań" . '
';
}
}
public function verify_deals() {
?>
0) {
$sql_limit = 'limit ' . $limit;
}
$offset = V::get('o', '', $_GET, 'int');
if ($offset > 0) {
$sql_limit .= 'offset ' . $offset;
}
$sql = "SELECT ds.`SERVICES_S_ADDRESS_STREET`, d.*
FROM `temp_DEALS_STATUS` as ds
LEFT JOIN `DEALS_TABLE` as d on(d.`ID`=ds.`ID_DEALS`)
WHERE ds.`DEALS_ACTIVE`=1
AND (`ID_OFFERS_GROUP`='' or `ID_OFFERS_GROUP` IS NULL)
order by d.`ID` desc
$sql_limit
";
$res = $db->query($sql);
echo '';
echo '';
echo '';
echo '' . "ID" . ' ';
echo '' . "SERVICES_S_ADDRESS_STREET" . ' ';
echo '' . "ID_BILLING_USERS" . ' ';
echo '' . "ID_OFFERS_GROUP" . ' ';
echo '' . "ID_OFFERS_ON" . ' ';
echo '' . "ID_OFFERS_OFF" . ' ';
echo '' . "S_ADDRESS_STREET" . ' ';
echo '' . "M_DIST_FILES" . ' ';
echo ' ';
echo ' ';
$ile = 0;
while ($r = $db->fetch($res)) {
$streets = explode(',', $r->SERVICES_S_ADDRESS_STREET);
$user = PokazOfertyHelper::get_user_info($r->ID_BILLING_USERS);
$active_deals_by_id = PokazOfertyHelper::get_deals_active_by_user($user->ID_BILLING_USERS);
$srv_other_info = array();
$offers_ids = array();
foreach ($active_deals_by_id as $k_id_deal => $v_deal) {
if (!empty($v_deal->services)) {
foreach ($v_deal->services as $k_p_service => $v_srv_arr) {
foreach ($v_srv_arr as $k_srv_id => $v_srv) {
$v_srv->ses_x_a = null;
if (array_key_exists($k_srv_id, $v_deal->ses_x_a)) {
$v_srv->ses_x_a = $v_deal->ses_x_a[$k_srv_id];
$srv_other_info[$v_srv->ID] = $v_srv->ses_x_a->S_OTHER_INFO;
}
$offers_ids [$v_srv->ID_OFFERS] = $v_srv;
}
}
}
}
$groups = array();
if (!empty($offers_ids)) {
$oferty = PokazOfertyHelper::get_offers_by_id(array_keys($offers_ids));
$groups = PokazOfertyHelper::find_groups_by_offers($oferty, $r->ID);
}
echo '';
echo '' . $r->ID . ' ';
echo '' . $r->SERVICES_S_ADDRESS_STREET . ' ';
echo '' . $r->ID_BILLING_USERS . ' ';
echo '';
if ($r->ID_OFFERS_GROUP > 0) {
echo $r->ID_OFFERS_GROUP;
} else {
echo 'Brak ';
}
echo ' ';
echo '' . $r->ID_OFFERS_ON . ' ';
echo '' . $r->ID_OFFERS_OFF . ' ';
echo '' . $r->S_ADDRESS_STREET . ' ';
echo '' . $r->M_DIST_FILES . ' ';
echo '';
foreach ($streets as $v_street) {
echo ' ' . "Oferty({$v_street})" .' ';
}
echo ' ID_BILLING_USERS}" . '" target="_blank">' . "user" . ' ';
echo ' ID}" . '" target="_blank">' . "deal" . ' ';
echo 'ID}" . '" target="_blank">' . "Edit deal" . ' ';
echo ' ';
echo '';
PokazOfertyView::user_with_services($user, $active_deals_by_id);
echo '';
foreach ($srv_other_info as $k_id => $v_info) {
echo '';
echo '' . $k_id . ' ';
echo '' . $v_info . ' ';
echo ' ';
}
echo '
';
echo ' ';
echo '';
if (!empty($groups)) {
echo ''. "Znaleziono " . count($groups) . " pasujących grup" .'
';
echo '';
echo '';
echo '';
echo '' . "ID" . ' ';
echo '' . "COM" . ' ';
echo '' . "ID_NET" . ' ';
echo '' . "ID_TEL" . ' ';
echo '' . "ID_TV" . ' ';
echo '' . "ID_TVC" . ' ';
echo '' . "ID_TVCP" . ' ';
echo '' . "ID_TVCP_1" . ' ';
echo '' . "P_DEALTERM_MONTHS" . ' ';
echo ' ';
echo ' ';
foreach ($groups as $v_group) {
echo '';
echo 'S_ALIAS} ({$v_group->P_PROMOTION_NAME})" . '">' . $v_group->ID . ' ';
echo '' . $v_group->P_SERVICE_COMPANY . ' ';
echo '';
echo $v_group->ID_NET . ' ';
if (isset($oferty[$v_group->ID_NET])) {
echo '' . $oferty[$v_group->ID_NET]->P_CONTRACT_PRICE_NETTO . ' / ' . $oferty[$v_group->ID_NET]->P_PROMO_MONTH_PRICE_NETTO . ' ';
} else {
echo '?';
}
echo ' ';
echo '';
echo $v_group->ID_TEL . ' ';
if (isset($oferty[$v_group->ID_TEL])) {
echo '' . $oferty[$v_group->ID_TEL]->P_CONTRACT_PRICE_NETTO . ' / ' . $oferty[$v_group->ID_TEL]->P_PROMO_MONTH_PRICE_NETTO . ' ';
} else {
echo '?';
}
echo ' ';
echo '';
echo $v_group->ID_TV . ' ';
if (isset($oferty[$v_group->ID_TV])) {
echo '' . $oferty[$v_group->ID_TV]->P_CONTRACT_PRICE_NETTO . ' / ' . $oferty[$v_group->ID_TV]->P_PROMO_MONTH_PRICE_NETTO . ' ';
} else {
echo '?';
}
echo ' ';
echo '';
echo $v_group->ID_TVC . ' ';
if (isset($oferty[$v_group->ID_TVC])) {
echo '' . $oferty[$v_group->ID_TVC]->P_CONTRACT_PRICE_NETTO . ' / ' . $oferty[$v_group->ID_TVC]->P_PROMO_MONTH_PRICE_NETTO . ' ';
} else {
echo '?';
}
echo ' ';
echo '';
echo $v_group->ID_TVCP . ' ';
if (isset($oferty[$v_group->ID_TVCP])) {
echo '' . $oferty[$v_group->ID_TVCP]->P_CONTRACT_PRICE_NETTO . ' / ' . $oferty[$v_group->ID_TVCP]->P_PROMO_MONTH_PRICE_NETTO . ' ';
} else {
echo '?';
}
echo ' ';
echo '';
if ($v_group->ID_TVCP_1 > 0) echo 'ID_TVCP_1]))? ' title="' . "Price: {$oferty[$v_group->ID_TVCP_1]->P_CONTRACT_PRICE_NETTO} / Promo {$oferty[$v_group->ID_TVCP_1]->P_PROMO_MONTH_PRICE_NETTO}" . '"' : '') . '>'.$v_group->ID_TVCP_1.', ';
if ($v_group->ID_TVCP_2 > 0) echo 'ID_TVCP_2]))? ' title="' . "Price: {$oferty[$v_group->ID_TVCP_2]->P_CONTRACT_PRICE_NETTO} / Promo {$oferty[$v_group->ID_TVCP_2]->P_PROMO_MONTH_PRICE_NETTO}" . '"' : '') . '>'.$v_group->ID_TVCP_2.', ';
if ($v_group->ID_TVCP_3 > 0) echo 'ID_TVCP_3]))? ' title="' . "Price: {$oferty[$v_group->ID_TVCP_3]->P_CONTRACT_PRICE_NETTO} / Promo {$oferty[$v_group->ID_TVCP_3]->P_PROMO_MONTH_PRICE_NETTO}" . '"' : '') . '>'.$v_group->ID_TVCP_3.', ';
if ($v_group->ID_TVCP_4 > 0) echo 'ID_TVCP_4]))? ' title="' . "Price: {$oferty[$v_group->ID_TVCP_4]->P_CONTRACT_PRICE_NETTO} / Promo {$oferty[$v_group->ID_TVCP_4]->P_PROMO_MONTH_PRICE_NETTO}" . '"' : '') . '>'.$v_group->ID_TVCP_4.', ';
echo ' ';
echo '' . $v_group->P_DEALTERM_MONTHS . ' ';
echo ' ';
}
echo '
';
//echo'oferty (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($oferty);echo' ';
} else {
echo '' . "Nie znaleziono pasujących grup" . '
';
}
echo'$offers_ids (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($offers_ids);echo' ';
echo ' ';
echo ' ';
$ile++;
}
//echo '' . "Ilość: " . $ile . ' ';
echo '
';
}
public function klient_umowy() {
$id_user = V::get('id_user', 0, $_REQUEST, 'int');
if ($id_user <= 0) {
echo '' . "Error: brak danych" . '
';
return;
}
Lib::loadClass('ColumnDealsStatus');
ColumnDealsStatus::run_update_for_user($id_user);
?>
' . "Error: brak danych o kliencie {$id_user}" . '';
return;
}
$active_deals_by_id = PokazOfertyHelper::getDealsActiveOrBlockedByUser($user->ID_BILLING_USERS, false);
if(V::get('DBG',0,$_GET)){echo'active_deals_by_id (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($active_deals_by_id);echo' ';}
foreach ($active_deals_by_id as $v_deal_ind => $v_deal) {
$esrv_rows = array();
$db = DB::getDB();
$sql_srv_ids = array();
if (!empty($v_deal->services_by_id)) {
$sql_srv_ids = array_keys($v_deal->services_by_id);
}
if (!empty($sql_srv_ids)) {
$sql_srv_ids = implode(",", $sql_srv_ids);
$sql = "select e.`ID`, e.`ID_SERVICES`, e.`E_SERVICE`, e.`E_S_V`
from `EXTRA_SERVICES` as e
where e.`ID_SERVICES` in({$sql_srv_ids})
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$esrv_rows[$r->ID_SERVICES][] = $r;
}
}
$active_deals_by_id[$v_deal_ind]->extra_services = $esrv_rows;
}
if(V::get('DBG',0,$_GET)){echo'active_deals_by_id (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($active_deals_by_id);echo' ';}
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
$pokaz_oferty_view->user_with_services($user, $active_deals_by_id);
$id_deal = V::get('id_deal', 0, $_GET, 'int');
if (empty($active_deals_by_id)) {
echo '' . "Error: brak aktualnych umów." . '
';
return;
}
foreach ($active_deals_by_id as $k_id => $v_deal) {
echo '';
echo "Umowa ID {$k_id}: ";
echo 'ID_BILLING_USERS}&id_deal={$k_id}" . '">' . "Dodaj opcje" . ' ';
echo " lub ";
echo 'ID_BILLING_USERS}&id_deal={$k_id}" . '">' . "Wyłącz opcje" . ' ';
echo '
';
}
}
public function umowa_add_options() {
$id_user = V::get('id_user', 0, $_REQUEST, 'int');
$id_deal = V::get('id_deal', 0, $_REQUEST, 'int');
if ($id_user <= 0) {
echo '' . "Error: id_user" . '
';
return;
}
if ($id_deal <= 0) {
echo '' . "Error: id_deal" . '
';
return;
}
echo '';
$user = PokazOfertyHelper::get_user_info($id_user);
if (!$user) {
echo '' . "Error: brak danych o kliencie {$id_user}" . '
';
return;
}
$active_deals_by_id = PokazOfertyHelper::get_deals_active_by_user($user->ID_BILLING_USERS);
if (empty($active_deals_by_id)) {
echo '' . "Error: brak aktualnych umów." . '
';
return;
}
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
$pokaz_oferty_view->user_with_services($user, $active_deals_by_id);
$deal_info = $active_deals_by_id[$id_deal];
if (!$deal_info) {
echo '' . "Error: danych umowy." . '
';
return;
}
echo '' . "Wybrano umowe ID {$deal_info->ID_DEALS}" . '
';
echo'deal_info (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deal_info);echo' ';
if ($deal_info->ID_OFFERS_GROUP <= 0) {
echo '' . "Error: brak id pakietu (ID_OFFERS_GROUP)." . '
';
return;
}
$group = PokazOfertyHelper::get_group($deal_info->ID_OFFERS_GROUP);
if (!$group) {
echo '' . "Error: brak danych o pakiecie ({$deal_info->ID_OFFERS_GROUP})." . '
';
return;
}
// $deal_info->ID_OFFERS_ON
// $this->_group->set_offers(PokazOfertyHelper::get_offers_by_id($offers_ids));
if ($deal_info->ID_OFFERS_ON) {
$offers_ids = explode(',', $deal_info->ID_OFFERS_ON);
$group->fetch_offers_by_ids($offers_ids);
}
else {
$group->fetch_offers();
}
echo'group (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($group);echo' ';
$oferty_opcje = PokazOfertyHelper::get_oferty_opcje();
//echo'$oferty_opcje: ';print_r($oferty_opcje);echo' ';
//echo'';print_r($oferty_group_add_info ['labels']);echo' ';
if (empty($oferty_opcje)) {
$pokaz_oferty_view->print_group_info($group, array('hide_print'=>true));
echo '' . "Brak opcji w bazie danych" . '
';
return;
}
$deal_form = new DealAddOptionsForm();
$deal_form->set_options($_GET);
$deal_form->set_oferty_opcje($oferty_opcje);
$deal_form->set_deal($deal_info);
$deal_form->set_group($group);
$deal_form->set_group_view($pokaz_oferty_view);
$deal_form->run();
}
public function umowa_rm_options() {
$id_user = V::get('id_user', 0, $_REQUEST, 'int');
$id_deal = V::get('id_deal', 0, $_REQUEST, 'int');
if ($id_user <= 0) {
echo '' . "Error: id_user" . '
';
return;
}
if ($id_deal <= 0) {
echo '' . "Error: id_deal" . '
';
return;
}
echo '';
$user = PokazOfertyHelper::get_user_info($id_user);
if (!$user) {
echo '' . "Error: brak danych o kliencie {$id_user}" . '
';
return;
}
$active_deals_by_id = PokazOfertyHelper::get_deals_active_by_user($user->ID_BILLING_USERS);
if (empty($active_deals_by_id)) {
echo '' . "Error: brak aktualnych umów." . '
';
return;
}
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
$pokaz_oferty_view->user_with_services($user, $active_deals_by_id);
$deal_info = $active_deals_by_id[$id_deal];
if (!$deal_info) {
echo '' . "Error: danych umowy." . '
';
return;
}
echo '' . "Wybrano umowe ID {$deal_info->ID_DEALS}" . '
';
echo'deal_info (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deal_info);echo' ';
if ($deal_info->ID_OFFERS_GROUP <= 0) {
echo '' . "Error: brak id pakietu (ID_OFFERS_GROUP)." . '
';
return;
}
$group = PokazOfertyHelper::get_group($deal_info->ID_OFFERS_GROUP);
if (!$group) {
echo '' . "Error: brak danych o pakiecie ({$deal_info->ID_OFFERS_GROUP})." . '
';
return;
}
// $deal_info->ID_OFFERS_ON
// $this->_group->set_offers(PokazOfertyHelper::get_offers_by_id($offers_ids));
if ($deal_info->ID_OFFERS_ON) {
$offers_ids = explode(',', $deal_info->ID_OFFERS_ON);
$group->fetch_offers_by_ids($offers_ids);
}
else {
$group->fetch_offers();
}
echo'group (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($group);echo' ';
$oferty_opcje = PokazOfertyHelper::get_oferty_opcje();
//echo'$oferty_opcje: ';print_r($oferty_opcje);echo' ';
//echo'';print_r($oferty_group_add_info ['labels']);echo' ';
if (empty($oferty_opcje)) {
$pokaz_oferty_view->print_group_info($group, array('hide_print'=>true));
echo '' . "Brak opcji w bazie danych" . '
';
return;
}
$deal_form = new DealRmOptionsForm();
$deal_form->set_options($_GET);
$deal_form->set_oferty_opcje($oferty_opcje);
$deal_form->set_deal($deal_info);
$deal_form->set_group($group);
$deal_form->set_group_view($pokaz_oferty_view);
$deal_form->run();
}
public function rozlicz_month() {
$month = V::get('month', '', $_REQUEST);
$months = array();
$cur_y = date('Y');
$cur_m = date('m');
$DBG = ('rozlicz' == V::get('DBG', '', $_GET));
for ($i = $cur_m; $i > 0; $i--) {
$months []= sprintf("%d-%02d", $cur_y, $i);
}
for ($i = 12; $i > 0; $i--) {
$months []= sprintf("%d-%02d", $cur_y - 1, $i);
}
for ($i = 12; $i > 0; $i--) {
$months []= sprintf("%d-%02d", $cur_y - 2, $i);
}
for ($i = 12; $i > 0; $i--) {
$months []= sprintf("%d-%02d", $cur_y - 3, $i);
}
if (!empty($month)) {
if (!in_array($month, $months)) {
$month = null;
echo ''."Error - bad month".'
';
}
}
echo '';
if (!$month) {
return;
}
$deals = PokazOfertyHelper::getDealsRozlicz($month, array('A_STATUS'=>array('NORMAL', 'OFF_HARD')));
if (empty($deals)) {
echo '' . "Brak umów w wybranym miesiącu" . '
';
return;
}
echo '';
$tblOutCells = array();
$tblOutCells['ID'] = (object)array('class'=>'num', 'type'=>'link', 'link_format'=>'{ID} ');
$tblOutCells['P_DEALDATE'] = (object)array('class'=>'date');
$tblOutCells['ID_BILLING_USERS'] = (object)array('class'=>'num');
$tblOutCells['S_ADDRESS_STREET'] = (object)array('class'=>'street');
$tblOutCells['P_DEALPREFIX'] = (object)array('class'=>'prefix');
$tblOutCells['P_DEALNUMBER_OLD'] = (object)array('class'=>'num');
$tblOutCells['ID_OFFERS_GROUP'] = (object)array('class'=>'num');
$tblOutCells['ID_OFFERS_ON'] = (object)array('class'=>'csv_num', 'label'=>'ID ofert do włączenia');
$tblOutCells['ID_OFFERS_OFF'] = (object)array('class'=>'csv_num', 'label'=>'ID ofert do wyłączenia');
$tblOutCells['RODZAJ_DZIALANIA_HANDLOWEGO'] = (object)array('class'=>'dzialanie');
$tblOutCells['DEALDESC'] = (object)array('class'=>'opis');
$tblOutCells['deal_type'] = (object)array('class'=>'deal_type', 'label'=>'Wykryty rodzaj dokumentu');
$tblOutCells['abonament_suma_netto'] = (object)array('class'=>'big_num', 'type'=>'number', 'label'=>'Suma abonament netto (bez instalacji)');
$tblOutCells['abonament_suma_brutto'] = (object)array('class'=>'big_num', 'type'=>'number', 'label'=>'Suma abonament brutto (bez instalacji)');
$tblOutCells['abonament_srednia_netto'] = (object)array('class'=>'num', 'type'=>'number', 'label'=>'Średni miesięczny abonament netto');
$tblOutCells['zysk'] = (object)array('class'=>'num', 'type'=>'number', 'label'=>'Średni miesięczny zysk netto');
$tblOutCells['miesiecy'] = (object)array('class'=>'num', 'label'=>'Ilość miesięcy obowiązywania umowy');
$tblOutCells['aneks_diff'] = (object)array('class'=>'num', 'label'=>'Ilość miesięcy obowiązywania poprzedniej umowy');
$tblOutCells['aneks_loss'] = (object)array('class'=>'num', 'label'=>'Strata w zysku związana z okresem obowiązywania poprzedniej umowy');
$tblOutCells['zysk_total'] = (object)array('class'=>'num', 'type'=>'number', 'label'=>'Zysk całkowity: Zysk * Mies. - Aneks Strata');
$tblOutCells['verify_deal_link'] = (object)array('class'=>'num', 'type'=>'link', 'link_format'=>'verify ');
$tblOutCells['check_errors'] = (object)array('class'=>'num', 'type'=>'array_of_errors');
if(V::get('DBG_PO', '', $_GET)>0){echo'deals (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deals);echo' ';}
$dealsOut = array();
foreach ($deals as $k_id => $v_deal_row) $dealsOut[$k_id] = $v_deal_row;
foreach ($dealsOut as $k_id => $v_deal_row) {
$deal = new Column_deals_table();
$deal->set_from_raw_data($v_deal_row);
$v_deal_row->deal_type = $deal->get_type();
$v_deal_row->zysk = 0;
$v_deal_row->miesiecy = PokazOfertyHelper::date_diff_months($v_deal_row->P_DEALDATE_TERM, $v_deal_row->P_DEALDATE);
$v_deal_row->aneks_diff = 0;
$v_deal_row->aneks_loss = 0;
$v_deal_row->aneks_loss_abo_netto = 0;
$v_deal_row->zysk_total = 0;
$v_deal_row->check_errors = array();
$out_html_attr = array();
if ('REZYGNACJA' == $v_deal_row->deal_type) {
$v_deal_row->miesiecy = 0;
$deal_old_id = $deal->get('P_DEALNUMBER_OLD');
if ($deal_old_id <= 0) {
$v_deal_row->check_errors[] = "Error: REZYGNACJA - brak P_DEALNUMBER_OLD";
} else {
$deal_old_row = PokazOfertyHelper::get_deal($deal_old_id);
if (!$deal_old_row) {
$v_deal_row->check_errors[] = "Error: REZYGNACJA - brak rekordu starej umowy (qP_DEALNUMBER_OLD={$deal_old_id})";
} else {
$deal_old = new Column_deals_table();
$deal_old->set_from_raw_data($deal_old_row);
$deal_old_type = $deal_old->get_type();
$id_offers_group = $deal_old->get('ID_OFFERS_GROUP');
if ($id_offers_group <= 0) {
$v_deal_row->check_errors[] = "Error: REZYGNACJA - brak ID_OFFERS_GROUP w starej umowie (P_DEALNUMBER_OLD={$deal_old_id})";
} else {
$group = PokazOfertyHelper::get_group($id_offers_group);
if (!$group) {
$v_deal_row->check_errors[] = "Error: REZYGNACJA - brak pakietu (ID_OFFERS_GROUP={$id_offers_group}) w starej umowie (P_DEALNUMBER_OLD={$deal_old_id})";
} else {
$group->fetch_offers();
$group->recount_costs();
$v_deal_row->zysk = $group->get_zysk_netto();
$v_deal_row->zysk_total = $v_deal_row->zysk * -1;
$v_deal_row->abonament_srednia_netto = $group->get_srednia_netto();
}
}
}
}
}
else if ($v_deal_row->deal_type) {
$id_offers_group = $deal->get('ID_OFFERS_GROUP');
if ($id_offers_group > 0) {
$group = PokazOfertyHelper::get_group_with_options($id_offers_group, $deal->get('ID_OFFERS_ON'));
if ($group) {
$group->fetch_offers();
$v_deal_row->zysk = $group->get_zysk_netto();
$v_deal_row->abonament_srednia_netto = $group->get_srednia_netto();
$v_deal_row->abonament_suma_netto = $group->get_suma_netto();
$v_deal_row->abonament_suma_brutto = $group->get_suma_brutto();
}
}
if ($v_deal_row->deal_type == 'ANEKS') {
$deal_old_id = $deal->get('P_DEALNUMBER_OLD');
$old_offers_ids = array();
if ($deal->get('ID_OFFERS_OFF') != '') {
$old_offers_ids = explode(',', $deal->get('ID_OFFERS_OFF'));
} else {
$v_deal_row->check_errors []= "Error: ANEKS - powinno być uzupełnione pole ID_OFFERS_OFF - numery ofert do wyłączenia";
}
$deal_old_row = PokazOfertyHelper::get_deal($deal_old_id);
if (!$deal_old_row) {
$out_html_attr ['P_DEALNUMBER_OLD'] = ' style="background-color:red" title="' . "umowa ID {$deal_old_id} nie istnieje" . '"';
} else {
$deal_old = new Column_deals_table();
$deal_old->set_from_raw_data($deal_old_row);
$deal_old_type = $deal_old->get_type();
if ($deal_old->get('P_DEALDATE_TERM') > $deal->get('P_DEALDATE')) {
$v_deal_row->check_errors []= "Data zakończenia poprzedniej umowy: " . '' . $deal_old->get('P_DEALDATE_TERM') . ' ' . " - należy od zysku z nowej umowy odjąć zysk z pozostałej części starej umowy.";
$diff_days = PokazOfertyHelper::date_diff_days($deal_old->get('P_DEALDATE_TERM'), $deal->get('P_DEALDATE'));
$diff_months = PokazOfertyHelper::date_diff_months($deal_old->get('P_DEALDATE_TERM'), $deal->get('P_DEALDATE'));
$v_deal_row->aneks_diff = $diff_months;
if (empty($old_offers_ids)) {
$users2_deals_rows = PokazOfertyHelper::get_users2_deals_by_deal_id($deal_old->get('ID'), array('WAITING','NORMAL'));
foreach ($users2_deals_rows as $v_users2_deal) {
if ($v_users2_deal->P_OFFER_ID_NEW > 0) {
$old_offers_ids []= $v_users2_deal->P_OFFER_ID_NEW;
}
}
if (!empty($old_offers_ids)) {
$v_deal_row->check_errors []= "Na podstawie wpisów w USERS2_DEALS dla umowy ID " . $deal_old->get('ID') . " udało się wykryć numery ofert: " . implode(',', $old_offers_ids);
} else {
$v_deal_row->check_errors []= "Nie udało się wykryć numerów ofert dla umowy ID " . $deal_old->get('ID') . " na podstawie wpisów w USERS2_DEALS.";
}
}
if (!empty($old_offers_ids)) {
if ($diff_months > 0) {
$loss_log = array();
$old_deal_months = PokazOfertyHelper::date_diff_months($deal_old->get('P_DEALDATE_TERM'), $deal_old->get('P_DEALDATE'));
$loss = PokazOfertyHelper::get_aneks_loss($old_offers_ids, $diff_months, $old_deal_months, $loss_log);
$v_deal_row->aneks_loss = $loss;
$v_deal_row->aneks_loss_abo_netto = PokazOfertyHelper::get_aneks_loss_abonament_netto($old_offers_ids, $diff_months, $old_deal_months, $loss_log);
}
}
} else {
$out_html_attr ['aneks_diff'] = ' style="background-color:silver" title="' . "Poprzednia umowa przeszła na czas nieokreślony" . '"';
}
}
}
if ($v_deal_row->ID_OFFERS_GROUP <= 0) {
if ($v_deal_row->deal_type == 'NEW_DEAL') {
$out_html_attr['ID_OFFERS_GROUP'] = ' style="background-color:red" title="' . "Nowa umowa musi mieć wypełnione pole ID_OFFERS_GROUP" . '"';
}
}
$v_deal_row->zysk_total = $group->get_zysk_netto_by_months($v_deal_row->miesiecy);//$v_deal_row->zysk * $v_deal_row->miesiecy;
if ($v_deal_row->deal_type == 'ANEKS') {
if ($v_deal_row->aneks_diff > 0 && $v_deal_row->aneks_loss) {
$v_deal_row->zysk_total -= $v_deal_row->aneks_loss;
}
}
}
if(V::get('DBG_PO', '', $_GET)>0){echo'group (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($group);echo' ';}
$dealsOut[$k_id] = $v_deal_row;
}
if(V::get('DBG_PO', '', $_GET)>0){echo'dealsOut (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($dealsOut);echo' ';}
?>
$vCellConf) : ?>
$r) : ?>
$vCellConf) : ?>
{$kCell}, 2, ',', '');
$cellLabel = $cellValue;
}
else if ('array_of_errors' == V::get('type', '', $vCellConf)) {
if (!empty($r->check_errors)) {
$cellValue = 'check_errors) . '" style="color:red">' . " Errors " . ' ';
}
$cellLabel = V::get('label', $kCell, $vCellConf);
}
else if ('link' == V::get('type', '', $vCellConf)) {
$link_format = V::get('link_format', '', $vCellConf);
$link = str_replace('{ID}', $r->ID, $link_format);
$cellValue = $link;
$cellLabel = V::get('label', $kCell, $vCellConf);
}
else if (isset($r->{$kCell})) {
$cellValue = $r->{$kCell};
$cellLabel = $cellValue;
}
$clsAdd = '';
if ('RODZAJ_DZIALANIA_HANDLOWEGO' == $kCell) {
$clsAdd = ' tbl_deals-col_' . V::get('class', '', $vCellConf) . '-' . str_replace(' ', '-', $r->{$kCell});
}
?>
$r) {
if (!isset($statsType[$r->RODZAJ_DZIALANIA_HANDLOWEGO])) {
$vStat = new stdClass();
$vStat->ilosc = 1;
$statsType[$r->RODZAJ_DZIALANIA_HANDLOWEGO] = $vStat;
}
else {
$statsType[$r->RODZAJ_DZIALANIA_HANDLOWEGO]->ilosc += 1;
}
}
if($DBG){echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($dealsOut);echo' ';}
$statsByFoundType = array();
/** @2014-08-20
* [13245] KOMORKA bok_nowa_umowa_wartosc_sprzed_kontrakt bok nowa um. wart.sprzed.kontr. Jaka wartość wynika ze sprzedanych kontraktów z tytułu nowych umów. Czyli kwota abonamentu razy długość kontraktu.
*
* [13246] KOMORKA bok_nowa_umowa_zysk_kontrakt bok nowa um. zysk kontakt Jaki jest zysk wynikły ze sprzedanych kontraktów z tytułu nowej umowy.
*
* [13247] KOMORKA bok_aneks_wartosc_sprzed_kontrakt bok aneks wart.sprzed. Jaka jest wartość sprzedaży wynikła z podpisania aneksu. Czyli jeżeli klient przeszedł z umowy na czas nieokreślony, będzie to okres umowy razy ilość abonamentów. Jeżeli zmienił umowę z innej umowy na czas określony, to z zysku należy odjąć wartość, jaka wynikała z jego poprzedniej umowy i terminu obowiązywania.
*
* [13248] KOMORKA bok_aneks_zysk_kontrakt bok aneks zysk kontrakt Jaki jest zysk z tytułu kontraktów jakie zamówił klient w wyniku podpisania aneksu. Należy odjąć zysk od usług które były wcześniej zamówione na okres pokrywający się. Czyli jeżeli klient miał umowę na rok za usługę z zyskiem 50zł, to jeżeli podpisał umowę na 2 lata na usługę z takim samym zyskiem, to należy od zysku 24m-c x 50 PLN odjąć pozostały okres umowy 12m-c x 50 PLN = 1200-600 = 600 PLN.
*
* [13249] KOMORKA bok_rezygnacja_strata_zysk_1_mies bok rez.wart.strac.zysk 1mies. Należy zsumować wartość zysku jaka przestanie wpływać do firmy z tytułu zakupywanych usług przez klientów.
*
* [13250] KOMORKA bok_rezygnacja_strata_wartosc_sprzed bok rez.wart.straty 1mies Należy tutaj zsumować wartość abonamentów jakie przestaną wpływać do firmy z tytułu zakupywanych usług przez klientów, którzy złożyli rezygnacje.
*
* $statsByFoundType:
* zysk_total - KPI: [13246], [13248]
* abonament_srednia_netto
*/
$errosNoGroupIDInOldDeal = array();
foreach ($dealsOut as $kId => $r) {
$vStat = V::get($r->deal_type, null, $statsByFoundType);
if (!$vStat) {
$vStat = new stdClass();
$vStat->ilosc = 0;
$vStat->zysk_total = 0;
$vStat->abonament_srednia_netto = 0;
$vStat->sum_abonament_srednia_netto = 0;
}
$vStat->ilosc += 1;
$vStat->zysk_total += $r->zysk_total;
if (!$r->abonament_srednia_netto) {
$errosNoGroupIDInOldDeal[$r->ID] = $r;
} else {
$vStat->abonament_srednia_netto += $r->abonament_srednia_netto;
if ('NEW_DEAL' == $r->deal_type) {
$vStat->sum_abonament_srednia_netto += $r->abonament_srednia_netto * $r->miesiecy;
} else if ('ANEKS' == $r->deal_type) {
$vStat->sum_abonament_srednia_netto += $r->abonament_srednia_netto * $r->miesiecy - $r->aneks_loss_abo_netto;
}
}
$statsByFoundType[$r->deal_type] = $vStat;
}
$sumaSrAboZoff = 0;
$sumaSrZyskZoff = 0;
foreach ($errosNoGroupIDInOldDeal as $k => $r) {
if ('REZYGNACJA' == $r->deal_type && !empty($r->ID_OFFERS_OFF)) {
$group = new Column_users2_offers_groups();
$group->setForce('P_DEALTERM_MONTHS', 24);
$group->fetch_offers_by_ids(explode(',', $r->ID_OFFERS_OFF));
$group->recount_costs();
if($DBG){echo'group for deal('.$r->ID.') ID_OFFERS_OFF('.$r->ID_OFFERS_OFF.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($group);echo' ';}
$errosNoGroupIDInOldDeal[$k]->abonament_srednia_netto_prze_1mies = $group->get_srednia_netto();
$errosNoGroupIDInOldDeal[$k]->zysk_total = -1 * $group->get_zysk_netto();
$sumaSrAboZoff += $errosNoGroupIDInOldDeal[$k]->abonament_srednia_netto_prze_1mies;
$sumaSrZyskZoff += $errosNoGroupIDInOldDeal[$k]->zysk_total;
}
}
?>
Podsumowanie:
RODZAJ_DZIALANIA_HANDLOWEGO
ilość
$vStat) : ?>
ilosc; ?>
Wykryty rodzaj umowy
ilość
Zysk
Śr. abonament
Suma abonamonet
$vStat) : ?>
ilosc; ?>
zysk_total, 2, ',', ''); ?>
abonament_srednia_netto, 2, ',', ''); ?>
sum_abonament_srednia_netto, 2, ',', ''); ?>
Błędy w umowach ():
Nr
Klient
Typ
ID_OFFERS_OFF
Śr. zysk
Śr. abonament
Suma:
ID; ?>
ID_BILLING_USERS; ?>
deal_type; ?>
ID_OFFERS_OFF; ?>
zysk_total) : ?>
Brak
zysk_total, 2, ',', ''); ?>
abonament_srednia_netto_prze_1mies) : ?>
Brak
abonament_srednia_netto_prze_1mies, 2, ',', ''); ?>
(' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($errosNoGroupIDInOldDeal);echo'';} ?>
ID;
$zyskTotal = $deal->zysk_total;
$zysk = $deal->ROZLICZ_ZYSK;
if ($zysk != $zyskTotal) {
$affected = DB::getPDO()->exec("update DEALS_TABLE set ROZLICZ_ZYSK = '{$zyskTotal}' where ID = {$idDeal} ");
// DBG: UI::alert('info', "affected {$affected} rows for id deal {$idDeal}");
$totalAffeced += $affected;
}
}
UI::alert('info', "Zaktualizowano pole ROZLICZ_ZYSK w {$totalAffeced} rekordach");
}
}
public function activate_services_tv() {
echo '';
$this->activate_services('tv');
echo '
';
}
public function activate_services_net() {
echo '';
$this->activate_services('net');
echo '
';
}
public function activate_services_voip() {
echo '';
$this->activate_services('voip');
echo '
';
}
private function activate_services($type) {
$id_services = V::get('id_services', 0, $_GET, 'int');
$id_ses_a = V::get('id_ses_a', 0, $_GET, 'int');
$sqlTable = '';
$sqlSesBTable = '';
if ($type == 'tv') {
$sqlTable = 'SES_TV_A';
$sqlSesBTable = 'SES_TV_B';
} else if ($type == 'net') {
$sqlTable = 'SES_USERS2_A';
$sqlSesBTable = 'SES_USERS2_B';
} else if ($type == 'voip') {
$sqlTable = 'SES_VOIP_A';
$sqlSesBTable = 'SES_VOIP_B';
}
if (empty($sqlTable)) {
echo 'Wrong type
';
return;
}
$db = DB::getDB();
$srv = $db->get_by_id('SERVICES', $id_services);
$ses_a = $db->get_by_id($sqlTable, $id_ses_a);
if (!$srv) {
echo 'Services nie istnieje
';
return;
}
if (!$ses_a) {
echo 'Ses_x_a nie istnieje
';
return;
}
if ($ses_a->ID_SERVICES != $srv->ID) {
echo 'Błąd w strukturze - ID_SERVICES
';
return;
}
if(V::get('DBG_UA', '', $_GET)){echo'$srv (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($srv);echo' ';}
if(V::get('DBG_UA', '', $_GET)){echo'$ses_a (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($ses_a);echo' ';}
// fetch SES_X_B
$sesB = array();
$sql = "select b.*
from `{$sqlSesBTable}` as b
where b.`ID_SERVICES`='{$id_services}'
and b.`TYPE`=4
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$sesB[] = $r;
}
if (!empty($sesB)) {
$activationDate = end($sesB);
$activationDate = $activationDate->VALUE1;
echo '' . "Usługa została już aktywowana dnia {$activationDate}" . '
';
} else {
echo '' . "Usługa nie została jeszcze poprawnie aktywowana" . '
';
}
$frmFldsNamesOnly = array('ID', 'ID_SERVICES', 'T_WHO_CONNECTED', 'T_WHEN_CONNECTED', 'S_ADDRESS_STREET');
$frmFldsNamesWriteOnly = array('T_WHO_CONNECTED', 'T_WHEN_CONNECTED');
Lib::loadClass('ProcesHelper');
$zasobID = ProcesHelper::getZasobTableID($sqlTable);
$userAcl = User::getAcl();
$userAcl->fetchGroups();
if (!$userAcl->hasTableAcl($zasobID)) {
die("Brak uprawnień do tabeli ID={$zasobID}");
}
$tblAcl = $userAcl->getTableAcl($zasobID);
$forceTblAclInit = ('1' == V::get('_force', '', $_GET));
$tblAcl->init($forceTblAclInit);
$dataSource = $tblAcl->getDataSource();
$cols = array();
$record = $dataSource->getItem($id_ses_a);
if (!$tblAcl->canWriteRecord($record) && !$tblAcl->hasPermSuperWrite()) {
echo '';
echo "Brak dostępu do rekordu";// TODO: more info - reason
echo '
';
return;
}
$fieldsList = $tblAcl->getFields();
foreach ($fieldsList as $kID => $vCol) {
if (!in_array($vCol['name'], $frmFldsNamesOnly)) {
unset($fieldsList[$kID]);
continue;
}
if ($vCol['name'] == 'ID') {
unset($fieldsList[$kID]);
continue;
}
$cols[$kID] = V::get($vCol['name'], '', $record);
$cols[$kID] = V::get("f{$kID}", $cols[$kID], $_POST);
if ($vCol['name'] == 'T_WHEN_CONNECTED' && empty($cols[$kID])) {
$cols[$kID] = date("Y-m-d");
}
$fieldsList[$kID]['label'] = (!empty($vCol['label']))? $vCol['label'] : str_replace('_', ' ', $vCol['name']);
}
$tsValues = array();
if (!empty($fieldsList)) {
Lib::loadClass('Typespecial');
foreach ($fieldsList as $vColID => $vCol) {
$typeSpecial = Typespecial::getInstance($vColID, $vCol['name']);
if ($typeSpecial) {
$colValue = V::get($vCol['name'], '', $record);
$specialValues = $typeSpecial->getEditSelectedValuesByIds($zasobID, $record->ID, $vCol['name'], $colValue);
if (!empty($specialValues)) {
$tsValues[$vColID] = implode(' ', $specialValues);
}
}
}
}
if(V::get('DBG_UA', '', $_GET)){echo'$cols (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($cols);echo' ';}
if(V::get('DBG_UA', '', $_GET)){echo'$tsValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($tsValues);echo' ';}
$this->activate_services_save($tblAcl, $fieldsList, $sqlTable, $sqlSesBTable, $_POST);
?>
$vCol) {
if ($vCol['name'] == 'T_WHEN_CONNECTED') {
$T_WHEN_CONNECTED = V::get("f{$kID}", '', $args);
}
}
if(V::get('DBG_UA', '', $_GET)){echo'args (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo' ';}
if (empty($T_WHEN_CONNECTED)) {
echo '' . "Brak daty podłączenia (T_WHEN_CONNECTED)" . '
';
return;
}
$db = DB::getDB();
$record = $db->get_by_id($sqlTable, $id_ses_a);
if (!$tblAcl->canWriteRecord($record) && !$tblAcl->hasPermSuperWrite()) {
echo '';
echo "Brak dostępu do rekordu";// TODO: more info - reason
echo '
';
return;
}
$sqlObj = new stdClass();
foreach ($fieldsList as $kID => $vField) {
if (!$tblAcl->isAllowed($kID, 'W', $record)) {
continue;
}
if (array_key_exists("f{$kID}", $args)) {
$sqlObj->{$vField['name']} = $args["f{$kID}"];
if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
$sqlObj->{$vField['name']} = $this->fixEmptyValueFromUser($kID);
}
}
}
$sqlObj->ID = $record->ID;
if(V::get('DBG_UA', '', $_GET)){echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo' ';}
$ret = $db->UPDATE_OBJ($sqlTable, $sqlObj);
if ($ret > 0) {
echo '';
echo "Rekord zapisany pomyślnie";//"Record saved successfully";
echo '
';
} else if ($ret == 0) {
echo '';
echo "Nie wprowadzono żadnych zmian";
echo '
';
} else {
header('HTTP/1.0 404 Not Found');
echo '';
echo '
' . "Wystąpiły błędy!" . ' ';
if ($db->has_errors()) {
$errors = $db->get_errors();
echo implode(' ', $errors);
}
echo '';
exit;
}
$sql = "insert into {$sqlSesBTable} (`ID`, `ID_SERVICES`, `ID_BILLING_USERS`, `TIMESTAMP`, `TYPE`, `VALUE1`)
select '', U.ID_SERVICES, SV.ID_BILLING_USERS, now(), '4', '{$T_WHEN_CONNECTED}'
from {$sqlTable} as U
left join SERVICES as SV on SV.`ID`=U.`ID_SERVICES`
where U.`ID`='{$id_ses_a}'
";
if(V::get('DBG_UA', '', $_GET)){echo'sql 1 (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';}
$res = $db->query($sql);
if (!$res) {
echo '' . "Nie udało się dodać rekordu do tabeli {$sqlSesBTable}" . '
';
} else {
$ret_id = $db->insert_id();
if (!$ret_id) {
echo '' . "Nie udało się dodać rekordu do tabeli {$sqlSesBTable}" . '
';
} else {
echo '' . "Dodano rekord do tabeli {$sqlSesBTable}" . '
';
}
}
$sql = "update `SERVICES` as SV, `{$sqlTable}` as U
set SV.`A_STATUS`='NORMAL', U.`A_STATUS`='NORMAL', SV.`TAB_UPDATE_STAT`='1'
where U.`ID_SERVICES`=SV.`ID`
and SV.`A_STATUS` in('WAITING', 'NORMAL')
and U.`ID`='{$id_ses_a}'
";
if(V::get('DBG_UA', '', $_GET)){echo'sql 2 (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';}
$res = $db->query($sql);
if (!$res) {
echo '' . "Nie udało się zaktualizować statusów" . '
';
} else {
$ret = $db->affected_rows();
if ($ret > 0) {
echo '' . "Zaktualizowano statusy dla {$ret} rekordów" . '
';
}
}
}
public function ajaxUmowaZysk_createJson() {
$jsonData = new stdClass();
$con = new PokazOfertyController();
$con->set_params_from_request();
if ($con->hasOptionsToServices()) {
if (!$con->convertOptionsToSrv()) {
throw new Exception("Nie udało się utworzyć nowej grupy na podstawie wybranych parametrów.");
}
}
$jsonData->con = $con;
$group = $con->get_group();
if (!$group) {
throw new Exception("Brak grupy");
}
$group->fetch_offers();
$jsonData->zysk = $group->get_zysk_netto();
$jsonData->zyskabonament_srednia_netto = $group->get_srednia_netto();
$procenty = array();
$procenty[] = 2;
$procenty[] = 5;
$procenty[] = 10;
$procenty[] = 15;
$procenty[] = 30;
$suma_P_PROMO_MONTH_PRICE = $group->suma_P_PROMO_MONTH_PRICE;
$suma_P_CONTRACT_PRICE = $group->suma_P_CONTRACT_PRICE;
ob_start();
?>
Oferty (w promocji/po promocji)
_offers_by_id as $nrOferty => $oferta) : ?>
ID; ?> P_SERVICE; ?>
(P_PROMO_MONTH_PRICE, 2, ',', ''); ?>
/
P_CONTRACT_PRICE, 2, ',', ''); ?>)
Zysk (netto) : zysk, 2, ',', ''); ?>
%: zysk * $procent / 100, 2, ',', ''); ?>
Abonament miesięczny (brutto) :
w promocyjnych mies.:
po promocji:
html = ob_get_contents();
ob_clean();
return $jsonData;
}
public function ajaxUmowaZysk() {
$jsonData = new stdClass();
try {
$jsonData = $this->ajaxUmowaZysk_createJson();
}
catch (Exception $e) {
$jsonData->type = 'error';
$jsonData->msg = $e->getMessage();
}
echo json_encode($jsonData);
exit;
}
public function defaultAction() {
$_GET['S_ADDRESS_STREET'] = V::get('S_ADDRESS_STREET', '', $_GET);
$_GET['print'] = V::get('print', '', $_GET);
$_GET['user_id'] = V::get('user_id', '', $_GET, 'int');
if (!$_GET['print']) {
MENU();
}
?>
print_jquery_ui();
function get_rewir_info($rewir) {
$ret = array('TV'=>false, 'SPD'=>0);// budynek has TV, SPD - max lan speed
if (!$rewir) {
return $ret;
}
echo "\n".''."\n";
return $ret;
}
function get_building_a_status_info($status) {
$building_a_status_info = '';
switch ($status) {
/* SELECT COUNT( * ) AS `Rekordów` , `A_STATUS` FROM `BUILDINGS` GROUP BY `A_STATUS` ORDER BY `A_STATUS` ;
337 NORMAL
13 WARNING
2
139 WAITING
596 MONITOR
2 TO_OFF
35 DELETED
*/
case 'NORMAL':
$building_a_status_info .= " - oznacza to, że zasób jest dostępny do podpisywania umów.";
break;
case 'WARNING':
$building_a_status_info .= "Uwaga! budynek podłączony do naszej sieci, ale z powodów technicznych część lub cały budynek nie spełnia standardów podłączenia (np. dłuższy termin podłączenia z powodu braku pionu). W takim wypadku należy zastosować się do informacji wprowadzonych w polu T INSTALACJA W CIAGU DNI i powiadomić o tym klienta";
break;
case 'WAITING':
$building_a_status_info .= "Uwaga! Budynek, który prawdopodobnie zostanie podłączony, zgodnie z informacjami z T INSTALACJA W CIAGU DNI. W razie wątpliwości należy zweryfikować w tabeli budynków";
break;
case 'MONITOR':
$building_a_status_info .= "Uwaga! Budynek nie znajduje się w zasięgu sieci. Firma prowadzi analizę zainteresowania podłączeniem i jego opłacalności. Należy wykonać badanie!";
break;
default:
$building_a_status_info .= " - Status rekordu powinien wynosić \"NORMAL\" - oznacza to, że zasób jest dostępny do podpisywania umów. Jeżeli zasób ma status np. \"WAITING\" - oznacza to, że jest aktualnie budowany przez dział inwestycji i należy sprawdzić dokładnie dalsze właściwości zasobu w celu odpowiedniego poinformowania klienta o terminie instalacji oraz zakresie możliwych usług do sprzedaży. Status \"MONITOR\" oznacza, że zasób jest brany pod uwagę do inwestycji - należy prowadzić akcje marketingowe. Kwestia podpisywania umów jest zależna od cech danego rekordu (budynku).";
}
return $building_a_status_info;
}
if (!$_GET['print']) {
?>
POKAZ_OFERTY_AKTUALNE
print_ui_widget_errors("Podaj skrót adresu");
return;
}
$building = 0;// wybrany budynek
$buildings = PokazOfertyHelper::get_buildings_by_mieszk($_GET['S_ADDRESS_STREET']);
if (empty($buildings)) {
echo $view->print_ui_widget_errors("Brak danych");
return;
}
{// budynki i mieszkanie info
$buildings_sql_cols = PokazOfertyHelper::get_buildings_cols();
if (count($buildings) == 1) {
$building = reset($buildings);
$marketing_sql_cols = PokazOfertyHelper::get_marketing_cols();
echo '';
echo '' . '' . '' . "Budynek" . ' ' . '' . "Mieszkanie" . ' ' . ' ' . ' ';
echo '' . '';
echo '';
echo '';
echo '';
if ($building->ID <= 0) {
echo '';
echo '' . "Bledne dane:";
if (empty($building->m__T_TELBOX_BUILDING_IN)) {
echo ' ' . "Brak wypełnionego pola T_TELBOX_BUILDING_IN w mieszkaniach.";
} else if ($building->ID <= 0) {
echo ' ' . "Brak przypisanego mieszkania (T_TELBOX_BUILDING_IN={$building->m__T_TELBOX_BUILDING_IN}).";
}
echo '
';
echo ' ';
}
else {
foreach ($buildings_sql_cols as $k_sql_field => $v_label) {
echo '';
if ($k_sql_field == 'A_STATUS') {
$building_title = '';
switch ($building->A_STATUS) {
case 'NORMAL':
$building_title = " - oznacza to, że zasób jest dostępny do podpisywania umów.";
break;
case 'WARNING':
$building_title = "Uwaga! budynek podłączony do naszej sieci, ale z powodów technicznych część lub cały budynek nie spełnia standardów podłączenia (np. dłuższy termin podłączenia z powodu braku pionu). W takim wypadku należy zastosować się do informacji wprowadzonych w polu T INSTALACJA W CIAGU DNI i powiadomić o tym klienta";
break;
case 'WAITING':
$building_title = "Uwaga! Budynek, który prawdopodobnie zostanie podłączony, zgodnie z informacjami z T INSTALACJA W CIAGU DNI. W razie wątpliwości należy zweryfikować w tabeli budynków";
break;
case 'MONITOR':
$building_title = "Uwaga! Budynek nie znajduje się w zasięgu sieci. Firma prowadzi analizę zainteresowania podłączeniem i jego opłacalności. Należy wykonać badanie!";
break;
default:
$building_title = " - Status rekordu powinien wynosić \"NORMAL\" - oznacza to, że zasób jest dostępny do podpisywania umów. Jeżeli zasób ma status np. \"WAITING\" - oznacza to, że jest aktualnie budowany przez dział inwestycji i należy sprawdzić dokładnie dalsze właściwości zasobu w celu odpowiedniego poinformowania klienta o terminie instalacji oraz zakresie możliwych usług do sprzedaży. Status \"MONITOR\" oznacza, że zasób jest brany pod uwagę do inwestycji - należy prowadzić akcje marketingowe. Kwestia podpisywania umów jest zależna od cech danego rekordu (budynku).";
}
echo '' . $v_label . ' ' . '';
echo '' . $building->A_STATUS . ' ';
echo ' ';
} else if ($k_sql_field == 'T_INSTALACJA_W_CIAGU_DNI') {
echo '' . $v_label . ' ' . '' . $building->$k_sql_field . ' ';
} else {
echo '' . $v_label . ' ' . '' . $building->$k_sql_field . ' ';
}
echo ' ';
}
}
echo ' ';
echo '
';
echo ' ';
echo '';
echo '';
echo '';
foreach ($marketing_sql_cols as $k_sql_field => $v_label) {
echo '';
$k_sql_field = 'm__' . $k_sql_field;
echo '' . $v_label . ' ' . '' . $building->$k_sql_field . ' ';
echo ' ';
}
echo ' ';
echo '
';
echo ' ';
echo ' ' . ' ';
echo '
';
}
else {// old way - should be only one
echo '';
echo'';
echo'';
foreach ($buildings_sql_cols as $k => $v) {
if ($k == 'ID') {
echo''." ".' ';
} else {
echo''.$v.' ';
}
if ($k == 'M_REWIR') {
echo''."TV".' ';
echo''."SPD (Mbit/sek)".' ';
}
}//end foreach
echo' ';
echo' ';
foreach ($buildings as $r) {
echo'';
foreach ($buildings_sql_cols as $k => $v) {
$cls = '';
if ($k == 'A_STATUS') {
$cls = ' class="cell-A_STATUS-'.$r->$k.'"';
}
echo'';
if ($k == 'ID') {
echo'S_ADDRESS_STREET.'">'."Wybierz".' ';
} else {
echo $r->$k;
}
echo' ';
if ($k == 'M_REWIR') {
$rewir_info = get_rewir_info($r->M_REWIR);
echo''.(($rewir_info['TV'])? ''."TAK".' ' : ''."NIE".' ').' ';
echo''.(($rewir_info['SPD'] > 0)? $rewir_info['SPD'] : ''."NIE".' ').' ';
}
}
echo' ';
}
echo'
';
}
}// budynki info
// jesli tylko 1 to szukaj ofert (S_ADDRESS_STREET uniq)
if (count($buildings) == 1) {
$building = reset($buildings);
}
if (!$building) {
echo $view->print_ui_widget_errors("Wybierz budynek");
return;
}
if ($building->ID <= 0) {
echo $view->print_ui_widget_errors("Brak budynku lub błędne dane.");
return;
}
$building_status_info = get_building_a_status_info($building->A_STATUS);
$building_status_title = "A_STATUS: " . '' . $building->A_STATUS . ' ';
if (in_array($building->A_STATUS, array('WAITING', 'MONITOR'))) {
echo ' ' . $view->print_ui_widget_errors($building_status_title . ' ' . $building_status_info);
} else {
echo $view->print_ui_widget_info($building_status_title, $building_status_info);
}
if (!in_array($building->A_STATUS, array('NORMAL', 'WARNING', 'WAITING', 'MONITOR'))) {
$info = "W przypadku gdy klient jest zainteresowany ofertą na adresie, na którym nie możemy jeszcze świadczyć naszych usług proszę wyszukać i przedstawić oferty standardowe dla adresu: ";
$info .= '' . "CI50/1" . ' ';
$info .= " Przedstawiamy ofertę tylko informacyjnie, nie podpisujemy umowy ze względu na brak możliwości podłączenia klienta!";
echo ' ' . $view->print_ui_widget_errors($info);
return;
}
$rewir_info = get_rewir_info( $building->M_REWIR );
{// M_REWIR
$rewir_msg = '';
if ($rewir_info['TV']) {
$rewir_msg .= " Można oferować TV.";
} else if($rewir_info['GPON']) {
$rewir_msg .= " Można oferować TV w technologii GPON ";
} else {
$rewir_msg .= ' '."Nie można oferować TV.".' ';
}
if ($rewir_info['SPD'] > 0) {
$rewir_msg .= " Można ofertować Internet max ".$rewir_info['SPD']." Mbit/sek.";
} else {
$rewir_msg .= ' '."Nie można oferować Internetu.".' ';
}
if (!empty($rewir_info['TV_NOTE'])) {
$rewir_msg .= ' ' . '' . "Uwaga: " . $rewir_info['TV_NOTE'] . ' ';
}
if (!empty($rewir_msg)) {
echo $view->print_ui_widget_info($rewir_msg);
}
}// M_REWIR
// search oferty:
$DBG = V::get('DBG', 0, $_GET, 'int');
$oferty_group_cols = array();
$oferty_group_cols['0_1380'] = array('label'=>"", 'title'=>"", 'field'=>"ID");
//$oferty_group_cols['0_COMPANY'] = array('label'=>"nazwa firmy", 'title'=>, 'field'=>"P_SERVICE_COMPANY");
$oferty_group_cols['0_451'] = array('label'=>"nazwa promocji", 'title'=>"", 'field'=>'P_PROMOTION_NAME');
$oferty_group_cols['0_456'] = array('label'=>"okres umowy", 'title'=>"", 'field'=>'P_DEALTERM_MONTHS');
$oferty_group_cols['0_1579'] = array('label'=>"ważna od", 'title'=>"", 'field'=>'P_OFFER_TERM_BEGIN');
$oferty_group_cols['0_464'] = array('label'=>"ważna do", 'title'=>"", 'field'=>'P_OFFER_TERM');
$oferty_group_cols['0_1743_ID_NET'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na Internet", 'field'=>'ID_NET');
$oferty_group_cols['0_1744_ID_TV'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na Telewizję", 'field'=>'ID_TV');
$oferty_group_cols['0_1745_ID_TVC'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na TV Cyfrową", 'field'=>'ID_TVC');
//$oferty_group_cols['0_1746_ID_TVCP'] = array('label'=>"", 'title'=>"Jakie są dostępne w tej ofercie pakiety cyfrowe (ile kosztuja)", 'field'=>'ID_TVCP');
$oferty_group_cols['0_1747_ID_TEL'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na Telefon", 'field'=>'ID_TEL');
$oferty_group_cols['0_2621_ID_TVCP_1'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na pakiet TV Cyfrowej", 'field'=>'ID_TVCP_1');
$oferty_group_cols['0_2622_ID_TVCP_2'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na pakiet TV Cyfrowej", 'field'=>'ID_TVCP_2');
$oferty_group_cols['0_2623_ID_TVCP_3'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na pakiet TV Cyfrowej", 'field'=>'ID_TVCP_3');
//$oferty_group_cols['0_2624_ID_TVCP_4'] = array('label'=>"", 'title'=>"Jakiej dotyczy oferty na pakiet TV Cyfrowej", 'field'=>'ID_TVCP_4');
$oferty_group_cols['0_1627'] = array('label'=>"", 'title'=>"", 'field'=>'M_REWIR');
$oferty_cols = array();
$oferty_cols_desc = array();
$oferty_cols_desc['0_1743_ID_NET'] = 'NET';
$oferty_cols_desc['0_1744_ID_TV'] = 'TV';
$oferty_cols_desc['0_1745_ID_TVC'] = 'TVC';
$oferty_cols_desc['0_2621_ID_TVCP_1'] = 'TVCP';
$oferty_cols_desc['0_2622_ID_TVCP_2'] = 'TVCP';
$oferty_cols_desc['0_2623_ID_TVCP_3'] = 'TVCP';
$oferty_cols_desc['0_1747_ID_TEL'] = 'TEL';
$oferty_cols['0_1743_ID_NET'] = array();
$oferty_cols['0_1743_ID_NET']['1_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_1743_ID_NET']['1_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_1743_ID_NET']['1_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_1743_ID_NET']['1_458'] = array('label'=>"Promocyjna cena instalacji/aktywacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_1743_ID_NET']['t1_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_1743_ID_NET']['1_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_1743_ID_NET']['1_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_1743_ID_NET']['1_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_1743_ID_NET']['1_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_1743_ID_NET']['t1_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_1743_ID_NET']['t1_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_1743_ID_NET']['t1_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_1743_ID_NET']['[1_452]'] = array('label'=>"DOWNLOAD", 'field'=>'P_S_PARAM1');
$oferty_cols['0_1743_ID_NET']['[1_453]'] = array('label'=>"UPLOAD", 'field'=>'P_S_PARAM2');
$oferty_cols['0_1743_ID_NET']['[1_454]'] = array('label'=>"Limit ściągania danych", 'field'=>'P_S_LIMIT');
$oferty_cols['0_1743_ID_NET']['[1_462]'] = array('label'=>"Wielkość w MegaBajtach konta pocztowego", 'field'=>'P_S_MAILBOX_SIZE');
$oferty_cols['0_1743_ID_NET']['[1_463]'] = array('label'=>"Pojemność strony: (MB)", 'field'=>'P_S_WWW_SIZE');
$oferty_cols['0_1744_ID_TV'] = array();
$oferty_cols['0_1744_ID_TV']['2_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_1744_ID_TV']['2_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_1744_ID_TV']['2_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_1744_ID_TV']['2_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_1744_ID_TV']['t2_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_1744_ID_TV']['2_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_1744_ID_TV']['2_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_1744_ID_TV']['2_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_1744_ID_TV']['2_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_1744_ID_TV']['t2_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_1744_ID_TV']['t2_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_1744_ID_TV']['t2_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_1745_ID_TVC'] = array();
$oferty_cols['0_1745_ID_TVC']['3_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_1745_ID_TVC']['3_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_1745_ID_TVC']['3_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_1745_ID_TVC']['3_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_1745_ID_TVC']['t3_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_1745_ID_TVC']['3_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_1745_ID_TVC']['3_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_1745_ID_TVC']['3_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_1745_ID_TVC']['3_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_1745_ID_TVC']['t3_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_1745_ID_TVC']['t3_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_1745_ID_TVC']['t3_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_2621_ID_TVCP_1'] = array();
$oferty_cols['0_2621_ID_TVCP_1']['4_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_2621_ID_TVCP_1']['4_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_2621_ID_TVCP_1']['4_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_2621_ID_TVCP_1']['4_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_2621_ID_TVCP_1']['t4_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_2621_ID_TVCP_1']['4_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_2621_ID_TVCP_1']['4_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_2621_ID_TVCP_1']['4_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_2621_ID_TVCP_1']['4_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_2621_ID_TVCP_1']['t4_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_2621_ID_TVCP_1']['t4_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_2621_ID_TVCP_1']['t4_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_2622_ID_TVCP_2'] = array();
$oferty_cols['0_2622_ID_TVCP_2']['6_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_2622_ID_TVCP_2']['6_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_2622_ID_TVCP_2']['6_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_2622_ID_TVCP_2']['6_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_2622_ID_TVCP_2']['t6_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_2622_ID_TVCP_2']['6_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_2622_ID_TVCP_2']['6_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_2622_ID_TVCP_2']['6_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_2622_ID_TVCP_2']['6_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_2622_ID_TVCP_2']['t6_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_2622_ID_TVCP_2']['t6_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_2622_ID_TVCP_2']['t6_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_2623_ID_TVCP_3'] = array();
$oferty_cols['0_2623_ID_TVCP_3']['7_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_2623_ID_TVCP_3']['7_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_2623_ID_TVCP_3']['7_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_2623_ID_TVCP_3']['7_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_2623_ID_TVCP_3']['t7_1578'] = array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_2623_ID_TVCP_3']['7_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_2623_ID_TVCP_3']['7_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_2623_ID_TVCP_3']['7_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_2623_ID_TVCP_3']['7_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_2623_ID_TVCP_3']['t7_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_2623_ID_TVCP_3']['t7_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_2623_ID_TVCP_3']['t7_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_cols['0_1747_ID_TEL'] = array();
$oferty_cols['0_1747_ID_TEL']['5_1385'] = array('label'=>"ID oferty", 'field'=>'ID');
// $oferty_cols['0_1747_ID_TEL']['5_449'] = array('label'=>"Typ usługi", 'field'=>'P_SERVICE');
$oferty_cols['0_1747_ID_TEL']['5_450'] = array('label'=>"Nazwa oferty", 'field'=>'P_SERVICE_NAME');
$oferty_cols['0_1747_ID_TEL']['5_458'] = array('label'=>"Promocyjna cena instalacji (brutto)", 'field'=>'P_INSTALL_QUOTE');
// $oferty_cols['0_1747_ID_TEL']['t5_1578']= array('label'=>"Nominalna cena opłaty instalacyjnej (brutto)", 'field'=>'P_INSTALL_QUOTE_NORMAL');
$oferty_cols['0_1747_ID_TEL']['5_459'] = array('label'=>"Cena abonamentu po promocji (brutto)", 'field'=>'P_CONTRACT_PRICE');
$oferty_cols['0_1747_ID_TEL']['5_460'] = array('label'=>"Wartość abonamentu w promocyjnych miesiącach (brutto)", 'field'=>'P_PROMO_MONTH_PRICE');
$oferty_cols['0_1747_ID_TEL']['5_461'] = array('label'=>"Nominalna wartość abonamentu (brutto)", 'field'=>'P_NORMAL_PRICE');
$oferty_cols['0_1747_ID_TEL']['5_457'] = array('label'=>"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_cols['0_1747_ID_TEL']['t5_srednia'] = array('label'=>"srednia (brutto)", 'field'=>'srednia');
$oferty_cols['0_1747_ID_TEL']['t5_srednia_netto'] = array('field'=>'srednia_netto');
$oferty_cols['0_1747_ID_TEL']['t5_1580'] = array('label'=>"Upust od ceny normalnej do wyliczeń kary (brutto)", 'field'=>'P_DISCOUNT_TOTAL');
$oferty_filters = array();
$oferty_filters['f_COM'] = array('label'=>"COMPANY", 'values'=>array('BIALL-NET'=>"t0.`P_SERVICE_COMPANY`='BN'", 'NETDAY'=>"t0.`P_SERVICE_COMPANY`='NETDAY'"), 'default'=>"BIALL-NET");
$oferty_filters['f_A_STATUS'] = array('label'=>"Oferty A_STATUS", 'default'=>"NORMAL");
$oferty_filters['f_A_STATUS']['values'] = array();
$oferty_filters['f_A_STATUS']['values']['NORMAL'] = "t0.`A_STATUS`='NORMAL'";
$oferty_filters['f_A_STATUS']['values']['WSZYSTKIE'] = "t0.`A_STATUS`in('WAITING','NORMAL')";
$oferty_filters['f_A_STATUS']['values']['TEST'] = "t0.`A_STATUS`in('WAITING','NORMAL','MONITOR')";
$oferty_filters['f_ID_NET'] = array('label'=>"Internet", 'values'=>array('MOZE'=>"", 'TAK'=>"t0.`ID_NET`>0", 'NIE'=>"t0.`ID_NET`=0"), 'default'=>"MOZE");
$oferty_filters['f_ID_TV'] = array('label'=>"TV", 'values'=>array('MOZE'=>"", 'TAK'=>"t0.`ID_TV`>0", 'NIE'=>"t0.`ID_TV`=0"), 'default'=>"MOZE");
$oferty_filters['f_ID_TVC'] = array('label'=>"TVC", 'values'=>array('MOZE'=>"", 'TAK'=>"t0.`ID_TVC`>0", 'NIE'=>"t0.`ID_TVC`=0"), 'default'=>"MOZE");
$oferty_filters['f_ID_TVCP'] = array('label'=>"TVCP", 'values'=>array('MOZE'=>"", 'TAK'=>"(t0.`ID_TVCP_1`>0 or t0.`ID_TVCP_2`>0 or t0.`ID_TVCP_3`>0)", 'NIE'=>"(t0.`ID_TVCP_1`=0 and t0.`ID_TVCP_2`=0 and t0.`ID_TVCP_3`=0)"), 'default'=>"MOZE");
$oferty_filters['f_ID_TEL'] = array('label'=>"TEL", 'values'=>array('MOZE'=>"", 'TAK'=>"t0.`ID_TEL`>0", 'NIE'=>"t0.`ID_TEL`=0"), 'default'=>"MOZE");
$oferty_filters['f_P_DEALTERM_MONTHS'] = array('label'=>"okres umowy", 'values'=>array(
'WSZYSTKIE'=>""
, '24'=>"t0.`P_DEALTERM_MONTHS`='24'"
, '18'=>"t0.`P_DEALTERM_MONTHS`='18'"
, '12'=>"t0.`P_DEALTERM_MONTHS`='12'"
// , 'INNE'=>"t0.`P_DEALTERM_MONTHS` not in ('24','18','12')"
), 'default'=>"WSZYSTKIE");
$oferty_filters['f_P_OFFER_TARGET'] = array('label'=>"OFFER TARGET", 'values'=>array('WSZYSTKIE'=>""), 'help'=>array(), 'default'=>"WSZYSTKIE");
SEF('P_OFFER_TARGET');
$target_params = P_OFFER_TARGET('', '', array('task' => 'get_all_params'));
if (!empty($target_params)) {
foreach ($target_params['targets'] as $k_name => $v_opis) {
$oferty_filters['f_P_OFFER_TARGET']['values'][$k_name] = "t0.`P_OFFER_TARGET`='{$k_name}'";
$oferty_filters['f_P_OFFER_TARGET']['help'][$k_name] = $v_opis;
}
foreach ($target_params['colors'] as $k_name => $v_color) {
$oferty_filters['f_P_OFFER_TARGET']['color'][$k_name] = $v_color;
}
}
$oferty_filters_pomin = array();
foreach ($oferty_filters as $k_filter => $v_params) {
$oferty_filters[$k_filter]['value'] = V::get($k_filter, $v_params['default'], $_GET);
}
$sql_where_filter_add = "";
{// prepare sql
$sql_where_filter_add_arr = array();
{// oferty_filters_pomin
foreach ($oferty_filters as $k_field => $v_params) {
if (substr($k_field, 0, 5) == 'f_ID_') {
$curr_service = substr($k_field, 5);
//if (!in_array($curr_service, $services)) {
// $oferty_filters_pomin []= $k_field;
// continue;
//}
}
if ($v_params['values'][ $v_params['value'] ]) {
$sql_where_filter_add_arr []= $v_params['values'][ $v_params['value'] ];
}
}
}// oferty_filters_pomin
$sql_where_filter_add = (!empty($sql_where_filter_add_arr))? " and ".implode(" and ", $sql_where_filter_add_arr) : "";
//$sql_P_SERVICE_COMPANY = 'BN';
}// prepare sql
//$sql_where_rewir_add = "'".$building->M_REWIR."' like t0.`M_REWIR`";
$sql_where_rewir_add_company = '';
{
if ($oferty_filters['f_COM']['value'] == 'BIALL-NET') {
$sql_where_rewir_add_company = " and sub_g.`P_SERVICE_COMPANY`='BN' ";
} else if ($oferty_filters['f_COM']['value'] == 'NETDAY') {
$sql_where_rewir_add_company = " and sub_g.`P_SERVICE_COMPANY`='NETDAY' ";
}
}
$sql_where_rewir_add = "IF( (
select count(1)
from `USERS2_OFFERS_GROUPS` as sub_g
where sub_g.`M_REWIR`='{$building->M_REWIR}' and sub_g.`A_STATUS`='NORMAL'
{$sql_where_rewir_add_company}
limit 1
) > 0
, '{$building->M_REWIR}'=t0.`M_REWIR`
, '{$building->M_REWIR}' like t0.`M_REWIR`
)";
$sql = "
SELECT
t0.`ID` as `0_1380` ,
t0.`P_SERVICE_COMPANY` as `0_COMPANY`,
t0.`P_PROMOTION_NAME` as `0_451` ,
t0.`S_ALIAS` as `0_S_ALIAS` ,
t0.`P_DEALTERM_MONTHS` as `0_456` ,
t0.`P_OFFER_TERM_BEGIN` as `0_1579`, t0.P_OFFER_TERM as `0_464` ,
t0.`M_REWIR` as `0_447` ,
-- concat('|',(select group_concat(S_ADDRESS_STREET, '|') from BUILDINGS where M_REWIR like concat(t0.M_REWIR,'%') limit 1),'|') as `x_410`,
t0.`ID_NET` as `0_1743_ID_NET` ,
t0.`ID_TV` as `0_1744_ID_TV` ,
t0.`ID_TVC` as `0_1745_ID_TVC` ,
t0.`ID_TVCP` as `0_1746_ID_TVCP` ,
t0.`ID_TVCP_1` as `0_2621_ID_TVCP_1` ,
t0.`ID_TVCP_2` as `0_2622_ID_TVCP_2` ,
t0.`ID_TVCP_3` as `0_2623_ID_TVCP_3` ,
t0.`ID_TVCP_4` as `0_2624_ID_TVCP_4` ,
t0.`ID_TEL` as `0_1747_ID_TEL` ,
t0.`M_REWIR` as `0_1627` ,
t0.`P_OFFER_TARGET` as `P_OFFER_TARGET` ,
-- internet:
t1.ID as `1_1385` ,
t1.P_SERVICE as `1_449` ,
t1.P_SERVICE_NAME as `1_450` ,
t1.P_INSTALL_QUOTE as `1_458` , t1.P_INSTALL_QUOTE_NORMAL as `t1_1578`,
t1.P_CONTRACT_PRICE as `1_459` ,
t1.P_PROMO_MONTH_PRICE as `1_460` ,
t1.P_NORMAL_PRICE as `1_461` ,
t1.P_DEAL_PROMO_MONTHS as `1_457` ,
-- (t1.P_NORMAL_PRICE-t1.P_PROMO_MONTH_PRICE)*t0.P_DEALTERM_MONTHS+(t1.P_INSTALL_QUOTE_NORMAL-t1.P_INSTALL_QUOTE) as `t1_1580`,
-- (t1.P_NORMAL_PRICE-t1.P_CONTRACT_PRICE)*t0.P_DEALTERM_MONTHS+(t1.P_INSTALL_QUOTE_NORMAL-t1.P_INSTALL_QUOTE) as `t1_1580`,
t1.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t1.P_DEAL_PROMO_MONTHS*t1.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t1.P_DEAL_PROMO_MONTHS)*t1.P_CONTRACT_PRICE + (t1.P_INSTALL_QUOTE_NORMAL-t1.P_INSTALL_QUOTE) as `t1_1580`,
ROUND(( ((t0.P_DEALTERM_MONTHS-t1.P_DEAL_PROMO_MONTHS)*t1.P_CONTRACT_PRICE) + (t1.P_DEAL_PROMO_MONTHS*t1.P_PROMO_MONTH_PRICE) + (t1.P_INSTALL_QUOTE))/t0.P_DEALTERM_MONTHS, 2) as `t1_srednia`,
ROUND(( ((t0.P_DEALTERM_MONTHS-t1.P_DEAL_PROMO_MONTHS)*t1.P_CONTRACT_PRICE_NETTO) + (t1.P_DEAL_PROMO_MONTHS*t1.P_PROMO_MONTH_PRICE_NETTO) + (t1.P_INSTALL_QUOTE/1.23))/t0.P_DEALTERM_MONTHS, 2) as `t1_srednia_netto`,
t1.P_S_PARAM1 as `[1_452]` , t1.P_S_PARAM2 as `[1_453]` , t1.P_S_LIMIT as `[1_454]`, t1.P_S_MAILBOX_SIZE as `[1_462]`, t1.P_S_WWW_SIZE as `[1_463]` ,
if(t1.ID,t0.P_PROMOTION_NAME,'') as `1_451` ,
-- telewizja analogowa
t2.ID as `2_1385` ,
t2.P_SERVICE as `2_449` ,
t2.P_SERVICE_NAME as `2_450` ,
t2.P_INSTALL_QUOTE as `2_458` , t2.P_INSTALL_QUOTE_NORMAL as `t2_1578`,
t2.P_CONTRACT_PRICE as `2_459` ,
t2.P_PROMO_MONTH_PRICE as `2_460` ,
t2.P_NORMAL_PRICE as `2_461` ,
t2.P_DEAL_PROMO_MONTHS as `2_457` ,
-- (t2.P_NORMAL_PRICE-t2.P_PROMO_MONTH_PRICE)*t0.P_DEALTERM_MONTHS+(t2.P_INSTALL_QUOTE_NORMAL-t2.P_INSTALL_QUOTE) as `t2_1580`,
-- (t2.P_NORMAL_PRICE-t2.P_CONTRACT_PRICE)*t0.P_DEALTERM_MONTHS+(t2.P_INSTALL_QUOTE_NORMAL-t2.P_INSTALL_QUOTE) as `t2_1580`,
t2.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t2.P_DEAL_PROMO_MONTHS*t2.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t2.P_DEAL_PROMO_MONTHS)*t2.P_CONTRACT_PRICE + (t2.P_INSTALL_QUOTE_NORMAL-t2.P_INSTALL_QUOTE) as `t2_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t2.P_DEAL_PROMO_MONTHS)*t2.P_CONTRACT_PRICE + t2.P_DEAL_PROMO_MONTHS*t2.P_PROMO_MONTH_PRICE + t2.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t2_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t2.P_DEAL_PROMO_MONTHS)*t2.P_CONTRACT_PRICE_NETTO + t2.P_DEAL_PROMO_MONTHS*t2.P_PROMO_MONTH_PRICE_NETTO + t2.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t2_srednia_netto`,
if(t0.ID='1','',if(t2.ID,'TAK','NIE')) as `2_IF` ,
if(t2.ID,t0.P_PROMOTION_NAME,'') as `2_451` ,
-- telewizja cyfrowa
t3.ID as `3_1385` ,
t3.P_SERVICE as `3_449` ,
t3.P_SERVICE_NAME as `3_450` ,
t3.P_INSTALL_QUOTE as `3_458` , t3.P_INSTALL_QUOTE_NORMAL as `3_1578`,
t3.P_CONTRACT_PRICE as `3_459` ,
t3.P_PROMO_MONTH_PRICE as `3_460` ,
t3.P_NORMAL_PRICE as `3_461` ,
t3.P_DEAL_PROMO_MONTHS as `3_457` ,
-- (t3.P_NORMAL_PRICE-t3.P_PROMO_MONTH_PRICE)*t0.P_DEALTERM_MONTHS+(t3.P_INSTALL_QUOTE_NORMAL-t3.P_INSTALL_QUOTE) as `t3_1580`,
-- (t3.P_NORMAL_PRICE-t3.P_CONTRACT_PRICE)*t0.P_DEALTERM_MONTHS+(t3.P_INSTALL_QUOTE_NORMAL-t3.P_INSTALL_QUOTE) as `t3_1580`,
t3.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t3.P_DEAL_PROMO_MONTHS*t3.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t3.P_DEAL_PROMO_MONTHS)*t3.P_CONTRACT_PRICE + (t3.P_INSTALL_QUOTE_NORMAL-t3.P_INSTALL_QUOTE) as `t3_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t3.P_DEAL_PROMO_MONTHS)*t3.P_CONTRACT_PRICE + t3.P_DEAL_PROMO_MONTHS*t3.P_PROMO_MONTH_PRICE + t3.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t3_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t3.P_DEAL_PROMO_MONTHS)*t3.P_CONTRACT_PRICE_NETTO + t3.P_DEAL_PROMO_MONTHS*t3.P_PROMO_MONTH_PRICE_NETTO + t3.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t3_srednia_netto`,
if(t0.ID='1','',if(t3.ID,'TAK','NIE')) as `3_IF` ,
if(t3.ID,t0.P_PROMOTION_NAME,'') as `3_451` ,
-- 2169 S_DEKODER_SD_OPTION
-- 2170 S_MODUL_PCMCIA_OPTION
-- 2171 S_DEKODER_HD_OPTION
if(t2.S_DEKODER_SD_OPTION='TAK','X','') as `1_2169_TAK` ,
if(t2.S_DEKODER_SD_OPTION='NIE','X','') as `1_2169_NIE` ,
if(t2.S_MODUL_PCMCIA_OPTION='TAK','X','') as `1_2170_TAK` ,
if(t2.S_MODUL_PCMCIA_OPTION='NIE','X','') as `1_2170_NIE` ,
if(t2.S_DEKODER_HD_OPTION='TAK','X','') as `1_2171_TAK` ,
if(t2.S_DEKODER_HD_OPTION='NIE','X','') as `1_2171_NIE` ,
-- telewizja cyfrowa pakiety
t4.ID as `4_1385` ,
t4.P_SERVICE as `4_449` ,
t4.P_SERVICE_NAME as `4_450` ,
t4.P_INSTALL_QUOTE as `4_458` , t4.P_INSTALL_QUOTE_NORMAL as `t4_1578`,
t4.P_CONTRACT_PRICE as `4_459` ,
t4.P_PROMO_MONTH_PRICE as `4_460` ,
t4.P_NORMAL_PRICE as `4_461` ,
t4.P_DEAL_PROMO_MONTHS as `4_457` ,
-- (t4.P_NORMAL_PRICE-t4.P_PROMO_MONTH_PRICE)*t0.P_DEALTERM_MONTHS+(t4.P_INSTALL_QUOTE_NORMAL-t4.P_INSTALL_QUOTE) as `t4_1580`,
-- (t4.P_NORMAL_PRICE-t4.P_CONTRACT_PRICE)*t0.P_DEALTERM_MONTHS+(t4.P_INSTALL_QUOTE_NORMAL-t4.P_INSTALL_QUOTE) as `t4_1580`,
t4.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t4.P_DEAL_PROMO_MONTHS*t4.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t4.P_DEAL_PROMO_MONTHS)*t4.P_CONTRACT_PRICE + (t4.P_INSTALL_QUOTE_NORMAL-t4.P_INSTALL_QUOTE) as `t4_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t4.P_DEAL_PROMO_MONTHS)*t4.P_CONTRACT_PRICE + t4.P_DEAL_PROMO_MONTHS*t4.P_PROMO_MONTH_PRICE + t4.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t4_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t4.P_DEAL_PROMO_MONTHS)*t4.P_CONTRACT_PRICE_NETTO + t4.P_DEAL_PROMO_MONTHS*t4.P_PROMO_MONTH_PRICE_NETTO + t4.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t4_srednia_netto`,
if(t0.ID='1','',if(t4.ID,'TAK','NIE')) as `4_IF` ,
if(t4.ID,t0.P_PROMOTION_NAME,'') as `4_451` ,
-- telefon
t5.ID as `5_1385` ,
t5.P_SERVICE as `5_449` ,
t5.P_SERVICE_NAME as `5_450` ,
t5.P_INSTALL_QUOTE as `5_458` , t5.P_INSTALL_QUOTE_NORMAL as `t5_1578`,
t5.P_CONTRACT_PRICE as `5_459` ,
t5.P_PROMO_MONTH_PRICE as `5_460` ,
t5.P_NORMAL_PRICE as `5_461` ,
t5.P_DEAL_PROMO_MONTHS as `5_457` ,
-- (t5.P_NORMAL_PRICE-t5.P_PROMO_MONTH_PRICE)*t0.P_DEALTERM_MONTHS+(t5.P_INSTALL_QUOTE_NORMAL-t5.P_INSTALL_QUOTE) as `t5_1580`,
-- (t5.P_NORMAL_PRICE-t5.P_CONTRACT_PRICE)*t0.P_DEALTERM_MONTHS+(t5.P_INSTALL_QUOTE_NORMAL-t5.P_INSTALL_QUOTE) as `t5_1580`,
t5.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t5.P_DEAL_PROMO_MONTHS*t5.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t5.P_DEAL_PROMO_MONTHS)*t5.P_CONTRACT_PRICE + (t5.P_INSTALL_QUOTE_NORMAL-t5.P_INSTALL_QUOTE) as `t5_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t5.P_DEAL_PROMO_MONTHS)*t5.P_CONTRACT_PRICE + t5.P_DEAL_PROMO_MONTHS*t5.P_PROMO_MONTH_PRICE + t5.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t5_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t5.P_DEAL_PROMO_MONTHS)*t5.P_CONTRACT_PRICE_NETTO + t5.P_DEAL_PROMO_MONTHS*t5.P_PROMO_MONTH_PRICE_NETTO + t5.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t5_srednia_netto`,
if(t0.ID='1','',if(t5.ID,'TAK','NIE')) as `5_IF` ,
if(t5.ID,t0.P_PROMOTION_NAME,'') as `5_451`,
t5.ID_DOMAINS_PACKET_ID as `5_3898` ,
-- telewizja cyfrowa pakiety 2
t6.ID as `6_1385` ,
t6.P_SERVICE as `6_449` ,
t6.P_SERVICE_NAME as `6_450` ,
t6.P_INSTALL_QUOTE as `6_458` , t6.P_INSTALL_QUOTE_NORMAL as `t6_1578`,
t6.P_CONTRACT_PRICE as `6_459` ,
t6.P_PROMO_MONTH_PRICE as `6_460` ,
t6.P_NORMAL_PRICE as `6_461` ,
t6.P_DEAL_PROMO_MONTHS as `6_457` ,
t6.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t6.P_DEAL_PROMO_MONTHS*t6.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t6.P_DEAL_PROMO_MONTHS)*t6.P_CONTRACT_PRICE + (t6.P_INSTALL_QUOTE_NORMAL-t6.P_INSTALL_QUOTE) as `t6_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t6.P_DEAL_PROMO_MONTHS)*t6.P_CONTRACT_PRICE + t6.P_DEAL_PROMO_MONTHS*t6.P_PROMO_MONTH_PRICE + t6.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t6_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t6.P_DEAL_PROMO_MONTHS)*t6.P_CONTRACT_PRICE_NETTO + t6.P_DEAL_PROMO_MONTHS*t6.P_PROMO_MONTH_PRICE_NETTO + t6.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t6_srednia_netto`,
if(t0.ID='1','',if(t6.ID,'TAK','NIE')) as `6_IF` ,
if(t6.ID,t0.P_PROMOTION_NAME,'') as `6_451` ,
-- telewizja cyfrowa pakiety 3
t7.ID as `7_1385` ,
t7.P_SERVICE as `7_449` ,
t7.P_SERVICE_NAME as `7_450` ,
t7.P_INSTALL_QUOTE as `7_458` , t7.P_INSTALL_QUOTE_NORMAL as `t7_1578`,
t7.P_CONTRACT_PRICE as `7_459` ,
t7.P_PROMO_MONTH_PRICE as `7_460` ,
t7.P_NORMAL_PRICE as `7_461` ,
t7.P_DEAL_PROMO_MONTHS as `7_457` ,
t7.P_NORMAL_PRICE*t0.P_DEALTERM_MONTHS - t7.P_DEAL_PROMO_MONTHS*t7.P_PROMO_MONTH_PRICE - (t0.P_DEALTERM_MONTHS-t7.P_DEAL_PROMO_MONTHS)*t7.P_CONTRACT_PRICE + (t7.P_INSTALL_QUOTE_NORMAL-t7.P_INSTALL_QUOTE) as `t7_1580`,
ROUND(( (t0.P_DEALTERM_MONTHS-t7.P_DEAL_PROMO_MONTHS)*t7.P_CONTRACT_PRICE + t7.P_DEAL_PROMO_MONTHS*t7.P_PROMO_MONTH_PRICE + t7.P_INSTALL_QUOTE)/t0.P_DEALTERM_MONTHS, 2) as `t7_srednia`,
ROUND(( (t0.P_DEALTERM_MONTHS-t7.P_DEAL_PROMO_MONTHS)*t7.P_CONTRACT_PRICE_NETTO + t7.P_DEAL_PROMO_MONTHS*t7.P_PROMO_MONTH_PRICE_NETTO + t7.P_INSTALL_QUOTE/1.23)/t0.P_DEALTERM_MONTHS, 2) as `t7_srednia_netto`,
if(t0.ID='1','',if(t7.ID,'TAK','NIE')) as `7_IF` ,
if(t7.ID,t0.P_PROMOTION_NAME,'') as `7_451`,
if(t0.A_STATUS='NORMAL','1','') as t0_STATUS_NORMAL ,
if(t0.A_STATUS='WAITING','1','') as t0_STATUS_WAITING
-- TV - dane z ID_TV lub ID_TVC jesli nie ma ID_TV
, if (t0.`ID_TV`>0, t0.`ID_TV`, IF(t0.`ID_TVC`>0, t0.`ID_TVC`, null)) as TV_ID
, if (t0.`ID_TV`>0, 'X', IF(t0.`ID_TVC`>0, 'X', '')) as TV_JEST
, if (t2.`ID`>0, t2.`P_SERVICE_NAME`, IF(t3.`ID`>0, t3.`P_SERVICE_NAME`, null)) as TV_P_SERVICE_NAME
-- ID COSTS
-- ID PROCES
, t0.`ID_PROCES` as t0_ID_PROCES
, t1.`ID_PROCES` as t1_ID_PROCES
, t2.`ID_PROCES` as t2_ID_PROCES
, t3.`ID_PROCES` as t3_ID_PROCES
, t4.`ID_PROCES` as t4_ID_PROCES
, t5.`ID_PROCES` as t5_ID_PROCES
, t6.`ID_PROCES` as t6_ID_PROCES
, t7.`ID_PROCES` as t7_ID_PROCES
FROM `USERS2_OFFERS_GROUPS` as t0
left join `USERS2_OFFERS` as t1 on (t0.ID_NET!=0 and t1.ID=t0.ID_NET and t1.A_STATUS!='DELETED' and t1.P_SERVICE='NET' )
left join `USERS2_OFFERS` as t2 on (t0.ID_TV!=0 and t2.ID=t0.ID_TV and t2.A_STATUS!='DELETED' and t2.P_SERVICE='TV' )
left join `USERS2_OFFERS` as t5 on (t0.ID_TEL!=0 and t5.ID=t0.ID_TEL and t5.A_STATUS!='DELETED' and t5.P_SERVICE in('TEL','OPCJA_TEL') )
left join `USERS2_OFFERS` as t3 on (t0.ID_TVC!=0 and t3.ID=t0.ID_TVC and t3.A_STATUS!='DELETED' and t3.P_SERVICE in('TVC','OPCJA_TVC') )
left join `USERS2_OFFERS` as t4 on (t0.ID_TVCP_1!=0 and t4.ID=t0.ID_TVCP_1 and t4.A_STATUS!='DELETED' and t4.P_SERVICE='TVCP' )
left join `USERS2_OFFERS` as t6 on (t0.ID_TVCP_2!=0 and t6.ID=t0.ID_TVCP_2 and t6.A_STATUS!='DELETED' and t6.P_SERVICE='TVCP' )
left join `USERS2_OFFERS` as t7 on (t0.ID_TVCP_3!=0 and t7.ID=t0.ID_TVCP_3 and t7.A_STATUS!='DELETED' and t7.P_SERVICE='TVCP' )
WHERE
{$sql_where_rewir_add}
-- and t0.`P_SERVICE_COMPANY`='BN'
{$sql_where_filter_add}
GROUP BY t0.ID
order by t0.ID desc
";
//-- having x_410 like '%|".addslashes($_GET['S_ADDRESS_STREET'])."|%'
if ($DBG) {echo'sql: ';print_r($sql);echo' ';}
$oferty = array();
$oferty_costs_ids = array();
$db = DB::getDB();
$res = $db->query($sql);
while ($row = $db->fetch_array($res)) {
$row['_cls'] = '';
$oferty[] = $row;
// add oferty costs
if ($row['1_1385'] > 0) $oferty_costs_ids[$row['1_1385']] = true;
if ($row['2_1385'] > 0) $oferty_costs_ids[$row['2_1385']] = true;
if ($row['3_1385'] > 0) $oferty_costs_ids[$row['3_1385']] = true;
if ($row['4_1385'] > 0) $oferty_costs_ids[$row['4_1385']] = true;
if ($row['5_1385'] > 0) $oferty_costs_ids[$row['5_1385']] = true;
if ($row['6_1385'] > 0) $oferty_costs_ids[$row['6_1385']] = true;
if ($row['7_1385'] > 0) $oferty_costs_ids[$row['7_1385']] = true;
if ($row['5_449'] == 'OPCJA_TEL') $row['5_449'] = 'TEL';
if ($row['3_449'] == 'OPCJA_TVC') $row['5_449'] = 'TVC';
}
$oferty_costs = PokazOfertyHelper::get_offers_costs_by_offer_ids(array_keys($oferty_costs_ids));
$oferty_costs_start = PokazOfertyHelper::get_offers_costs_start_by_offer_ids(array_keys($oferty_costs_ids));
echo '';
echo "
Oferty ";
if (!$_GET['print']) {
$link_href = "?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC";
$link_href .= "&S_ADDRESS_STREET={$_GET['S_ADDRESS_STREET']}&print=1";
foreach ($oferty_filters as $k_filter => $v_params) {
//if (in_array($k_filter, $oferty_filters_pomin)) continue;
$link_href .= "&{$k_filter}={$v_params['value']}";
}
echo' -
' . " drukuj " . ' ' . ' ';
$user = null;
if ($_GET['user_id'] > 0) {
$user = PokazOfertyHelper::get_user_info($_GET['user_id']);
}
//if (!$user) {
echo " " . '
';
echo '
';
if (!empty($_GET['S_ADDRESS_STREET'])) {
$active_deals_street = PokazOfertyHelper::getDealsActiveOrBlockedByStreet($_GET['S_ADDRESS_STREET']);
if (!empty($active_deals_street)) {
echo '
' . "
Uwaga na wybranym adresie są aktywne umowy: ";
$link_base = "";
$link_base .= "?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC";
$link_base .= "&S_ADDRESS_STREET={$_GET['S_ADDRESS_STREET']}";
foreach ($oferty_filters as $k_filter => $v_params) {
$link_base .= "&{$k_filter}={$v_params['value']}";
}
$out_user_deals = array();
foreach ($active_deals_street as $k_id_user => $v_usr_arr) {
foreach ($v_usr_arr as $v_usr) {
if (!array_key_exists($v_usr->ID_BILLING_USERS, $out_user_deals)) {
$out_user_deals[$v_usr->ID_BILLING_USERS] = (object)array('P_NAME'=>$v_usr->P_NAME, 'deals_id_arr'=>array($v_usr->ID_DEALS));
} else {
$out_user_deals[$v_usr->ID_BILLING_USERS]->deals_id_arr[] = $v_usr->ID_DEALS;
}
}
}
foreach ($out_user_deals as $v_usr_id => $v_usr_info) {
echo '
' . "{$v_usr_info->P_NAME} umowy nr: " . implode(", ", $v_usr_info->deals_id_arr);
// echo " - " . '' . "Wybierz klienta {$v_usr_id}" . ' ';
echo " ";
echo UI::h('a', [ 'class' => "btn btn-xs btn-primary", 'href' => "{$link_base}&user_id={$v_usr_id}" ], "Wybierz klienta {$v_usr_id}");
echo " ";
echo UI::h('a', [ 'class' => "btn btn-xs btn-warning", 'href' => "index.php?MENU_INIT=USERS2_WINDYKACJA_STATUS&q={$v_usr_id}&_f=&_oby=ID&_odir=DESC&_user_id={$v_usr_id}" ], "Windykacja");
echo '
';
}
echo '
';
}
}
//} else {
if ($user) {
$active_deals_by_id = PokazOfertyHelper::getDealsActiveOrBlockedWithInfo($_GET['S_ADDRESS_STREET'], $user->ID_BILLING_USERS);
PokazOfertyView::user_with_services($user, $active_deals_by_id);
}
}
echo '
';// .oferty-print-user-search
echo ' ';
if (!$_GET['print']) {
echo'';
if (!empty($oferty)) {
echo '' . "Znaleziono " . count($oferty) . " ofert." . '
';
}
}
if (empty($oferty)) {
echo''."Brak ofert".'
';
return;
}
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
?>
"Ilość promocyjnych miesięcy", 'field'=>'P_DEAL_PROMO_MONTHS');
$oferty_group_cols_new['suma_1'] = "suma opłat instalacyjnych (brutto)";// Suma opłat instalacyjnych
$oferty_group_cols_new['suma_2'] = "suma abonamentów w promocyjnych miesiącach / po promocji (brutto)";// suma abonamentów w promocyjnych miesiącach
$oferty_group_cols_new['srednia'] = "średnia kwota (brutto)";
$oferty_group_cols_new['cost'] = "suma kosztów (netto)";
$oferty_group_cols_new['zysk'] = "zysk (netto)";
$oferty_p_services = array('1_1385'=>'NET', '5_1385'=>'TEL', '2_1385'=>'TV', '3_1385'=>'TVC', '4_1385'=>'TVCP_1', '6_1385'=>'TVCP_2', '7_1385'=>'TVCP_3');
$oferty_group_add_info['labels']['1385'] = 'ID oferty';
$oferty_group_add_info['labels']['ID_PROCES'] = '';
$oferty_group_add_info['labels']['450' ] = 'Nazwa oferty';
$oferty_group_add_info['labels']['458' ] = 'Promocyjna cena instalacji (brutto)';
$oferty_group_add_info['labels']['460' ] = 'Wartość abonamentu w promocyjnych miesiącach (brutto)';
$oferty_group_add_info['labels']['459' ] = 'Wartość abonamentu po promocji (brutto)';
$oferty_group_add_info['labels']['457' ] = 'Ilość promocyjnych miesięcy';
$oferty_group_add_info['labels']['461' ] = 'Nominalna wartość abonamentu (brutto)';
$oferty_group_add_info['labels']['srednia'] = 'Średnia (brutto)';
$oferty_group_add_info['labels']['1580'] = 'Upust od ceny normalnej do wyliczeń kary (brutto)';
$oferty_group_add_info['NET' ]['1385'] = '1_1385';
$oferty_group_add_info['TEL' ]['1385'] = '5_1385';
$oferty_group_add_info['TV' ]['1385'] = '2_1385';
$oferty_group_add_info['TVC' ]['1385'] = '3_1385';
$oferty_group_add_info['TVCP_1']['1385'] = '4_1385';
$oferty_group_add_info['TVCP_2']['1385'] = '6_1385';
$oferty_group_add_info['TVCP_3']['1385'] = '7_1385';
$oferty_group_add_info['NET' ]['ID_PROCES'] = 't1_ID_PROCES';
$oferty_group_add_info['TEL' ]['ID_PROCES'] = 't5_ID_PROCES';
$oferty_group_add_info['TV' ]['ID_PROCES'] = 't2_ID_PROCES';
$oferty_group_add_info['TVC' ]['ID_PROCES'] = 't3_ID_PROCES';
$oferty_group_add_info['TVCP_1']['ID_PROCES'] = 't4_ID_PROCES';
$oferty_group_add_info['TVCP_2']['ID_PROCES'] = 't6_ID_PROCES';
$oferty_group_add_info['TVCP_3']['ID_PROCES'] = 't7_ID_PROCES';
$oferty_group_add_info['NET' ]['450'] = '1_450';
$oferty_group_add_info['TEL' ]['450'] = '5_450';
$oferty_group_add_info['TV' ]['450'] = '2_450';
$oferty_group_add_info['TVC' ]['450'] = '3_450';
$oferty_group_add_info['TVCP_1']['450'] = '4_450';
$oferty_group_add_info['TVCP_2']['450'] = '6_450';
$oferty_group_add_info['TVCP_3']['450'] = '7_450';
$oferty_group_add_info['NET' ]['458'] = '1_458';
$oferty_group_add_info['TEL' ]['458'] = '5_458';
$oferty_group_add_info['TV' ]['458'] = '2_458';
$oferty_group_add_info['TVC' ]['458'] = '3_458';
$oferty_group_add_info['TVCP_1']['458'] = '4_458';
$oferty_group_add_info['TVCP_2']['458'] = '6_458';
$oferty_group_add_info['TVCP_3']['458'] = '7_458';
$oferty_group_add_info['NET' ]['459'] = '1_459';
$oferty_group_add_info['TEL' ]['459'] = '5_459';
$oferty_group_add_info['TV' ]['459'] = '2_459';
$oferty_group_add_info['TVC' ]['459'] = '3_459';
$oferty_group_add_info['TVCP_1']['459'] = '4_459';
$oferty_group_add_info['TVCP_2']['459'] = '6_459';
$oferty_group_add_info['TVCP_3']['459'] = '7_459';
$oferty_group_add_info['NET' ]['460'] = '1_460';
$oferty_group_add_info['TEL' ]['460'] = '5_460';
$oferty_group_add_info['TV' ]['460'] = '2_460';
$oferty_group_add_info['TVC' ]['460'] = '3_460';
$oferty_group_add_info['TVCP_1']['460'] = '4_460';
$oferty_group_add_info['TVCP_2']['460'] = '6_460';
$oferty_group_add_info['TVCP_3']['460'] = '7_460';
$oferty_group_add_info['NET' ]['461'] = '1_461';
$oferty_group_add_info['TEL' ]['461'] = '5_461';
$oferty_group_add_info['TV' ]['461'] = '2_461';
$oferty_group_add_info['TVC' ]['461'] = '3_461';
$oferty_group_add_info['TVCP_1']['461'] = '4_461';
$oferty_group_add_info['TVCP_2']['461'] = '6_461';
$oferty_group_add_info['TVCP_3']['461'] = '7_461';
$oferty_group_add_info['NET' ]['457'] = '1_457';
$oferty_group_add_info['TEL' ]['457'] = '5_457';
$oferty_group_add_info['TV' ]['457'] = '2_457';
$oferty_group_add_info['TVC' ]['457'] = '3_457';
$oferty_group_add_info['TVCP_1']['457'] = '4_457';
$oferty_group_add_info['TVCP_2']['457'] = '6_457';
$oferty_group_add_info['TVCP_3']['457'] = '7_457';
$oferty_group_add_info['NET' ]['1580'] = 't1_1580';
$oferty_group_add_info['TEL' ]['1580'] = 't5_1580';
$oferty_group_add_info['TV' ]['1580'] = 't2_1580';
$oferty_group_add_info['TVC' ]['1580'] = 't3_1580';
$oferty_group_add_info['TVCP_1']['1580'] = 't4_1580';
$oferty_group_add_info['TVCP_2']['1580'] = 't6_1580';
$oferty_group_add_info['TVCP_3']['1580'] = 't7_1580';
$oferty_group_add_info['NET' ]['srednia'] = 't1_srednia';
$oferty_group_add_info['TEL' ]['srednia'] = 't5_srednia';
$oferty_group_add_info['TV' ]['srednia'] = 't2_srednia';
$oferty_group_add_info['TVC' ]['srednia'] = 't3_srednia';
$oferty_group_add_info['TVCP_1']['srednia'] = 't4_srednia';
$oferty_group_add_info['TVCP_2']['srednia'] = 't6_srednia';
$oferty_group_add_info['TVCP_3']['srednia'] = 't7_srednia';
$oferty_group_add_info['NET' ]['srednia_netto'] = 't1_srednia_netto';
$oferty_group_add_info['TEL' ]['srednia_netto'] = 't5_srednia_netto';
$oferty_group_add_info['TV' ]['srednia_netto'] = 't2_srednia_netto';
$oferty_group_add_info['TVC' ]['srednia_netto'] = 't3_srednia_netto';
$oferty_group_add_info['TVCP_1']['srednia_netto'] = 't4_srednia_netto';
$oferty_group_add_info['TVCP_2']['srednia_netto'] = 't6_srednia_netto';
$oferty_group_add_info['TVCP_3']['srednia_netto'] = 't7_srednia_netto';
$specialFltrs = array();
{// specialFltrs
$specialFltrs['net_speed'] = (object)array('values'=>array(), 'label'=>"NET speed", 'lastInd'=>0);
$specialFltrs['tv_name'] = (object)array('values'=>array(), 'label'=>"TV", 'lastInd'=>0);
$specialFltrs['tel_name'] = (object)array('values'=>array(), 'label'=>"TEL", 'lastInd'=>0);
$specialFltrs['promo_name'] = (object)array('values'=>array(), 'label'=>"Promocja", 'lastInd'=>0);
?>
$row) {// $row = array('[1_452]'=>'P_S_PARAM1', 'TV_P_SERVICE_NAME'=>TV lub TVC name, '5_450' => TV name)
if (!empty($row['[1_452]'])) {// NET.P_S_PARAM1
if (!array_key_exists($row['[1_452]'], $specialFltrs['net_speed']->values)) {
$specialFltrs['net_speed']->lastInd += 1;
$specialFltrs['net_speed']->values[$row['[1_452]']] = $specialFltrs['net_speed']->lastInd;
}
$oferty[$ind]['_cls'] .= ' net_speed-fltr-' . $specialFltrs['net_speed']->values[$row['[1_452]']];
}
if (!empty($row['TV_P_SERVICE_NAME'])) {// TV lub TVC name
if (!array_key_exists($row['TV_P_SERVICE_NAME'], $specialFltrs['tv_name']->values)) {
$specialFltrs['tv_name']->lastInd += 1;
$specialFltrs['tv_name']->values[$row['TV_P_SERVICE_NAME']] = $specialFltrs['tv_name']->lastInd;
}
$oferty[$ind]['_cls'] .= ' tv_name-fltr-' . $specialFltrs['tv_name']->values[$row['TV_P_SERVICE_NAME']];
}
if (!empty($row['5_450'])) {// TV name
if (!array_key_exists($row['5_450'], $specialFltrs['tel_name']->values)) {
$specialFltrs['tel_name']->lastInd += 1;
$specialFltrs['tel_name']->values[$row['5_450']] = $specialFltrs['tel_name']->lastInd;
}
$oferty[$ind]['_cls'] .= ' tel_name-fltr-' . $specialFltrs['tel_name']->values[$row['5_450']];
}
if (!empty($row['0_451'])) {// [0_451] => Witaminowa bomba
if (!array_key_exists($row['0_451'], $specialFltrs['promo_name']->values)) {
$specialFltrs['promo_name']->lastInd += 1;
$specialFltrs['promo_name']->values[$row['0_451']] = $specialFltrs['promo_name']->lastInd;
}
$oferty[$ind]['_cls'] .= ' promo_name-fltr-' . $specialFltrs['promo_name']->values[$row['0_451']];
}
}
}// specialFltrs
//if (!$_GET['print']) {
?>
Rozwin wszystkie
Zwin wszystkie
$oferty_opcje: ';print_r($oferty_opcje);echo'';
//echo'';print_r($oferty_group_add_info ['labels']);echo' ';
?>
';
echo '';
echo '';
foreach ($oferty_group_cols_new as $k_field => $v_value) {
$cls = '';
if ($k_field == '0_1380') $cls = ' class="cell-id"';
if (array_key_exists($k_field, $oferty_group_cols)) {
$v_params = $oferty_group_cols[$k_field];
$field_header = ''.$k_field.'';
if ($v_params['label']) $field_header = $v_params['label']." ".$field_header;
else $field_header = str_replace('_', ' ', $v_params['field'])." ".$field_header;
echo''.$field_header.' ';
} else {
echo''.$v_value.' ';
}
}
echo ' ';
echo ' ';
echo '';
$t = 0;
$pakiet_lp = 0;
foreach ($oferty as $row) {
$pakiet_lp += 1;
$suma_P_PROMO_MONTH_PRICE = 0;
$suma_P_CONTRACT_PRICE = 0;
$suma_P_PROMO_INSTALL_PRICE = 0;
$suma_P_OFFER_SREDNIA = 0;
$suma_P_OFFER_SREDNIA_NETTO = 0;
$suma_P_OFFER_COSTS = 0;
$suma_P_OFFER_COSTS_START = 0;
$curr_oferty_costs = array();
foreach ($oferty_cols as $k_service => $v_oferty_cols) {
if ($row[$k_service] <= 0) {
continue;
}
// foreach ($oferty_cols[$k_service] as $k_field => $v_params) {
// $field_header = ($v_params['label'])? $v_params['label'] : str_replace('_', ' ', $v_params['field']);
// if ($v_params['title']) $field_header = ''.$field_header.' ';
// $field_header .= " ".''.$k_field.'';
// }//end foreach
foreach ($oferty_cols[$k_service] as $k_field => $v_params) {
$st = '';
if ($v_params['field'] == 'ID') $st .= 'font-weight:bold;';
if ($v_params['field'] == 'P_PROMO_MONTH_PRICE') $st .= 'background-color:#FDFD74;';
if ($v_params['field'] == 'P_INSTALL_QUOTE') $st .= 'background-color:#84FD74;';
$st = ($st)? ' style="'.$st.'"' : '';
if ($v_params['field'] == 'P_PROMO_MONTH_PRICE') {
$suma_P_PROMO_MONTH_PRICE += $row[$k_field];
}
else if ($v_params['field'] == 'P_CONTRACT_PRICE') {
$suma_P_CONTRACT_PRICE += $row[$k_field];
}
else if ($v_params['field'] == 'P_INSTALL_QUOTE') {
$suma_P_PROMO_INSTALL_PRICE += $row[$k_field];
}
else if ($v_params['field'] == 'ID') {// add cost
if (array_key_exists($row[$k_field], $oferty_costs)) {
$curr_oferty_costs[$k_service] = $oferty_costs[$row[$k_field]];
$suma_P_OFFER_COSTS += $oferty_costs[$row[$k_field]];
}
if (array_key_exists($row[$k_field], $oferty_costs_start)) {
$suma_P_OFFER_COSTS_START += $oferty_costs_start[$row[$k_field]];
}
}
else if ($v_params['field'] == 'srednia') {// add srednia
$suma_P_OFFER_SREDNIA += $row[$k_field];
}
else if ($v_params['field'] == 'srednia_netto') {
$suma_P_OFFER_SREDNIA_NETTO += $row[$k_field];
}
}
}
echo '';
$st = '';
$help = '';
if ($row['P_OFFER_TARGET']) {
if (isset($oferty_filters['f_P_OFFER_TARGET']['color'][$row['P_OFFER_TARGET']])) {
$st = ' style="background-color:'.$oferty_filters['f_P_OFFER_TARGET']['color'][$row['P_OFFER_TARGET']].';"';
}
$help = $row['P_OFFER_TARGET'];
if (isset($oferty_filters['f_P_OFFER_TARGET']['help'][$row['P_OFFER_TARGET']])) {
$help .= ' - ' . $oferty_filters['f_P_OFFER_TARGET']['help'][$row['P_OFFER_TARGET']];
}
$help = ' title="' . $help . '"';
}
echo '' . $row['0_1380'] . ' ';
echo '' . $row['0_S_ALIAS'] . " " . '' . "(" . $row['0_451'] . ") " . ' ';
echo '';
if ($row['t0_ID_PROCES'] > 0) {
echo ' ' . "(?)" . ' ';
}
echo ' ';
echo '' . $row['0_456'] . ' ';
echo '' . number_format($suma_P_PROMO_INSTALL_PRICE, 2, ',', ' ') . " zł" . ' ';
echo '' . "" . number_format($suma_P_PROMO_MONTH_PRICE, 2, ',', ' ') . " zł" . " / " . number_format($suma_P_CONTRACT_PRICE, 2, ',', ' ') . " zł" . ' ';
echo '' . "" . number_format($suma_P_OFFER_SREDNIA, 2, ',', ' ') . " zł" . ' ';
// echo '' . "" . number_format($suma_P_OFFER_SREDNIA, 2, ',', ' ') . " zł / " . number_format($suma_P_OFFER_SREDNIA_NETTO, 2, ',', ' ') . " zł" . ' ';
echo '' . "" . number_format($suma_P_OFFER_COSTS, 2, ',', ' ') . " zł" . ' ';
echo '' . "" . number_format($suma_P_OFFER_SREDNIA_NETTO - $suma_P_OFFER_COSTS - ($suma_P_OFFER_COSTS_START / $row['0_456']), 2, ',', ' ') . " zł" . ' ';
echo ' ';
echo '';
echo '';
//echo'';print_r($row);echo' ';
echo '';
echo '';
echo '';
echo '';
$link_href = "./odt2xhtml/1379.umowa.php";
$link_href .= "?id_group=" . $row['0_1380'];
if (($user_id = V::get('user_id', 0, $_GET, 'int')) > 0) {
$link_href .= "&id_user={$user_id}";
}
$js = "return print_umowa(this);";
echo '' . ' ' . ' ';
echo ' ';
foreach ($oferty_group_add_info ['labels'] as $k_zasob_id => $v_label) {
echo '' . $v_label . ' ';
}
echo '' . "Koszt (netto)" . ' ';
echo ' ';
echo ' ';
echo '';
echo '';
echo '';
$link_href = "?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC";
//"S_ADDRESS_STREET=&ADD=SZUKAJ";
$link_href .= "&task=dodaj_aneks";
$link_href .= "&S_ADDRESS_STREET=" . $_GET['S_ADDRESS_STREET'];
$link_href .= "&id_group=" . $row['0_1380'];
$link_href .= "&user_id=" . $_GET['user_id'];
$js = "return print_umowa(this);";
echo '' . ' ' . " Dodaj aneks lub nową umowę" . ' ';
$js = "return umowaZysk_click(this); return false;";
?>
Oblicz zysk
';
echo ' ';
echo ' ';
foreach ($oferty_p_services as $k_field_id => $v_p_service) {
if ($row[$k_field_id] > 0) {
$html_cell_id = $row['0_1380'] . '-' . $row[$k_field_id];
echo '';
echo '';
echo '';
$outPService = explode('_', $v_p_service);
echo reset($outPService);
echo ' ';
$js = "return show_opcje('" . $html_cell_id . "', '" . $v_p_service . "');";
echo '' . "opcje" . ' ';
echo ' ';// clean numbers from TVCP_1
foreach ($oferty_group_add_info ['labels'] as $k_zasob_id => $v_type_label) {
$k_field_name = $oferty_group_add_info [$v_p_service][$k_zasob_id];
echo '';
if ($k_zasob_id == 'ID_PROCES') {
if ($row[$k_field_name] > 0) {
echo ' ' . "(?)" . ' ';
}
} else {
echo $row[$k_field_name];
}
echo ' ';
}
echo '';
foreach ($curr_oferty_costs as $k_service => $v_cost) {
if (substr($k_service, -1 * (strlen($v_p_service))) == $v_p_service) {
echo number_format($v_cost, 2, ',', ' ');
}
}
echo ' ';
echo ' ';
}
echo ' ';
}
echo '
';
echo ' ';
echo ' ';
}
echo ' ';
echo '';
}
}
class PokazOfertyController {
var $params;
var $allowed_options;
var $id_options;
var $active_deals_by_id;
/*
[MENU_INIT] => POKAZ_OFERTY_AKTUALNE_FUNC
[task] => dodaj_aneks
[S_ADDRESS_STREET] => ci50%
[id_group] => 1474
[id_options_NET] => Array
[0] => 445
[1] => 1247
[id_options_TV] => Array
[0] => 598
[id_deals] => Array -- active deals do zastapienia
[0] => 1234
[1] => 5678
[print] =>
*/
function __construct() {
$this->params = array();
$this->allowed_options = array('NET', 'TEL', 'TV', 'TVC');
$this->id_options = array();
$this->active_deals_by_id = array();
$this->group = null;
$this->allowed_options_to_srv = array('TVC'=>'OPCJA_TVC', 'TEL'=>'OPCJA_TEL');
$this->options_to_srv = array();// special options to convert to services
}
/**
* Set params values from request.
*/
function set_params_from_request() {
$this->params['MENU_INIT'] = V::get('MENU_INIT', 'POKAZ_OFERTY_AKTUALNE_FUNC', $_GET);
$this->params['task'] = V::get('task', 'dodaj_aneks', $_GET);
if (isset($_GET['S_ADDRESS_STREET'])) {
$this->params['S_ADDRESS_STREET'] = $_GET['S_ADDRESS_STREET'];
//$this->params['S_ADDRESS_STREET'] = (substr($_GET['S_ADDRESS_STREET'], -1) != '%')? $_GET['S_ADDRESS_STREET'] . '%' : $_GET['S_ADDRESS_STREET'];
}
if (isset($_GET['user_id'])) {
$this->params['user_id'] = V::get('user_id', 0, $_GET, 'int');
}
if (isset($_GET['id_group'])) {
$this->params['id_group'] = V::get('id_group', 0, $_GET, 'int');
}
$this->params['id_deals'] = V::get('id_deals', array(), $_GET, 'array');
// fetch id options
foreach ($this->allowed_options as $v_option) {
$this->params['id_options_' . $v_option] = V::get('id_options_' . $v_option . '', array(), $_GET, 'array');
$this->id_options[$v_option] = V::get('id_options_' . $v_option . '', array(), $_GET, 'array');
}
// fetch id options to services
foreach ($this->allowed_options_to_srv as $kSrv => $vOption) {
$this->id_options_to_srv[$kSrv]['id_options_' . $vOption] = V::get('id_options_' . $vOption, array(), $_GET, 'array');
}
// filter options - remove empty and not numeric values
foreach ($this->allowed_options_to_srv as $kSrv => $vOption) {
if (is_array($vOption) && !empty($vOption)) foreach ($vOption as $kOption => $vValue) {
$this->id_options_to_srv[$kSrv][$kOption] = array_filter($this->id_options_to_srv[$kSrv][$kOption], function($value) {
return !empty($value) && is_numeric($value);
});
}
$this->id_options_to_srv[$kSrv] = array_filter($this->id_options_to_srv[$kSrv], function($value) {
return !empty($value);
});
}
$this->id_options_to_srv = array_map(function($value) {
if (count($value) == 1) {
$vOptions = reset($value);
if (count($vOptions) == 1) {
return reset($vOptions);
}
}
return null;
}, $this->id_options_to_srv);
$this->id_options_to_srv = array_filter($this->id_options_to_srv, function($value) {
return !empty($value);
});
}
public function hasOptionsToServices() {
return !empty($this->id_options_to_srv);
}
public function convertOptionsToSrv() {
$DBG = ('123' == V::get('DBG', '', $_GET));
if($DBG){echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->id_options_to_srv);echo' ';}
$db = DB::getDB();
if (!$db) return false;
$group = $this->get_group();
if (!$group) return false;
/*
* 'TVC' => ID_TVC in USERS2_OFFERS_GROUPS
* 'TEL' => ID_TEL in USERS2_OFFERS_GROUPS
*/
$sqlSearch = array();
foreach ($this->id_options_to_srv as $kService => $vOfferId) {
switch ($kService) {
case 'TVC': $sqlSearch[] = "g.`ID_TVC`='{$vOfferId}'"; break;
case 'TEL': $sqlSearch[] = "g.`ID_TEL`='{$vOfferId}'"; break;
default:
}
}
if (count($sqlSearch) <= 0) return false;
if (!array_key_exists('TVC', $this->id_options_to_srv)) {
$sqlSearch[] = "g.`ID_TVC`='0'";
}
if (!array_key_exists('TEL', $this->id_options_to_srv)) {
$sqlSearch[] = "g.`ID_TEL`='0'";
}
$sqlSearch = implode(" and ", $sqlSearch);
$offersIds = array_values($this->id_options_to_srv);
if ($this->group->_data['ID_NET'] > 0) $offersIds[] = $this->group->_data['ID_NET'];
$offersByIds = PokazOfertyHelper::get_offers_by_id($offersIds);
foreach ($this->id_options_to_srv as $kService => $vOfferId) {
if (empty($offersByIds[$vOfferId])) {
return false;
}
}
$sqlIdGroup = $this->params['id_group'];
$sql = "select g.`ID`
from `USERS2_OFFERS_GROUPS` as g
where g.`A_STATUS` in('WAITING','NORMAL','MONITOR')
and {$sqlSearch}
and g.`PARENT_ID`='{$sqlIdGroup}'
";
if($DBG){echo'sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';}
$groupsFound = array();
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$groupsFound[] = $r->ID;
}
if (empty($groupsFound)) {
$sqlObj = (object)array_map(function($v) { return $v; }, $this->group->_data);
$sqlObj->PARENT_ID = $sqlObj->ID;
unset($sqlObj->ID);
/* $sqlObj:
[S_ALIAS] => ADRENALINET#7
[P_PROMOTION_NAME] => TESTOWA OFERTA BIALL-NET#1
[ID_TVC] => 0
[ID_TEL] => 0
[RABAT_IF_OPCJA_TVC] => 10
[RABAT_IF_OPCJA_TEL] => 10
*/
/* $offersByIds[$vOfferId]:
[S_ALIAS] => PAKIET CYFROWY - PLATYNOWY
[P_SERVICE_NAME] => PAKIET CYFROWY - PLATYNOWY
[P_PROMOTION_NAME] => OFERTA TESTOWA
*/
$rabat = 0;
foreach ($this->id_options_to_srv as $kService => $vOfferId) {
switch ($kService) {
case 'TVC':
$sqlObj->ID_TVC = $vOfferId;
$sqlObj->S_ALIAS .= " + {$offersByIds[$vOfferId]->S_ALIAS}";
$sqlObj->P_PROMOTION_NAME .= " + {$offersByIds[$vOfferId]->P_SERVICE_NAME}";
if ($sqlObj->RABAT_IF_OPCJA_TVC > 0) {
$rabat += $sqlObj->RABAT_IF_OPCJA_TVC;
}
break;
case 'TEL':
$sqlObj->ID_TEL = $vOfferId;
$sqlObj->S_ALIAS .= " + {$offersByIds[$vOfferId]->S_ALIAS}";
$sqlObj->P_PROMOTION_NAME .= " + {$offersByIds[$vOfferId]->P_SERVICE_NAME}";
if ($sqlObj->RABAT_IF_OPCJA_TEL > 0) {
$rabat += $sqlObj->RABAT_IF_OPCJA_TEL;
}
break;
default:
}
}
if ($rabat > 0) {
$offerNet = $db->get_by_id('USERS2_OFFERS', $sqlObj->ID_NET);
$newOfferNet = new stdClass();
$rabatPr = 1 - $rabat/100;
$newOfferNet->P_CONTRACT_PRICE = round($rabatPr * $offerNet->P_CONTRACT_PRICE, 2);
$newOfferNet->P_PROMO_MONTH_PRICE = round($rabatPr * $offerNet->P_PROMO_MONTH_PRICE, 2);
$sql = "select o.`ID`
from `USERS2_OFFERS` as o
where o.`A_STATUS` in('WAITING','NORMAL','MONITOR')
and o.`PARENT_ID`={$sqlObj->ID_NET}
and o.`P_CONTRACT_PRICE`='{$newOfferNet->P_CONTRACT_PRICE}'
and o.`P_PROMO_MONTH_PRICE`='{$newOfferNet->P_PROMO_MONTH_PRICE}'
";
$foundOfferNet = null;
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$foundOfferNet = $r;
}
if (!$foundOfferNet) {
foreach ($offerNet as $kFld => $vFld) {
if (!isset($newOfferNet->$kFld)) {
if ('ID' == $kFld) continue;
if ('_NETTO' == substr($kFld, -6)) continue;
if ('A_' == substr($kFld, 0, 2)) continue;
$newOfferNet->$kFld = $offerNet->$kFld;
}
}
$newOfferNet->S_ALIAS .= " (rabat {$rabat}%)";
$newOfferNet->P_SERVICE_NAME .= " (rabat {$rabat}%)";
$newOfferNet->P_PROMOTION_NAME .= " (rabat {$rabat}%)";
$newOfferNet->PARENT_ID = $offerNet->ID;
$newOfferNetId = $db->ADD_NEW_OBJ('USERS2_OFFERS', $newOfferNet);
if ($newOfferNetId <= 0) {
return false;
}
}
else {
$newOfferNetId = $foundOfferNet->ID;
}
if ($newOfferNetId <= 0) return false;
$sqlObj->ID_NET = $newOfferNetId;
}
$sqlObj->A_STATUS = 'WAITING';
if($DBG){echo'sqlObj (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo' ';}
$newGroupId = $db->ADD_NEW_OBJ('USERS2_OFFERS_GROUPS', $sqlObj);
if ($newGroupId <= 0) return false;
} else {
$newGroupId = reset($groupsFound);
if ($newGroupId <= 0) return false;
}
$this->params['id_group'] = $newGroupId;
unset($this->group);
$group = $this->get_group();
$group->fetch_offers();
return true;
}
/**
* Set param.
*/
function set_param($key, $value) {
$this->params [$key] = $value;
}
/**
* Get user selected options id.
*
* @returns Array(P_SERVICE => Array of offers ID)
*/
function get_id_options() {
return $this->id_options;
}
/**
* Create url based on current params and given $params_add.
*
* @returns String - url
*/
function url($params_add = array()) {
$params = array();
$params = array_merge_recursive($params, $this->params);// copy array
if (!empty($params_add)) {
//$params = array_merge_recursive($params, $params_add);
foreach ($params_add as $k => $v) {
$params[$k] = $v;
}
}
$url_params_flat = array();
if (!empty($params)) {
foreach ($params as $k1 => $v1) {
if (is_array($v1)) {
foreach ($v1 as $k2 => $v2) {
$url_params_flat []= '' . $k1 . '[]=' . $v2;
}
} else {
$url_params_flat []= '' . $k1 . '=' . $v1;
}
}
}
return '?' . implode('&', $url_params_flat);
}
/**
* Get param.
*
* @returns String or Array - param value
*/
function get_param($key) {
$param = V::get($key, '', $this->params);
// if array? - return array
return $param;
}
/**
* Get group defined in params.
*
* @return Column_users2_offers_groups - group with offers and options
*/
function get_group() {
if (empty($this->group)) {
if ($this->get_param('id_group') > 0) {
$this->group = PokazOfertyHelper::get_group($this->get_param('id_group'));
$this->group->set_id_options($this->get_id_options());
}
}
return $this->group;
}
/**
* Get user deals active on selected street.
*/
function get_deals_active_with_info() {
if (empty($this->active_deals_by_id)) {
$this->active_deals_by_id = PokazOfertyHelper::get_deals_active_with_info($this->get_param('S_ADDRESS_STREET'), $this->get_param('user_id'));
}
return $this->active_deals_by_id;
}
/**
* Get deal with services.
*
* @param $deal_id - deal ID
*
* @returns deal info with connected services.
*/
function get_deal_with_services($deal_id) {
$old_deal = null;
$deals_active_arr = $this->get_deals_active_with_info();
if (array_key_exists($deal_id, $deals_active_arr)) {
$old_deal = $deals_active_arr[$deal_id];
}
return $old_deal;
}
/**
* Fetch group offers data.
*/
function fetch_group_data() {
$this->group->fetch_offers();
}
/**
* Save deal form.
*
* @param int $active_deal_id - 0 not set, -1 nowa umowa, > 0 nr umowy
* @param $users2_deals - Column_users2_deals to create rows in USERS2_DEALS
*/
function save_deal_form($active_deal_id, $users2_deals) {
if ($active_deal_id == 0) {
$this->_show_deal_form = true;
echo '' . "Wybierz jedną z podanych opcji" . '
';
}
else if ($active_deal_id == -1) {// nowa umowa
$new_deal_id = $this->_deals_table->create();
if ($new_deal_id <= 0) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordu DEALS_TABLE" . '
';
} else {
// OK save USERS2_DEALS
echo '' . "Utworzono umowę - rekord w tabeli DEALS_TABLE (ID=" . $new_deal_id . ")" . '
';
$new_deal_row = PokazOfertyHelper::get_deal($new_deal_id);
if ($new_deal_row) {
$cols = array('ID', 'ID_BILLING_USERS', 'P_DEALNUMBER', 'P_DEALNUMBER_OLD', 'P_DEALDATE', 'P_DEALDATE_TERM', 'S_ADDRESS_STREET');
PokazOfertyView::print_simple_tbl($new_deal_row, $cols, "Nowa umowa");
}
// create records in USERS2_DEALS
$users2_deals->set_p_dealnumber_new($new_deal_id);
if (!$users2_deals->create_rows()) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordów do USERS2_DEALS" . '
';
$this->_show_deal_form = true;
} else {
echo '' . "Utworzono rekordy w tabeli USERS2_DEALS dla nowej umowy (ID=" . $new_deal_id . ")" . '
';
$this->_show_deal_form = false;
}
echo '' . "Przejdź do edycji umowy (DEALS_TABLE)" . ' ';// TODO: 895 ID Zasobu DEALS_TABLE
}
}
else if (false) {// aneks test
echo '';// TODO: TEST
$this->_deals_table->set('P_DEALNUMBER_OLD', $active_deal_id);
$old_deal = $this->get_deal_with_services($active_deal_id);
$users2_deals->set_old_deal($old_deal);
$this->_deals_table->set_old_offers_ids($users2_deals->get_old_offers_ids());
$new_deal_id = 'X-test-X';
$users2_deals->set_p_dealnumber_new($new_deal_id);
$ret = $users2_deals->create_rows_try();
if ($ret == -1) {
}
echo '
';
}
else {// aneks
$old_deal = $this->get_deal_with_services($active_deal_id);
$users2_deals->set_old_deal($old_deal);
$this->_deals_table->set('P_DEALNUMBER_OLD', $active_deal_id);
$this->_deals_table->set_old_offers_ids($users2_deals->get_old_offers_ids());
$new_deal_id = $this->_deals_table->create();
if ($new_deal_id <= 0) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordu DEALS_TABLE" . '
';
} else {
// OK save USERS2_DEALS
echo '' . "Utworzono umowę - rekord w tabeli DEALS_TABLE (ID=" . $new_deal_id . ")" . '
';
$new_deal_row = PokazOfertyHelper::get_deal($new_deal_id);
if ($new_deal_row) {
$cols = array('ID', 'ID_BILLING_USERS', 'P_DEALNUMBER', 'P_DEALNUMBER_OLD', 'P_DEALDATE', 'P_DEALDATE_TERM', 'S_ADDRESS_STREET');
PokazOfertyView::print_simple_tbl($new_deal_row, $cols, "Nowa umowa");
}
// create records in USERS2_DEALS
$users2_deals->set_p_dealnumber_new($new_deal_id);
if (!$users2_deals->create_rows()) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordów do USERS2_DEALS" . '
';
$this->_show_deal_form = true;
} else {
echo '' . "Utworzono rekordy w tabeli USERS2_DEALS dla nowej umowy (ID=" . $new_deal_id . ")" . '
';
$this->_show_deal_form = false;
}
echo '' . "Przejdź do edycji umowy (DEALS_TABLE)" . ' ';
}
}
}
}
class PokazOfertyHelper {
/**
* @param string $S_ADDRESS_STREET - tylko umowy na danym adresie
* @return array or null
* [ID_BILLING_USERS => array of object deal]
*/
public static function get_deals_active_by_street($S_ADDRESS_STREET) {
return self::get_deals_active(array('S_ADDRESS_STREET'=>$S_ADDRESS_STREET));
}
public static function getDealsActiveOrBlockedByStreet($S_ADDRESS_STREET) {
return self::getDealsActiveOrBlocked(array('S_ADDRESS_STREET'=>$S_ADDRESS_STREET));
}
/**
* @param string $S_ADDRESS_STREET - tylko umowy na danym adresie
* @param int $ID_BILLING_USERS - tylko umowy danego klienta
* @return array or null
* [ID_DEALS => deal]
*/
public static function get_deals_active_with_info($S_ADDRESS_STREET, $ID_BILLING_USERS, $only_active = true) {
$active_deals_by_id = self::get_deals_active(array('S_ADDRESS_STREET'=>$S_ADDRESS_STREET, 'ID_BILLING_USERS'=>$ID_BILLING_USERS, 'return_by'=>'ID', 'P_DEALNUMBER'=>true));
self::deals_active_add_info($active_deals_by_id, $ID_BILLING_USERS, $only_active);
return $active_deals_by_id;
}
public static function getDealsActiveOrBlockedWithInfo($S_ADDRESS_STREET, $ID_BILLING_USERS, $only_active = true, $only_active_or_blocked = true) {
$params = array();
$params['S_ADDRESS_STREET'] = $S_ADDRESS_STREET;
$params['ID_BILLING_USERS'] = $ID_BILLING_USERS;
$params['BLOCKED'] = '1';
$params['return_by'] = 'ID';
$params['P_DEALNUMBER'] = true;
$active_deals_by_id = self::get_deals_active($params);
self::deals_active_add_info($active_deals_by_id, $ID_BILLING_USERS, $only_active, $only_active_or_blocked);
return $active_deals_by_id;
}
public static function getDealsActiveOrBlockedByUser($ID_BILLING_USERS, $only_active = true, $only_active_or_blocked = true) {
$params = array();
$params['ID_BILLING_USERS'] = $ID_BILLING_USERS;
$params['BLOCKED'] = '1';
$params['return_by'] = 'ID';
$params['P_DEALNUMBER'] = true;
$active_deals_by_id = self::get_deals_active($params);
self::deals_active_add_info($active_deals_by_id, $ID_BILLING_USERS, $only_active, $only_active_or_blocked);
return $active_deals_by_id;
}
public static function get_deals_active_by_user($ID_BILLING_USERS, $only_active = true) {
$active_deals_by_id = self::get_deals_active(array('ID_BILLING_USERS'=>$ID_BILLING_USERS, 'return_by'=>'ID', 'P_DEALNUMBER'=>true));
self::deals_active_add_info($active_deals_by_id, $ID_BILLING_USERS, $only_active);
return $active_deals_by_id;
}
public static function deals_active_add_info(&$active_deals_by_id, $ID_BILLING_USERS, $only_active = false, $only_active_or_blocked = false) {
if (empty($active_deals_by_id)) {
return;
}
$uslugi = self::get_services_by_user_deals($ID_BILLING_USERS, array_keys($active_deals_by_id), $only_active, $only_active_or_blocked);
foreach ($active_deals_by_id as $k_deal_id => $v_deal) {
if (array_key_exists($k_deal_id, $uslugi)) {
$active_deals_by_id[$k_deal_id]->services = $uslugi[$k_deal_id];
$active_deals_by_id[$k_deal_id]->services_by_id = array();
foreach ($uslugi[$k_deal_id] as $k_p_service => $v_srv_arr) {
foreach ($v_srv_arr as $k_srv_id => $v_srv) {
$active_deals_by_id[$k_deal_id]->services_by_id[$k_srv_id] = $v_srv;
}
}
}
}
// add $v_deal->ses_x_a
$out_id_count = array();
$uslugi_params = self::get_services_params($uslugi);
foreach ($active_deals_by_id as $k_deal_id => $v_deal) {
$active_deals_by_id[$k_deal_id]->ses_x_a = array();
foreach ($v_deal->services as $k_p_service => $v_srv_arr) {
foreach ($v_srv_arr as $k_srv_id => $v_srv) {
$v_deal->services[$k_p_service][$k_srv_id]->offer_p_service = $k_p_service;
// add SERVICE params if exists
if (array_key_exists($k_srv_id, $uslugi_params)) {
$active_deals_by_id[$k_deal_id]->ses_x_a[$k_srv_id] = $uslugi_params[$k_srv_id];
if ($v_srv->NAME_LIST_SERVICES == 'TV' && $uslugi_params[$k_srv_id]->P_SERVICE_CLASS != '') {
$v_deal->services[$k_p_service][$k_srv_id]->offer_p_service = $uslugi_params[$k_srv_id]->P_SERVICE_CLASS;
}
}
// add out_id - @used in JavaScript overview
if (!in_array($v_srv->offer_p_service, $out_id_count)) {
$out_id_count[$v_srv->offer_p_service] = 1;
} else {
$out_id_count[$v_srv->offer_p_service] += 1;
}
$v_deal->services[$k_p_service][$k_srv_id]->out_id = $v_srv->offer_p_service . '_' . $out_id_count[$v_srv->offer_p_service];
}
}
}
}
public static function getDealsActiveOrBlocked($params = array()) {
$params['BLOCKED'] = '1';
return self::get_deals_active($params);
}
/**
* @param array $params
* $params['S_ADDRESS_STREET'] - tylko umowy na danym adresie
* $params['ID_BILLING_USERS'] - tylko umowy danego klienta
* $params['P_DEALNUMBER'] - pobierz numer umowy
* $params['return_by'] - return by
* 'ID' - @return [ID_DEALS => deal]
* @return array or null
* [ID_BILLING_USERS => array of object deal]
*/
public static function get_deals_active($params = array()) {
$forceUpdate = false;
Lib::loadClass('ColumnDealsStatus');
ColumnDealsStatus::run_update($forceUpdate);
$db = DB::getDB();
$active_deals = array();
$return_by = V::get('return_by', '', $params);
$sql_left_join = "";
$sql_select_arr = array();
$sql_select_arr []= "ds.`ID_DEALS`";
$sql_select_arr []= "ds.`ID_BILLING_USERS`";
$sql_select_arr []= "ds.`SERVICES_S_ADDRESS_STREET`";
$sql_select_arr []= "concat(bua.`P_NAME`, ' ', bua.`P_NAME_SECOND`) as P_NAME";
if ('' != V::get('ID_BILLING_USERS', '', $params)) {
$sql_left_join .= "\n left join `DEALS_TABLE` as d on (d.`ID`=ds.`ID_DEALS`)";
$sql_select_arr []= "d.`P_DEALNUMBER`";
$sql_select_arr []= "d.`P_DEALDATE`";
$sql_select_arr []= "d.`P_DEALDATE_TERM`";
$sql_select_arr []= "d.`ID_OFFERS_GROUP`";
$sql_select_arr []= "d.`ID_OFFERS_ON`";
$sql_select_arr []= "d.`ID_OFFERS_OFF`";
$sql_select_arr []= "d.`S_ADDRESS_STREET`";
}
$sql_where_arr = array();
if ('' != V::get('BLOCKED', '', $params)) {
$sql_where_arr []= "(ds.`DEALS_ACTIVE`=1 or ds.`DEALS_BLOCKED`=1)";
} else {
$sql_where_arr []= "ds.`DEALS_ACTIVE`=1";
}
if ('' != ($user_id = V::get('ID_BILLING_USERS', '', $params))) {
$sql_where_arr []= "ds.`ID_BILLING_USERS`='" . $user_id . "'";
}
if ('' != ($street = V::get('S_ADDRESS_STREET', '', $params))) {
$sql_where_arr []= "(ds.`SERVICES_S_ADDRESS_STREET`='{$street}' or concat(',', ds.`SERVICES_S_ADDRESS_STREET`, ',') like '%,{$street},%')";
}
$sql = "select " . implode("\n, ", $sql_select_arr) . "
from `temp_DEALS_STATUS` as ds
join `COMPANIES` as bua on (bua.`ID`=ds.`ID_BILLING_USERS`)
" . $sql_left_join . "
where " . implode("\n and ", $sql_where_arr) . "
order by ds.`ID_DEALS` DESC
";
if(V::get('DBG_SQL', 0, $_GET, 'int') > 0){echo'sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';}
DEBUG_S(6, "dbg sql:", $sql, __FILE__, __FUNCTION__, __LINE__);
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
if ($return_by == 'ID') {
$active_deals[$r->ID_DEALS] = $r;
} else {
$active_deals[$r->ID_BILLING_USERS][] = $r;
}
}
DEBUG_S(6, "dbg active_deals:", $active_deals, __FILE__, __FUNCTION__, __LINE__);
return $active_deals;
}
public static function get_l2_list_status_name($status) {
static $l2_list_status;
if (!is_array($l2_list_status)) {
$l2_list_status = array();
$db = DB::getDB();
$sql = "select lst.`ses_users2`, lst.`name`, lst.`description`
from `LIST_status` as lst
where lst.`ID`>2
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$l2_list_status[$r->ses_users2] = $r->name;
}
}
if (array_key_exists($status, $l2_list_status)) {
return $l2_list_status[$status];
}
return null;
}
public static function get_services_by_user_deals($user_id, $deals_ids = array(), $only_active = false, $only_active_or_blocked = false) {
$deals = array();
if (empty($deals_ids)) {
return $deals;
}
$db = DB::getDB();
$sql = "select
s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
, s.`ID_OFFERS`
, s.`ID_DEALS_TABLE`
, s.`P_ID_SERVICES`
, s.`ABONAMENT_VALUE` as ABONAMENT_VALUE
, s.`P_ID_SERVICES` as P_ID
, s.`HANGUP_STATUS`
, s.`HANGUP_FROM`
, s.`HANGUP_TILL`
, s.`VAT`
, ls.`description` as description
-- , lst.`name` as A_STATUS_DESC
, '' as A_STATUS_DESC
from `SERVICES` as s
left join `LIST_SERVICES` as ls on(ls.`name`=s.`NAME_LIST_SERVICES`)
-- left join `LIST_status` as lst on(lst.`ses_users2`=s.`A_STATUS`)
-- left join `LIST_status` as lst on(lst.`ses_users2`=s.`HANGUP_STATUS` and lst.`ID`>2)
where `ID_BILLING_USERS`='" . $user_id . "'
and `ID_DEALS_TABLE` in(" . implode(",", $deals_ids) . ")
-- and s.`A_STATUS`='NORMAL'
";
if(V::get('DBG_SQL', 0, $_GET, 'int') > 0){echo'sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';}
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
// TODO: only active services - @from $A_STATUS_L2_SQL
// $r->HANGUP_STATUS = ('NORMAL', 'OFF_SOFT', 'OFF_HARD')
$r->HANGUP_TILL = (!$r->HANGUP_TILL || $r->HANGUP_TILL == '0000-00-00')? null : $r->HANGUP_TILL;
$r->HANGUP_FROM = (!$r->HANGUP_FROM || $r->HANGUP_FROM == '0000-00-00')? null : $r->HANGUP_FROM;
$r->_status = null;
$today = date("Y-m-d");
if ($r->HANGUP_STATUS == $r->A_STATUS) {
$r->_status = $r->A_STATUS;
} else if (!$r->HANGUP_TILL && $r->HANGUP_FROM > '' && $today > $r->HANGUP_FROM) {
$r->_status = $r->HANGUP_STATUS;
} else if (!$r->HANGUP_TILL && $r->HANGUP_FROM > '' && $today < $r->HANGUP_FROM) {
$r->_status = $r->A_STATUS;
} else if ($r->HANGUP_TILL > '' && $r->HANGUP_FROM > '' && $today > $r->HANGUP_FROM && $today < $r->HANGUP_TILL) {
$r->_status = $r->HANGUP_STATUS;
} else if ($r->HANGUP_TILL > '' && $r->HANGUP_FROM > '' && $today < $r->HANGUP_FROM && $today < $r->HANGUP_TILL) {
$r->_status = $r->A_STATUS;
} else if (!$r->HANGUP_TILL && !$r->HANGUP_FROM) {
$r->_status = $r->A_STATUS;
} else if ($r->HANGUP_TILL > '' && $r->HANGUP_FROM > '' && $today > $r->HANGUP_FROM && $today > $r->HANGUP_TILL) {
$r->_status = $r->A_STATUS;
} else if ($r->HANGUP_TILL > '' && $r->HANGUP_FROM > '' && $today > $r->HANGUP_FROM && $today > $r->HANGUP_TILL && $r->HANGUP_FROM < $r->HANGUP_TILL) {
$r->_status = 'ERROR1';
} else {
$r->_status = 'ERROR2';
}
$r->A_STATUS_DESC = self::get_l2_list_status_name($r->_status);
if ($only_active_or_blocked) {
if (!in_array($r->_status, array('NORMAL','OFF_SOFT'))) {
continue;
}
} else if ($only_active) {
if (!in_array($r->_status, array('NORMAL'))) {
continue;
}
}
// TODO: P_SERVICE used?
$r->P_SERVICE = $r->NAME_LIST_SERVICES;
if ($r->P_SERVICE == 'USERS2') $r->P_SERVICE = 'NET';
else if ($r->P_SERVICE == 'VOIP') $r->P_SERVICE = 'TEL';
$deals[$r->ID_DEALS_TABLE][$r->P_SERVICE][$r->ID] = $r;
}
return $deals;
}
public static function get_services_params($uslugi) {
$ses_x_a = array();
if (empty($uslugi)) return $ses_x_a;
$allowed_name_list_srv = array('USERS2', 'TV', 'VOIP');
$load_ses_x_a_ids = array();
foreach ($uslugi as $k_deal_id => $v_deal_arr) {
foreach ($v_deal_arr as $k_p_service => $v_srv_arr) {
if (empty($v_srv_arr)) continue;
foreach ($v_srv_arr as $k_srv_id => $v_srv) {
$load_ses_x_a_ids [$v_srv->NAME_LIST_SERVICES] []= $v_srv->ID;
}
}
}
// load from DB
$db = DB::getDB();
foreach ($load_ses_x_a_ids as $k_name_list_srv => $v_srv_ids) {
if (!in_array($k_name_list_srv, $allowed_name_list_srv)) continue;
$sql = "select * from `SES_" . $k_name_list_srv . "_A` where `ID_SERVICES` in (" . implode(", ", $v_srv_ids) . ")";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$ses_x_a [$r->ID_SERVICES] = $r;
}
}
return $ses_x_a;
}
public static function get_users_by_query($q) {
$users_rows = array();
$db = DB::getDB();
$sql_order_by = 'order by a.`P_NAME` asc';
$sql_limit = 'limit 500';
$sql_where = '1=1';
$sql_where_and_arr = array();
if (!empty($q)) {
$q = trim($q);
if (is_numeric($q)) {// billing number
$sql_where_and_arr []= "a.`id_users`='".$db->_($q)."'";
}
else {// string - name, second name
$q_arr_values = array();
$q_exp = explode(' ', $q);
foreach ($q_exp as $v_q) {
$v_q = trim($v_q);
if (strlen($v_q) > 2) {// min. 3 znaki
$q_arr_values []= strtolower($v_q);
}
}
foreach ($q_arr_values as $q_value) {
$sql_filter_q = array();
$q_arr = array();// uniq array
$q_arr_pl = array();// loop array
$pl_letters = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż');
$en_letters = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z');
$sql_filter_q []= "a.`P_NAME` like '".$db->_($q_value)."%'";
$sql_filter_q []= "a.`P_NAME_SECOND` like '".$db->_($q_value)."%'";
$q_value_clean_en = str_replace($pl_letters, $en_letters, $q_value);
$q_value_clean_pl = str_replace($en_letters, $pl_letters, $q_value_clean_en);
$q_value_clean_pr = str_replace($en_letters, '_', $q_value_clean_en);
if ($q_value_clean_en != $q_value) $q_arr[ $q_value_clean_en ] = true;
if ($q_value_clean_pl != $q_value) $q_arr[ $q_value_clean_pl ] = true;
if ($q_value_clean_pr != $q_value) $q_arr[ $q_value_clean_pr ] = true;
foreach ($q_arr as $v_q => $v_val) {
$sql_filter_q []= "a.`P_NAME` like '".$db->_($v_q)."'";
$sql_filter_q []= "a.`P_NAME_SECOND` like '".$db->_($v_q)."'";
// $sql_filter_q []= "a.`P_ADDRESS_STREET` like '".DB::_($q)."'";
}
$sql_field_1 = "a.`P_NAME`";
$sql_field_2 = "a.`P_NAME_SECOND`";
foreach ($pl_letters as $k_ind => $v_char_pl) {
$sql_field_1 = "REPLACE(" . $sql_field_1 . ", '" . $v_char_pl . "', '" . $en_letters[$k_ind] . "')";
$sql_field_2 = "REPLACE(" . $sql_field_2 . ", '" . $v_char_pl . "', '" . $en_letters[$k_ind] . "')";
}//end foreach
$sql_filter_q []= $sql_field_1 . " like '%" . $db->_($q_value_clean_en) . "%'";
$sql_filter_q []= $sql_field_2 . " like '%" . $db->_($q_value_clean_en) . "%'";
$sql_where_and_arr []= "(" . implode(" or ", $sql_filter_q) . ")";
}
}
}
$sql_where = (empty($sql_where_and_arr))? "1=1" : implode(" and ", $sql_where_and_arr);
$sql = "select a.`id_users` as ID
, a.`id_users`
, a.`P_NAME`
, a.`P_NAME_SECOND`
, a.`P_ADDRESS_STREET`
, a.`P_ADDRESS_HOME`
, a.`P_ADDRESS_HOUSE`
, a.`P_ADDRESS_CITY`
, a.`P_ADDRESS_POST_CODE`
, a.`P_ADDRESS_REGION`
, a.`P_NIP`
, a.`P_PESEL`
, a.`P_PHONE`
, a.`P_OTHER_DOC`
, a.`user_mail_contact`
, a.`is_firma`
from `BILLING_USERS_ADD` as a
where ".$sql_where."
".$sql_order_by."
".$sql_limit."
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$users_rows[$r->id_users] = $r;
}
return $users_rows;
}
public static function get_user_info($user_id) {
$user = null;
$user_id = (int)$user_id;
if ($user_id <= 0) {
return $user_id;
}
$db = DB::getDB();
$sql = "select bua.`id_users`
, bua.`id_users` as ID_BILLING_USERS
, bua.`is_firma`
, bua.`P_NAME`
, bua.`P_NAME_SECOND`
, bua.`P_NIP`
, bua.`P_PESEL`
, bua.`P_PHONE`
, bua.`P_ADDRESS_REGION`
, bua.`P_ADDRESS_CITY`
, bua.`P_ADDRESS_POST_CODE`
, bua.`P_ADDRESS_STREET`
, bua.`P_ADDRESS_HOME`
, bua.`P_ADDRESS_HOUSE`
, bua.`user_mail_contact`
, bu.`BILLING_OWNER`
from `BILLING_USERS_ADD` as bua
left join `BILLING_USERS` as bu on(bu.`ID`=bua.`id_users`)
where bua.`id_users`='{$user_id}'
";
$res = $db->query($sql);
if ($r = $db->fetch($res)) {
$user = $r;
}
return $user;
}
public static function get_users2_deals_empty_object() {
return new Column_users2_deals();
}
public static function get_deals_table_empty_object() {
return new Column_deals_table();
}
public static function get_buildings_cols() {
$buildings_sql_cols = array();
$buildings_sql_cols ['ID']= "ID";
$buildings_sql_cols ['S_ADDRESS_STREET']= "S ADDRESS STREET";
$buildings_sql_cols ['P_ADDRESS_STREET']= "P ADDRESS STREET";
$buildings_sql_cols ['A_STATUS']= "A STATUS";
$buildings_sql_cols ['T_INSTALACJA_W_CIAGU_DNI']= ''."T INSTALACJA W CIAGU DNI".' ';
$buildings_sql_cols ['T_BUILDING_TYPE']= "T BUILDING TYPE";
$buildings_sql_cols ['M_REWIR']= "M REWIR";
$buildings_sql_cols ['M_PARAMETRY']= "M PARAMETRY";
$buildings_sql_cols ['M_DIRECT_MARKETING_DATE']= "M DIRECT MARKETING DATE";
$buildings_sql_cols ['M_DATA_ZASIEDLENIA']= "M DATA ZASIEDLENIA";
return $buildings_sql_cols;
}
public static function get_marketing_cols() {
$marketing_sql_cols = array();
$marketing_sql_cols ['ID']= "ID";
$marketing_sql_cols ['S_ADDRESS_STREET']= "S ADDRESS STREET";
$marketing_sql_cols ['A_RECORD_UPDATE_DATE']= "A RECORD UPDATE DATE";
$marketing_sql_cols ['A_RECORD_UPDATE_AUTHOR']= "A RECORD UPDATE AUTHOR";
$marketing_sql_cols ['L_APPOITMENT_DATE']= "L APPOITMENT DATE";
$marketing_sql_cols ['L_APPOITMENT_USER']= "L APPOITMENT USER";
$marketing_sql_cols ['L_APPOITMENT_INFO']= "L APPOITMENT INFO";
return $marketing_sql_cols;
}
public static function get_buildings_by_mieszk($street) {
$buildings = array();
if (empty($street)) {
//return self::get_buildings($street);
return $buildings;
}
$db = DB::getDB();
$sql_cols_alias = array();
$buildings_sql_cols = self::get_buildings_cols();
foreach ($buildings_sql_cols as $k => $v) {
$sql_cols_alias []= 'b.' . $k;
}
$marketing_sql_cols = self::get_marketing_cols();
foreach ($marketing_sql_cols as $k => $v) {
$sql_cols_alias []= 'm.' . $k . ' as m__' . $k;
}
$sql_cols_alias []= 'm.`T_TELBOX_BUILDING_IN` as m__T_TELBOX_BUILDING_IN';
$sql_where_and = array();
$sql_where_and []= "1=1";
$sql_where_and []= "m.`A_STATUS` in('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD')";
$sql_where_and []= "m.`S_ADDRESS_STREET`='" . $db->_($street) . "'";
$sql_where = implode(" and ", $sql_where_and);
$sql = "select " . implode(", ", $sql_cols_alias) . "
from `USERS2_MARKETING` as m
left join `BUILDINGS` as b on(b.`S_ADDRESS_STREET`=m.`T_TELBOX_BUILDING_IN`)
where " . $sql_where . "
group by b.`ID`
order by b.`S_ADDRESS_STREET`
";
DEBUG_S(6, "dbg sql:", $sql, __FILE__, __FUNCTION__, __LINE__);
$res = $db->query( $sql );
while ($r = $db->fetch( $res )) {
$buildings [$r->ID]= $r;
}
return $buildings;
}
public static function get_buildings($street) {
$buildings = array();
$db = DB::getDB();
$buildings_sql_cols = self::get_buildings_cols();
$sql_where_and = array();
$sql_where_and []= "1=1";
if (!empty($street)) {
$sql_where_and []= "
(
`S_ADDRESS_STREET` like '" . $db->_($street) . "'
or `P_ADDRESS_STREET` like '" . $db->_($street) . "'
)
";
}
$sql_where = implode(" and ", $sql_where_and);
$sql = "select ".implode(", ", array_keys($buildings_sql_cols))."
from `BUILDINGS`
where
" . $sql_where . "
order by `S_ADDRESS_STREET`
";
DEBUG_S(6, "dbg sql:", $sql, __FILE__, __FUNCTION__, __LINE__);
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$buildings [$r->ID]= $r;
}
return $buildings;
}
public static function get_deal($id_deal) {
$deal = null;
if ($id_deal <= 0) {
return $deal;
}
$sql = "select d.`ID`
, d.`ID_BILLING_USERS`
, d.`P_DEALPREFIX`
, d.`P_DEALNUMBER`
, d.`P_DEALNUMBER_OLD`
, d.`P_DEALDATE`
, d.`P_DEALDATE_TERM`
, d.`ANEX_NEEDED`
, d.`ANEX_CONFIRM_DATE`
, d.`DEALDESC`
, d.`A_STATUS`
, d.`ID_OFFERS_GROUP`
, d.`S_ADDRESS_STREET`
, d.`ID_OFFERS_ON`
, d.`ID_OFFERS_OFF`
, d.`P_ID`
, d.`L2_HANGUP_FROM`
from `DEALS_TABLE` as d
where d.`ID`='" . $id_deal . "'
";
$res = DB::query($sql);
if ($r = DB::fetch($res)) {
$deal = $r;
}
return $deal;
}
public static function get_group_with_options($id_group, $idsOffers) {
$group = self::get_group($id_group);
if (!empty($idsOffers)) $group->fetch_offers_by_ids(explode(",", $idsOffers));
return $group;
}
public static function get_group($id_group) {
$group = null;
if ($id_group <= 0) {
return $group;
}
$sql = "select
t0.`ID` ,
t0.`S_ALIAS` ,
t0.`P_SERVICE_COMPANY` ,
t0.`P_PROMOTION_NAME` ,
t0.`P_DEALTERM_MONTHS` ,
t0.`P_OFFER_TERM_BEGIN` ,
t0.`P_OFFER_TERM` ,
t0.`M_REWIR` ,
t0.`ID_NET` ,
t0.`ID_TV` ,
t0.`ID_TVC` ,
t0.`ID_TVCP_1` ,
t0.`ID_TVCP_2` ,
t0.`ID_TVCP_3` ,
t0.`ID_TVCP_4` ,
t0.`ID_TEL`,
t0.`RABAT_IF_OPCJA_TVC`,
t0.`RABAT_IF_OPCJA_TEL`
from `USERS2_OFFERS_GROUPS` as t0
where t0.`ID`='" . $id_group . "'
group by t0.ID
order by t0.ID desc
";
$res = DB::query($sql);
if ($r = DB::fetch($res)) {
$group = new Column_users2_offers_groups();
$group->set_from_raw_data($r);
}
return $group;
}
public static function get_offers_by_id($offers_ids, $params = array()) {
$offers = array();
$db = DB::getDB();
$sql_select = array();
if (($dealterm = V::get('P_DEALTERM_MONTHS', 0, $params, 'int')) > 0) {
$sql_select []= "ROUND(( ((" . $dealterm . " - o.P_DEAL_PROMO_MONTHS)*o.P_CONTRACT_PRICE) + (o.P_DEAL_PROMO_MONTHS*o.P_PROMO_MONTH_PRICE) + (o.P_INSTALL_QUOTE))/" . $dealterm . ", 2) as srednia";
$sql_select []= "ROUND(( ((" . $dealterm . " - o.P_DEAL_PROMO_MONTHS)*o.P_CONTRACT_PRICE_NETTO) + (o.P_DEAL_PROMO_MONTHS*o.P_PROMO_MONTH_PRICE_NETTO) + (o.P_INSTALL_QUOTE/1.23))/" . $dealterm . ", 2) as srednia_netto";
$sql_select []= "o.P_NORMAL_PRICE*" . $dealterm . " - o.P_DEAL_PROMO_MONTHS*o.P_PROMO_MONTH_PRICE - (" . $dealterm . " - o.P_DEAL_PROMO_MONTHS)*o.P_CONTRACT_PRICE + (o.P_INSTALL_QUOTE_NORMAL - o.P_INSTALL_QUOTE) as `upust`";
}
//$sql_select []= "'' as out_id";
$sql_select []= "o.`ID`";
$sql_select []= "o.`S_ALIAS`, o.`P_SERVICE_NAME`, o.`P_PROMOTION_NAME`, o.`P_S_PARAM1`";
$sql_select []= "o.`P_INSTALL_QUOTE`, o.`P_INSTALL_QUOTE_NORMAL`, round(o.`P_INSTALL_QUOTE`/1.23, 2) as P_INSTALL_QUOTE_NETTO";
$sql_select []= "o.`P_CONTRACT_PRICE`, o.`P_CONTRACT_PRICE_NETTO`";
$sql_select []= "o.`P_PROMO_MONTH_PRICE`, o.`P_PROMO_MONTH_PRICE_NETTO`";
$sql_select []= "o.`P_NORMAL_PRICE`, o.`P_NORMAL_PRICE_NETTO`";
$sql_select []= "o.`P_DEAL_PROMO_MONTHS`";
$sql_select []= "o.`P_SERVICE`, o.`P_SERVICE_PARENT`";
$sql_select []= "o.`A_STATUS`";
$sql_select []= "o.`P_SERVICE_COMPANY`";
// $sql_select []= "o.`S_OTHER_INFO`";
// $sql_select []= "o.`USERS2_OFFERS_GROUPS_ID`";
$sql_select []= "o.`P_S_PARAM2`";
// $sql_select []= "o.`P_S_LIMIT`";
// $sql_select []= "o.`P_S_LAN`";
$sql_select []= "o.`P_DEALTERM_MONTHS`";
$sql_select []= "o.`STAWKA_VAT`";
// $sql_select []= "o.`P_S_MAILBOX_SIZE`";
// $sql_select []= "o.`P_S_WWW_SIZE`";
// $sql_select []= "o.`P_OFFER_TERM_BEGIN`";
// $sql_select []= "o.`P_OFFER_TERM`";
// $sql_select []= "o.`S_DEKODER_SD_OPTION`";
// $sql_select []= "o.`S_MODUL_PCMCIA_OPTION`";
// $sql_select []= "o.`S_DEKODER_HD_OPTION`";
// $sql_select []= "o.`ID_PRODUKT`";
$sql_select []= "o.`LAN_DOWNLOAD`";
$sql_select []= "o.`S_PUBLIC_IP`";
$sql_select []= "o.`S_SOHO_WIFI_ROUTER_1292`";
$sql_select []= "o.`S_E_PORT_1293`";
$sql_select []= "o.`P_DEVICE`";
$sql_select []= "o.`P_SERVICE_CLASS`";
$sql_select []= "o.`P_SERVICE_SOCKETS_AMMOUNT_1298`";
$sql_select []= "o.`ID_DOMAINS`";
$sql_select []= "o.`ID_DOMAINS_PACKET_ID`";
$sql_select []= "o.`VOIP_FAX2EMAIL`";
$sql_select []= "o.`CONN_DIV`";
$sql_select []= "o.`P_SERVICE_QUOTA`";
$sql_select []= "o.`P_SERVICE_QUOTA_PROFILE`";
$sql_select []= "o.`P_SERVICE_UPLOAD_RATIO`";
$sql_select []= "o.`S_TECHNOLOGY`";
$sql_select []= "o.`P_MULTIROOM_ADD_CARDS`";
$sql_select []= "o.`P_MULTIROOM_ADD_DEKODER_SD`";
$sql_select []= "o.`P_MULTIROOM_ADD_DEKODER_HD`";
$sql_select []= "o.`P_MULTIROOM_ADD_MODUL_CAM`";
$sql = "select " . implode(", ", $sql_select) . "
from `USERS2_OFFERS` as o
where o.`ID` in(" . implode(', ', $offers_ids) . ")
";
$res = $db->query($sql);
if ($db->has_errors()) {
echo'DB Errors (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo' ';
echo'sql (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';
}
while ($r = $db->fetch($res)) {
if ($r->P_SERVICE == 'OPCJA_TVC') $r->P_SERVICE = 'TVC';
else if ($r->P_SERVICE == 'OPCJA_TEL') $r->P_SERVICE = 'TEL';
$offers[$r->ID] = $r;
}
return $offers;
}
public static function get_users2_deals_by_deal_id($deal_id, $params = array()) {
$users2_deals = array();
$db = DB::getDB();
$sql_status = "";
$status = V::get('A_STATUS', '', $params);
if (!empty($status)) {
$allowed_status = array('WAITING', 'NORMAL');
if (!is_array($status)) {
$status = array($status);
}
$sql_status_arr = array();
foreach ($status as $v_status) {
if (in_array($v_status, $allowed_status)) {
$sql_status_arr []= "'{$v_status}'";
}
}
if (!empty($sql_status_arr)) {
$sql_status = "and d.`A_STATUS` in (" . implode(',', $sql_status_arr) . ")";
}
}
$sql = "select d.*
from `USERS2_DEALS` as d
where d.`P_DEALNUMBER_NEW`='{$deal_id}'
{$sql_status}
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$users2_deals []= $r;
}
return $users2_deals;
}
/**
* @param array $offer_ids
* @returns array $oferty_costs
*/
public static function get_offers_costs_by_offer_ids($offer_ids = array()) {
$oferty_costs = array();
$db = DB::getDB();
$sql_where = "";
if (!empty($offer_ids)) {
$sql_where = "where o.`ID` in (" . implode(",", $offer_ids) . ")";
}
$sql = "select
o.`ID` as ID_OFERTY
, c.`P_OFFER_COSTS`
from `USERS2_OFFERS` as o
join `USERS2_OFFERS_COSTS_GROUPS` as c on (c.`ID`=o.`ID_COSTS_GROUPS`)
{$sql_where}
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$oferty_costs[$r->ID_OFERTY] = (double)$r->P_OFFER_COSTS;
}
return $oferty_costs;
}
/**
* @param array $offer_ids
* @returns array $oferty_costs_start
*/
public static function get_offers_costs_start_by_offer_ids($offer_ids = array()) {
$oferty_costs_start = array();
$db = DB::getDB();
$sql_where = "";
if (!empty($offer_ids)) {
$sql_where = "where o.`ID` in (" . implode(",", $offer_ids) . ")";
}
$sql = "select
o.`ID` as ID_OFERTY
, c.`P_OFFER_COSTS_START`
from `USERS2_OFFERS` as o
join `USERS2_OFFERS_COSTS_GROUPS` as c on (c.`ID`=o.`ID_COSTS_GROUPS`)
{$sql_where}
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$oferty_costs_start[$r->ID_OFERTY] = $r->P_OFFER_COSTS_START;
}
return $oferty_costs_start;
}
public static function get_oferty_opcje_visible_cols() {
$cols = array();
$cols ['ID'] = 'ID oferty';
//$cols ['ID_PROCES' ] = '';
$cols ['S_OTHER_INFO' ] = ' ! ';
$cols ['P_SERVICE_NAME' ] = 'Nazwa oferty';
$cols ['P_INSTALL_QUOTE' ] = 'Promocyjna cena instalacji (brutto)';
$cols ['P_PROMO_MONTH_PRICE' ] = 'Wartość abonamentu w promocyjnych miesiącach (brutto)';
$cols ['P_CONTRACT_PRICE' ] = 'Wartość abonamentu po promocji (brutto)';
$cols ['P_DEAL_PROMO_MONTHS' ] = 'Ilość promocyjnych miesięcy';
//$cols ['P_DEALTERM_MONTHS' ] = '';
$cols ['P_NORMAL_PRICE' ] = 'Nominalna wartość abonamentu (brutto)';
$cols ['srednia'] = 'Średnia (brutto)';
$cols ['upust'] = 'Upust od ceny normalnej do wyliczeń kary (brutto)';
$cols ['koszt'] = 'Koszt (netto)';
return $cols;
}
public static function get_oferty_opcje() {
$db = DB::getDB();
$oferty_opcje = array();// [ service ] => array(ID => {oferta})
$oferty_costs = self::get_offers_costs_by_offer_ids();
// TODO: use [P_OFFER_TERM_BEGIN] => 0000-00-00, [P_OFFER_TERM] => 2011-12-31, [M_REWIR] => gd
$sql = "select
o.`ID`
, o.`P_SERVICE`
, o.`P_SERVICE_PARENT`
, o.`P_SERVICE_NAME`
, o.`P_INSTALL_QUOTE`
, o.`P_INSTALL_QUOTE_NORMAL`
, o.`P_CONTRACT_PRICE`
, o.`P_PROMO_MONTH_PRICE`
, o.`P_NORMAL_PRICE`
, o.`P_DEAL_PROMO_MONTHS`
, o.`P_DEALTERM_MONTHS`
, o.`ID_PRODUKT` as `ID_PRODUKT`
, '' as `upust`
, '' as `koszt`
, IF(o.`ID_PROCES`>0, o.`ID_PROCES`, '') as `ID_PROCES`
, o.`S_OTHER_INFO`
, o.`S_TECHNOLOGY`
, o.`P_MULTIROOM_ADD_CARDS`
, o.`P_MULTIROOM_ADD_DEKODER_SD`
, o.`P_MULTIROOM_ADD_DEKODER_HD`
, o.`P_MULTIROOM_ADD_MODUL_CAM`
from `USERS2_OFFERS` as o
where o.`P_SERVICE`='OPCJE'
and o.`A_STATUS`='NORMAL'
and o.`P_SERVICE_COMPANY`='BN'
order by o.`ID_PRODUKT` desc, o.`P_CONTRACT_PRICE` desc
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$r->srednia = '';
if (array_key_exists($r->ID, $oferty_costs)) {
$r->koszt = $oferty_costs[ $r->ID ];
}
$oferty_opcje[ $r->P_SERVICE_PARENT ][ $r->ID ] = $r;
}
return $oferty_opcje;
}
public static function get_oferty_opcje_all($building, $com = '') {
// [f_COM] => Array:
// [label] => COMPANY
// [values] => Array:
// [BIALL-NET] => t0.`P_SERVICE_COMPANY`='BN'
// [NETDAY] => t0.`P_SERVICE_COMPANY`='NETDAY'
// [default] => BIALL-NET
// [value] => NETDAY
$sql_where_rewir_add_company = '';
if ($com == 'BIALL-NET') {
$sql_where_rewir_add_company = " and o.`P_SERVICE_COMPANY`='BN' ";
} else if ($com == 'NETDAY') {
$sql_where_rewir_add_company = " and o.`P_SERVICE_COMPANY`='NETDAY' ";
}
$db = DB::getDB();
$oferty_opcje = array();// [ service ] => array(ID => {oferta})
$oferty_costs = self::get_offers_costs_by_offer_ids();
// TODO: use [P_OFFER_TERM_BEGIN] => 0000-00-00, [P_OFFER_TERM] => 2011-12-31, [M_REWIR] => gd
$sqlStatus = array('NORMAL');
if (V::get('TEST_MONITOR', '', $_GET)) $sqlStatus[] = 'MONITOR';
$sqlStatus = "and o.`A_STATUS` in('" . implode("','", $sqlStatus) . "')";
$sqlRewir = "";
if ($building) {
$sqlRewir = "
and (o.`M_REWIR`=''
or ('{$building->M_REWIR}' like o.`M_REWIR`)
)
";
}
$sql = "select
o.`ID`
, o.`P_SERVICE`
, o.`P_SERVICE_PARENT`
, o.`P_SERVICE_NAME`
, o.`P_INSTALL_QUOTE`
, o.`P_INSTALL_QUOTE_NORMAL`
, o.`P_CONTRACT_PRICE`
, o.`P_PROMO_MONTH_PRICE`
, o.`P_NORMAL_PRICE`
, o.`P_DEAL_PROMO_MONTHS`
, o.`P_DEALTERM_MONTHS`
, o.`ID_PRODUKT` as `ID_PRODUKT`
, '' as `upust`
, '' as `koszt`
, IF(o.`ID_PROCES`>0, o.`ID_PROCES`, '') as `ID_PROCES`
, o.`S_OTHER_INFO`
, o.`S_TECHNOLOGY`
, o.`P_MULTIROOM_ADD_CARDS`
, o.`P_MULTIROOM_ADD_DEKODER_SD`
, o.`P_MULTIROOM_ADD_DEKODER_HD`
, o.`P_MULTIROOM_ADD_MODUL_CAM`
, o.`M_REWIR`
, IF (''=o.`M_REWIR`, 1, 0) as rewir_empty
, IF ('{$building->M_REWIR}' like o.`M_REWIR`, 1, 0) as rewir_ok
from `USERS2_OFFERS` as o
where o.`P_SERVICE` in('OPCJE', 'OPCJA_TVC', 'OPCJA_TEL')
{$sqlStatus}
{$sql_where_rewir_add_company}
{$sqlRewir}
order by o.`ID_PRODUKT` desc, o.`P_CONTRACT_PRICE` desc
";
DBG::_('DBG', '>1', "sql oferty opcje", $sql, __CLASS__, __FUNCTION__, __LINE__);
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$r->srednia = '';
if (array_key_exists($r->ID, $oferty_costs)) {
$r->koszt = $oferty_costs[ $r->ID ];
}
if (in_array($r->P_SERVICE, array('OPCJA_TVC', 'OPCJA_TEL'))) {
$oferty_opcje[ $r->P_SERVICE ][ $r->ID ] = $r;
} else {
$oferty_opcje[ $r->P_SERVICE_PARENT ][ $r->ID ] = $r;
}
}
return $oferty_opcje;
}
public static function find_groups_by_offers($oferty, $todo_test_deal_id = 0) {
$db = DB::getDB();
$groups = array();
$sql_where_arr = array();
foreach ($oferty as $v_offer) {
if ($v_offer->P_SERVICE == 'NET') {
$sql_where_arr []= " `ID_NET`='{$v_offer->ID}' ";
}
else if ($v_offer->P_SERVICE == 'TEL') {
$sql_where_arr []= " `ID_TEL`='{$v_offer->ID}' ";
}
else if ($v_offer->P_SERVICE == 'TV') {
$sql_where_arr []= " (`ID_TV`='{$v_offer->ID}' or `ID_TVC`='{$v_offer->ID}')";
}
}
if (empty($sql_where_arr)) {
echo'Cant find groups for offers ('.$todo_test_deal_id.') (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($oferty);echo' ';
return $groups;
}
$sql_where = implode(" and ", $sql_where_arr);
$sql = "SELECT *
FROM `USERS2_OFFERS_GROUPS`
where $sql_where
";
$res = $db->query($sql);
if ($db->has_errors()) {
echo'DB Errors (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo' ';
echo'sql (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';
}
while ($r = $db->fetch($res)) {
$groups []= $r;
}
return $groups;
}
public static function date_diff_days($d1, $d2) {
$d1_sec = strtotime($d1);
$d2_sec = strtotime($d2);
$diff_sec = $d1_sec - $d2_sec;
$diff_days = floor($diff_sec / 3600 / 24);
return $diff_days;
}
public static function date_diff_months($d1, $d2) {
$d1_sec = strtotime($d1);
$d2_sec = strtotime($d2);
$diff_sec = $d1_sec - $d2_sec;
$diff_months = floor($diff_sec / 3600 / 24 / 30);
return $diff_months;
}
public static function get_aneks_loss($offers_ids, $diff_months, $deal_month, &$loss_log) {
if (empty($offers_ids) || $diff_months <= 0) {
return 0;
}
$loss = 0;
$offers = self::get_offers_by_id($offers_ids, array('P_DEALTERM_MONTHS'=>$deal_month));
$offers_costs = self::get_offers_costs_by_offer_ids($offers_ids);
foreach ($offers as $v_offer) {
if (array_key_exists($v_offer->ID, $offers_costs)) {
$loss_log []= "oferta {$v_offer->ID} srednia netto: {$v_offer->srednia_netto} koszt: {$offers_costs[$v_offer->ID]}";
$loss += $v_offer->srednia_netto - $offers_costs[$v_offer->ID];
} else {
$loss_log []= "brak kosztów dla ofety {$v_offer->ID}";
}
}
$loss_log []= "sredni zysk miesięczny {$loss}";
$loss = $loss * $diff_months;
return $loss;
}
public static function get_aneks_loss_abonament_netto($offers_ids, $diff_months, $deal_month, &$loss_log) {
if (empty($offers_ids) || $diff_months <= 0) {
return 0;
}
$loss = 0;
$offers = self::get_offers_by_id($offers_ids, array('P_DEALTERM_MONTHS'=>$deal_month));
foreach ($offers as $v_offer) {
$loss += $v_offer->srednia_netto;
}
$loss_log []= "sredni abonament miesięczny {$loss}";
$loss = $loss * $diff_months;
return $loss;
}
public static function get_deals_by_month($month, $params = array()) {
$deals = array();
$sql_status = "";
$status = V::get('A_STATUS', '', $params);
if (!empty($status)) {
$allowed_status = array('WAITING', 'NORMAL');
if (!is_array($status)) {
$status = array($status);
}
$sql_status_arr = array();
foreach ($status as $v_status) {
if (in_array($v_status, $allowed_status)) {
$sql_status_arr []= "'{$v_status}'";
}
}
if (!empty($sql_status_arr)) {
$sql_status = "and d.`A_STATUS` in (" . implode(',', $sql_status_arr) . ")";
}
}
$db = DB::getDB();
$sql = "select d.*
from `DEALS_TABLE` as d
where
d.`P_DEALDATE` like '{$month}-%'
{$sql_status}
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$deals[$r->ID] = $r;
}
return $deals;
}
public static function getDealsRozlicz($month, $params = array()) {
$deals = array();
$sql_status = "";
$status = V::get('A_STATUS', '', $params);
if (!empty($status)) {
$allowed_status = array('WAITING', 'NORMAL', 'OFF_HARD');
if (!is_array($status)) {
$status = array($status);
}
$sql_status_arr = array();
foreach ($status as $v_status) {
if (in_array($v_status, $allowed_status)) {
$sql_status_arr []= "'{$v_status}'";
}
}
if (!empty($sql_status_arr)) {
$sql_status = "and d.`A_STATUS` in (" . implode(',', $sql_status_arr) . ")";
}
}
$db = DB::getDB();
$sql = "select d.*
from `DEALS_TABLE` as d
where
d.`ROZLICZ_MONTH` like '{$month}-%'
{$sql_status}
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$deals[$r->ID] = $r;
}
return $deals;
}
}
class Column_Base {
var $_data;
var $_errors;
function __construct() {
$this->_errors = array();
$this->_data = array();
}
function get($field) {
return (array_key_exists($field, $this->_data))? $this->_data[$field] : '';
}
function set($field, $value) {
if (array_key_exists($field, $this->_data)) {
$this->_data[$field] = $value;
}
}
function setForce($field, $value) {
$this->_data[$field] = $value;
}
function get_cols() {
return array_keys($this->_data);
}
function get_data() {
return $this->_data;
}
function add_error($msg) {
$this->_errors []= $msg;
}
function get_errors() {
return $this->_errors;
}
function has_errors() {
return !empty($this->_errors);
}
}
class Services_Converter {
var $_deal;// Column_deal_table
var $_group;// Column_users2_offers_groups
var $_services;
var $_old_deals_data;// user current active deals with services info
var $_old_deal;// current choosen old deal
var $_old_srv_data;//
var $_new_srv_data;//
var $_srv_map;//
var $_srv_to_create;
var $_srv_to_off;
var $_errors;
function __construct() {
$this->_deal = null;
$this->_group = null;
$this->_services = array();
$this->_old_deals_data = array();
$this->_old_deal = null;
$this->_old_srv_data = array();
$this->_new_srv_data = array();
$this->_srv_map = array();
$this->_srv_to_create = array();
$this->_srv_to_off = array();
$this->_errors = array();
}
function set_deal($deal) {
$this->_deal = $deal;
}
function fetch_group() {
if (!$this->_deal || $this->_deal->get('ID') <= 0) {
return false;
}
$db = DB::getDB();
$group_id = (int)$this->_deal->get('ID_OFFERS_GROUP');
if ($group_id <= 0) {
return false;
}
$this->_group = PokazOfertyHelper::get_group($group_id);
if ($this->_group) {
return true;
}
return false;
}
/**
* Fetch offers rows by ID_OFFERS_ON or USERS2_DEALS.
*/
function fetch_offers() {
if (!$this->_deal || $this->_deal->get('ID') <= 0) {
return;
}
$id_offers_on = $this->_deal->get('ID_OFFERS_ON');
if (!empty($id_offers_on)) {
$offers_ids = explode(',', $id_offers_on);
} else {
$offers_ids = array();
$db = DB::getDB();
$sql = "select d.`P_OFFER_ID_NEW`
from `USERS2_DEALS` as d
where d.`P_DEALNUMBER_NEW`='" . $this->_deal->get('ID') . "'
and d.`A_STATUS`='WAITING'
and d.`P_OFFER_ID_NEW`>0
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$offers_ids []= $r->P_OFFER_ID_NEW;
}
}
if (empty($offers_ids)) {
return;
}
$this->_group->set_offers(PokazOfertyHelper::get_offers_by_id($offers_ids));
}
function fetch_old_deal() {
if ($this->_deal->get('P_DEALNUMBER_OLD') > 0) {
$this->_old_deals_data = PokazOfertyHelper::get_deals_active_with_info($this->_deal->get('S_ADDRESS_STREET'), $this->_deal->get('ID_BILLING_USERS'));
if (array_key_exists($this->_deal->get('P_DEALNUMBER_OLD'), $this->_old_deals_data)) {
$this->_old_deal = $this->_old_deals_data[$this->_deal->get('P_DEALNUMBER_OLD')];
}
}
}
function generate_srv_map() {
if (empty($this->_old_deals_data)) return;
foreach ($this->_old_deals_data as $k_deal_id => $v_deal) {
foreach ($v_deal->services_by_id as $k_p_service => $v_srv) {
$v_srv->ses_x_a = V::get($v_srv->ID, null, $v_deal->ses_x_a);
$this->_old_srv_data [$v_deal->ID_DEALS] [$v_srv->ID] = $v_srv;
}
foreach ($this->_group->get_offers_by_id() as $v_offer) {
if ($v_offer->P_SERVICE_PARENT != '') {// opcja
if ($v_offer->ID_DOMAINS == '' && $v_offer->ID_DOMAINS_PACKET_ID == '') {
// pomin - ta oferta jest tylko opcją i nie wchodzi jako osobny SERVICES
continue;
}
}
$this->_new_srv_data [$v_offer->ID]= $v_offer;
}
$this->_srv_map[$v_deal->ID_DEALS] = array();
$used_offer_ids = array();// id offers => id srv
// decide what to do with old services
foreach ($this->_old_srv_data[$v_deal->ID_DEALS] as $k_srv_id => $v_srv) {
$new_offer_id = 0;
// pomin NET pod VOIP
if ($v_srv->NAME_LIST_SERVICES == 'USERS2') {
if ($v_srv->P_ID_SERVICES > 0) {
?>
Usługa internet ID=ID; ?> pozostanie bez zmian ponieważ ma ustawione P_ID_SERVICES.
_new_srv_data as $k_offer_id => $v_offer) {
if (in_array($k_offer_id, $used_offer_ids) || $new_offer_id > 0) {
continue;
}
// try if new offer match old service
if ($v_srv->NAME_LIST_SERVICES == 'USERS2') {
if ($v_offer->P_SERVICE == 'NET') {
if ($v_offer->S_TECHNOLOGY == $v_srv->ses_x_a->S_TECHNOLOGY) {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
} else {
?>
TODO: Oferta na internet ma S_TECHNOLOGY='S_TECHNOLOGY; ?>', a aktualna usługa ma 'ses_x_a->S_TECHNOLOGY; ?>'
S_TECHNOLOGY == 'GPON') : ?>
Propozycja: utworzyć nową umowę zamiast aneksu, a stare usługi wyłączyć po instalacji nowych usług.
Stare usugi zostaną wyłączone automtycznie, ale powinny działać do czasu włączenia nowej umowy
NAME_LIST_SERVICES == 'VOIP') {
if ($v_offer->P_SERVICE == 'TEL') {
if ($v_offer->ID_DOMAINS != '') {
if ($v_offer->ID_DOMAINS == $v_srv->ses_x_a->ID_DOMAINS) {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
}
}
} else if ($v_srv->NAME_LIST_SERVICES == 'TV') {
if ( ($v_offer->P_SERVICE == $v_srv->ses_x_a->P_SERVICE_CLASS)
|| ($v_offer->P_SERVICE == 'OPCJE' && $v_offer->P_SERVICE_PARENT == 'TV')
|| ($v_offer->P_SERVICE == 'OPCJE' && $v_offer->P_SERVICE_PARENT == 'TVC')
) {// TV, TVC, TVCP
if ($v_offer->ID_DOMAINS != '' && $v_offer->ID_DOMAINS_PACKET_ID > 0) {
if ($v_offer->ID_DOMAINS == $v_srv->ses_x_a->ID_DOMAINS && $v_offer->ID_DOMAINS_PACKET_ID == $v_srv->ses_x_a->ID_DOMAINS_PACKET_ID) {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
} else {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
}
}
}
$this->_srv_map[$v_deal->ID_DEALS][$v_srv->ID] = $new_offer_id;
}
}
DBG::log($this->_srv_map, 'array', "_srv_map generated");
}
function get_srv_map() {
return $this->_srv_map;
}
function get_srv_map_by_deal($deal_id) {
return (array_key_exists($deal_id, $this->_srv_map))? $this->_srv_map[$deal_id] : null;
}
function get_old_srv_data($deal_id) {
return (array_key_exists($deal_id, $this->_old_srv_data))? $this->_old_srv_data[$deal_id] : array();
}
function add_error($msg) {
$this->_errors []= $msg;
}
function get_errors() {
return $this->_errors;
}
function has_errors() {
return !empty($this->_errors);
}
function validate_edit() {
if ($this->_deal->get('ID') <= 0) {
$this->add_error("Błędny numer ID rekordu");
}
if ('WAITING' != $this->_deal->get('A_STATUS')) {
$verify_link = "?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC&task=verify_deal&id_deal=" . $this->_deal->get('ID');
$verify_link = " - " . '' . " Zweryfikuj " . $this->_deal->get('ID') . ' ';
$this->add_error("Błędny status umowy (A_STATUS), aktywować można tylko WAITING {$verify_link}");
}
if (intval($this->_deal->get('ID_OFFERS_GROUP')) <= 0) {
$this->add_error("Błędny numer pakietu ID_OFFERS_GROUP");
} else {
if (!$this->_group) {
$this->add_error("Brak grupy ofert ID " . $this->_data['ID_OFFERS_GROUP'] . " (USERS2_OFFERS_GROUPS)");
} else if (!$this->_group->has_offers()) {
$this->add_error("Brak ofert (USERS2_OFFERS)");
}
}
if (intval($this->_deal->get('ID_BILLING_USERS')) <= 0) {
$this->add_error("Błędny numer klienta ID_BILLING_USERS");
}
if ('' == $this->_deal->get('P_DEALPREFIX')) {
$this->add_error("Pole P_DEALPREFIX musi być wypełnione");
}
if (intval($this->_deal->get('P_DEALNUMBER')) <= 0) {
$this->add_error("Błędny numer umowy P_DEALNUMBER");
}
$deal_date = $this->_deal->get('P_DEALDATE');
if (strlen($deal_date) != 10) {
$this->add_error("Błędna data umowy P_DEALDATE");
} else {
// TODO: data aktywacji nie moze byc wczesniej nie TODAY
}
$deal_term = $this->_deal->get('P_DEALDATE_TERM');
if (strlen($deal_term) != 10) {
$this->add_error("Błędny termin umowy P_DEALDATE_TERM");
}
$old_deal_id = intval($this->_deal->get('P_DEALNUMBER_OLD'));
if ($old_deal_id > 0) {
// check if all old SERVICES has ID_OFFER
$old_srv_data = $this->get_old_srv_data($old_deal_id);
foreach ($old_srv_data as $k_srv_id => $v_srv) {
if ($v_srv->ID_OFFERS <= 0) {
$this->add_error("Brak numeru oferty przy usłudze ID=" . $v_srv->ID . ": " . $v_srv->NAME_LIST_SERVICES);
}
if ($v_srv->A_STATUS == 'OFF_SOFT') {
$this->add_error("Usługa ID=" . $v_srv->ID . " typu '{$v_srv->NAME_LIST_SERVICES}' została zablokowana statusem 'OFF_SOFT' ");
}
}
$srv_map = $this->get_srv_map_by_deal($old_deal_id);
if (empty($srv_map)) {
$errLink = "index.php?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC&task=klient_umowy&id_user=" . $this->_deal->get('ID_BILLING_USERS');
$errLink = ' Sprawdź aktualne umowy klienta ';
$this->add_error("Brak srv_map dla old_deal_id = $old_deal_id!{$errLink}");
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
}
}
if (!$this->has_errors()) {
$activated_services = array();
$db = DB::getDB();
$sql = "select * from `SERVICES` where `ID_DEALS_TABLE`='" . $this->_deal->get('ID') . "'";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$activated_services[$r->ID] = $r;
}
if (!empty($activated_services)) {
//echo '' . "UWAGA: Uslugi już zostały wprowadzone! (SERVICES ID: " . implode(", ", array_keys($activated_services)) . ")" . '
';
$this->add_error("Uslugi dla tej umowy (ID: " . $this->_deal->get('ID') . ") już zostały wprowadzone! (SERVICES ID: " . implode(", ", array_keys($activated_services)) . ")");
}
}
return true;
}
function print_html_data() {
PokazOfertyView::print_simple_tbl((object)$this->_deal->get_data(), $this->_deal->get_cols(), 'DEALS_TABLE');
if ($this->_group) {
PokazOfertyView::print_simple_tbl((object)$this->_group->get_data(), $this->_group->get_cols(), 'USERS2_OFFERS_GROUPS');
$cols = array_keys(get_object_vars(reset($this->_group->get_offers_by_id())));
// hide P_SERVICE_QUOTA_PROFILE
if (in_array('P_SERVICE_QUOTA_PROFILE', $cols)) {
$new_cols = array();
foreach ($cols as $v_col) {
if ($v_col == 'P_SERVICE_QUOTA_PROFILE') {
continue;
}
$new_cols []= $v_col;
}
$cols = $new_cols;
}
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'USERS2_OFFERS');
echo '';
$t = 0;
foreach ($this->_group->get_offers_by_id() as $k_id => $v_offer) {
PokazOfertyView::print_simple_tbl_body_row($v_offer, $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
/*
$cols = array_keys(reset($this->_users2_deals_rows)->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'USERS2_DEALS');
echo '';
$t = 0;
foreach ($this->_users2_deals_rows as $k_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
*/
}
function get_service_type_map() {
/* fields map:
* SERVICES
* ID_BILLING_USERS $this->_user->ID_BILLING_USERS
* ID_DEALS_TABLE $this->get('ID')
* ID_OFFERS $this->_offers_rows[ID]->ID
* NAME_LIST_SERVICES USERS2, TV, VOIP
* A_STATUS WAITING
* active 1
* SERVICE_TYPE ABONAMENT
* ID_BILLING_NUMBERS_TYPE 1
* ABONAMENT_PERIOD 1
* ABONAMENT_VALUE $this->_offers_rows[ID]->P_PROMO_MONTH_PRICE_NETTO - netto w promocyjnych miesiącach
* lub P_CONTRACT_PRICE_NETTO + rekordy w SES_X_C po P_DEALTERM_MONTHS (VALUE1), TYP 17, róznice NETTO z ceną P_PROMO_MONTH_PRICE_NETTO (VALUE2)
* VAT $this->_offers_rows[ID]->STAWKA_VAT - vat (int)
* ID_CURRENCY 0
* ABONAMENT_PAYMENT UP
* ABONAMENT_START 1
* MINIMUM_BILLING_VALUE 0.00
* BILLED_TILL NULL
* HANGUP_FROM NULL
* HANGUP_TILL NULL
* HANGUP_STATUS NULL
* HANGUP_RATIO 1.00
* P_ID_SERVICES 0 lub parent services ID
* uwagi ''
* VAT_NAME 'ZW',8,23
* id_list_sww (int) ??
* SERV_ID_BILLING_PREFIXES 0
* TODO: VAT czasem jest 0 i VAT_NAME na ZW
*
* SES_USERS2_A
* ID_BILLING_USERS user.ID
* ID_SERVICES SERVICES.ID
* P_SERVICE_QUOTA_PROFILE $this->_offers_rows[ID]->P_SERVICE_QUOTA_PROFILE
* LAN_DOWNLOAD $this->_offers_rows[ID]->LAN_DOWNLOAD
* S_PUBLIC_IP $this->_offers_rows[ID]->S_PUBLIC_IP
* S_SOHO_WIFI_ROUTER_1292 $this->_offers_rows[ID]->S_SOHO_WIFI_ROUTER_1292
* S_E_PORT_1293 $this->_offers_rows[ID]->S_E_PORT_1293
* CONN_DIV $this->_offers_rows[ID]->CONN_DIV
* SES_TV_A
* P_DEVICE $this->_offers_rows[ID]->P_DEVICE
* P_SERVICE_CLASS $this->_offers_rows[ID]->P_SERVICE_CLASS
* P_SERVICE_SOCKETS_AMMOUNT_1298 $this->_offers_rows[ID]->P_SERVICE_SOCKETS_AMMOUNT_1298
* ID_DOMAINS_PACKET_ID $this->_offers_rows[ID]->ID_DOMAINS_PACKET_ID
* ID_DOMAINS $this->_offers_rows[ID]->ID_DOMAINS
* SES_VOIP_A
* ID_DOMAINS_PACKET_ID $this->_offers_rows[ID]->ID_DOMAINS_PACKET_ID
* VOIP_FAX2EMAIL $this->_offers_rows[ID]->VOIP_FAX2EMAIL
* ID_DOMAINS $this->_offers_rows[ID]->ID_DOMAINS
*/
/*
* SES_TV_A
* SES_USERS2_A
* SES_VOIP_A
*
* SES_DOMAINS_A
* SES_EMAIL_A
* SES_E_WLAN_A
* SES_INSTALL_A
* SES_SERWIS_A
* SES_WWW_A
* SES_WWW_MASS_A
*/
$name_list_services_map = array();
$name_list_services_map['NET'] = 'USERS2';
$name_list_services_map['TEL'] = 'VOIP';// TOOD: wymaga SES_USERS2_A jako podrzedna do VOIP
$name_list_services_map['TV'] = 'TV';
$name_list_services_map['TVC'] = 'TV';
$name_list_services_map['TVCP'] = 'TV';
$map = array();
$map['TV'] = 'TV';
$map['TVC'] = 'TV';
$map['TVCP'] = 'TV';
$map['NET'] = 'USERS2';
$map['TEL'] = 'VOIP';// TOOD: wymaga SES_USERS2_A jako podrzedna do VOIP
//$map['OPCJE-NET'] = 'NET';
//$map['OPCJE-TV'] = 'TV';
//$map['OPCJE-TVC'] = 'TV';
//$map['OPCJE-TVCP'] = 'TV';
//$map['OPCJE-TEL'] = 'TEL';
return $map;
}
/**
* Create array of services to create ($this->_srv_to_create).
* $this->_srv_to_create [ID=>P_SERVICE_CLASS]
*/
function generate_preview() {
$srv_map = array();
$old_deal_id = intval($this->_deal->get('P_DEALNUMBER_OLD'));
if ($old_deal_id > 0) {
$srv_map = $this->get_srv_map_by_deal($old_deal_id);
}
echo'_srv_map (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($srv_map);echo' ';
// TODO: add $this->_srv_todo = array('create', 'update', 'off')
// 'create' - create new records in SERVICES, SES_X_A, SES_X_C
// 'update' - create new records in SERVICES, mv SES_X_C from old srv to new srv using $srv_map
// 'off' - turn off services
// $this->_srv_to_off today - TODO: HANGUP_FROM / HANGUP_TILL, HANGUP_STATUS, HANGUP_RATIO
/*
Podaj okres zawieszenia usługi:
Wybierz status jaki ma mieć płatnik na czas zawieszenia:
U stalenie HANGUP_STATUS na ODLACZONY,ZABLOKOWANY itp pozwala na: od DATA1 do DATA2 , od (nieustalone) do DATA2, od DATA1 do (nieustalone)
U stalenie HANGUP_STATUS na NORMAL np od 2004-10-01 do 2004-11-01 spowoduje zawieszenie przed 2004-10-01 oraz po 2004-11-01.
U stalenie HANGUP_STATUS na NORMAL np od 2004-10-01 do (nieustalone) spowoduje zawieszenie uslugi do 2004-10-01
W każdym z przypadków należy pamiętać o ustaleniu WSPÓŁCZYNNIKU ZAWIESZENIA, gdyż on wpływa na wysokość zawieszenia w trakcie jego trwania
---- Status ---
sql_query($sqll);
list($ffrom,$fto,$fstat,$fHANGUP_RATIO)=$vdb->sql_fetchrow($resultl);
*
* save
*
$sqlsh="INSERT INTO SERVICES_HIST ( ID_SERVICES , ID_BILLING_USERS , A_RECORD_UPDATE_AUTHOR,HANGUP_FROM,HANGUP_TILL,HANGUP_STATUS,HANGUP_RATIO
) values ( '$SERVICES_ID','$uID', '".$_SESSION['u_id']."' ,'$data_start','$data_end','$Hstatus','$fHANGUP_RATIO'
)" ;
$sql = "UPDATE SERVICES SET HANGUP_FROM='$data_start', HANGUP_TILL='$data_end', HANGUP_STATUS='$Hstatus' , HANGUP_RATIO='$fHANGUP_RATIO' WHERE ID_BILLING_USERS='$uID' AND NAME_LIST_SERVICES='$uservice' and ID='$SERVICES_ID' ";
*/
$offers = $this->_group->get_offers_by_id();
$this->_srv_to_create = array();
$group_external_offers_id = array('ID_NET'=>'NET','ID_TV'=>'TV','ID_TVC'=>'TVC','ID_TVCP_1'=>'TVC','ID_TVCP_2'=>'TVC','ID_TVCP_3'=>'TVC','ID_TVCP_4'=>'TVC','ID_TEL'=>'TEL');
foreach ($group_external_offers_id as $k_external_id => $v_p_service) {
$offer_id = $this->_group->get($k_external_id);
DBG::log("\$group_external_offers_id loop {$k_external_id}, {$v_p_service}, {$offer_id}");
if ($offer_id > 0) {
$find_old_srv_id = 0;
if (!empty($srv_map)) {
foreach ($srv_map as $k_srv_id => $v_offer_id) {
if ($offer_id == $v_offer_id) {
$find_old_srv_id = $k_srv_id;
}
}
}
$this->_srv_to_create[$offer_id] = array('P_SERVICE'=>$v_p_service, 'old_srv_id'=>$find_old_srv_id);
}
}
DBG::log($this->_srv_to_create, 'array', "_srv_to_create 1");
// TODO: add (OPCJA, TVC) as TV to _srv_to_create if found id offer in srv_map
foreach ($srv_map as $k_srv_id => $v_offer_id) {
if (array_key_exists($v_offer_id, $this->_srv_to_create)) continue;
if (!array_key_exists($v_offer_id, $offers)) continue; // BUG
$v_offer = $offers[$v_offer_id];
DBG::log($v_offer, 'array', "TODO: check offers[{$v_offer_id}] for OPCJA TVC to update");
$find_old_srv_id = 0;
if (!empty($srv_map)) {
foreach ($srv_map as $k_srv_id => $v_offer_id) {
if ($v_offer_id == $v_offer_id) {
$find_old_srv_id = $k_srv_id;
}
}
}
if (
'OPCJE' === $v_offer->P_SERVICE
&& 'TVC' === $v_offer->P_SERVICE_PARENT
) {
DBG::log($v_offer, 'array', "TODO: set offers[{$v_offer_id}] as OPCJA TVC to update");
$this->_srv_to_create[$v_offer_id] = array('P_SERVICE'=>'TVC', 'old_srv_id'=>$find_old_srv_id);
}
}
$offers_option_to_add = array();
foreach ($offers as $k_id => $v_offer) {
if (array_key_exists($k_id, $this->_srv_to_create)) {
continue;
}
$offers_option_to_add [$k_id] = $v_offer->P_SERVICE_PARENT;
}
DBG::log($offers_option_to_add, 'array', "\$offers_option_to_add 1");
if (!empty($offers_option_to_add)) {
foreach ($offers_option_to_add as $k_option_id => $v_p_service_parent) {
$v_option = $offers[$k_option_id];
foreach ($offers as $k_id => $v_offer) {// find option parent (first offer)
if ($v_offer->P_SERVICE == $v_p_service_parent) {
// add option to parent offer service or create new service
// przetestowac dla OPCJE do TVC np. 'Canal+', 'Canal+ HD'
if (!empty($v_option->ID_DOMAINS) && $v_option->ID_DOMAINS_PACKET_ID > 0) {
$this->_srv_to_create[$v_option->ID] = array('P_SERVICE'=>$v_option->P_SERVICE, 'old_srv_id'=>0);
} else {
$offers[$k_id]->_options[$k_option_id] = $offers[$k_option_id];
}
break;
}
}
}
}
DBG::log($offers_option_to_add, 'array', "\$offers_option_to_add 2");
DBG::log($this->_srv_to_create, 'array', "_srv_to_create 2");
// create new _services objects
foreach ($this->_srv_to_create as $k_offer_id => $v_params) {
$offer = $offers[$k_offer_id];
$srv = new Column_services();
$srv->set_id_deals_table($this->_deal->get('ID'));
$srv->set_id_billing_users($this->_deal->get('ID_BILLING_USERS'));
$srv->set_s_address_street($this->_deal->get('S_ADDRESS_STREET'));
$srv->set_services_map($this->get_service_type_map());
$srv->set_data_from_oferta_row($offer);
if (($old_srv_id = V::get('old_srv_id', 0, $v_params)) > 0) {
$srv->set_old_srv_id($old_srv_id);
$srv->set_old_srv($this->get_old_srv_by_id($old_deal_id, $old_srv_id));
$srv->set('A_STATUS', 'NORMAL');
// TODO: HANGUP_FROM i inne parametry wymagane do uruchomienia usługi
// _srv_to_off
$this->_srv_to_off [$old_srv_id] = true;
}
$this->_services []= $srv;
}
// set _srv_to_off from $srv_map where => 0
if (!empty($srv_map)) {
foreach ($srv_map as $k_srv_id => $v_offer_id) {
if ($v_offer_id == 0) {
$this->_srv_to_off [$k_srv_id] = true;
}
}
}
}
function get_old_srv_by_id($old_deal_id, $srv_id) {
/*
[11361] => Array(
[20495] => stdClass Object(
[ID] => 20495
...
[ses_x_a] => stdClass Object
*/
if (isset($this->_old_srv_data[$old_deal_id][$srv_id])) {
return $this->_old_srv_data[$old_deal_id][$srv_id];
}
return null;
}
function edit_preview() {
echo '' . "Podgląd rekordów do utworzenia" . ' ';
$old_deal_id = intval($this->_deal->get('P_DEALNUMBER_OLD'));
DBG::log($this->_srv_to_off, 'array', "_srv_to_off");
if (!empty($this->_srv_to_off) && $old_deal_id > 0) {
$srv_data = array();
if (!empty($this->_old_srv_data[$old_deal_id])) {
foreach ($this->_srv_to_off as $k_srv_id => $v_bool) {
$srv_data[$k_srv_id] = $this->_old_srv_data[$old_deal_id][$k_srv_id];
}
}
$cols = array('ID','NAME_LIST_SERVICES','A_STATUS','ID_OFFERS','ID_DEALS_TABLE','P_ID_SERVICES','ABONAMENT_VALUE','P_ID','description','A_STATUS_DESC','P_SERVICE');
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'SERVICES - do wyłączenia');
echo '';
$t = 0;
foreach ($srv_data as $k_srv_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row($v_obj, $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
$cols = array_keys(reset($this->_services)->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'SERVICES - nowe rekordy');
echo '';
$t = 0;
foreach ($this->_services as $k_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
// show SES_X_A and SES_X_C records
foreach ($this->_services as $k_id => $v_srv) {
$v_obj = $v_srv->get_ses_x_a();
if ($old_deal_id > 0 && $v_srv->get_old_srv_id() > 0) {
echo '';
$old_srv_obj = $v_srv->get_old_srv();
if ($old_srv_obj) {
$cols = array_keys((array)$old_srv_obj->ses_x_a);
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, 'SES_' . $old_srv_obj->NAME_LIST_SERVICES . '_A - stary rekord');
echo '';
PokazOfertyView::print_simple_tbl_body_row($old_srv_obj->ses_x_a, $cols, array('class'=>'row-1'));
echo ' ';
echo '
';
$update_fields = $v_obj->get_update_fields_from_old_ses_x_a('TODO', $old_srv_obj->ses_x_a);
if (!empty($update_fields)) {
$cols = array_keys($update_fields);
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, 'SES_' . $old_srv_obj->NAME_LIST_SERVICES . '_A - zaktualizowany rekord');
echo '';
$t = 0;
PokazOfertyView::print_simple_tbl_body_row((object)$update_fields, $cols, array('class'=>'row-' . ($t = 1 - $t)));
echo ' ';
echo '
';
} else {
echo '
'."Nie udało się utworzyć zaktualizowanego rekordu".'
';
}
}
if (0) {// if ($v_obj) {
$cols = array_keys($v_obj->get_data());
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name() . ' - nowy rekord w przypadku nowej usługi - tylko dla testu');
echo '';
$t = 0;
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
echo ' ';
echo '
';
}
if (!empty($v_obj->_extra_services)) {
foreach ($v_obj->_extra_services as $v_esrv) {
$rows = $v_esrv->get_old_rows($v_srv->get_old_srv_id());
if (!empty($rows)) {
$r = reset($rows);
$cols = array_keys((array)$r);
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, 'EXTRA_SERVICES - zmiany');
echo '';
$t = 0;
foreach ($rows as $r) {
PokazOfertyView::print_simple_tbl_body_row($r, $cols, array('class'=>'row-' . ($t = 1 - $t)));
$r->ID_SERVICES = 'NOWY ID';
PokazOfertyView::print_simple_tbl_body_row($r, $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
}
}
echo '
';
}
else {
if ($v_obj) {
$cols = array_keys($v_obj->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name());
echo '';
$t = 0;
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
echo ' ';
echo '
';
}
}
$v_obj_arr = $v_srv->get_ses_x_b();
if (!empty($v_obj_arr)) {
$v_obj = reset($v_obj_arr);
$cols = array_keys($v_obj->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name());
echo '';
$t = 0;
foreach ($v_obj_arr as $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
$v_obj_arr = $v_srv->get_ses_x_c();
if (!empty($v_obj_arr)) {
$v_obj = reset($v_obj_arr);
$cols = array_keys($v_obj->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name());
echo '';
$t = 0;
foreach ($v_obj_arr as $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
}
}
function verify_preview() {
echo '' . "Podgląd rekordów do utworzenia" . ' ';
$old_deal_id = intval($this->_deal->get('P_DEALNUMBER_OLD'));
if (!empty($this->_srv_to_off) && $old_deal_id > 0) {
$srv_data = array();
if (!empty($this->_old_srv_data[$old_deal_id])) {
foreach ($this->_srv_to_off as $k_srv_id => $v_bool) {
$srv_data[$k_srv_id] = $this->_old_srv_data[$old_deal_id][$k_srv_id];
}
}
$cols = array('ID','NAME_LIST_SERVICES','A_STATUS','ID_OFFERS','ID_DEALS_TABLE','P_ID_SERVICES','ABONAMENT_VALUE','P_ID','description','A_STATUS_DESC','P_SERVICE');
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'SERVICES - do wyłączenia');
echo '';
$t = 0;
foreach ($srv_data as $k_srv_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row($v_obj, $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
$cols = array_keys(reset($this->_services)->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'SERVICES - nowe rekordy');
echo '';
$t = 0;
foreach ($this->_services as $k_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
// show SES_X_A and SES_X_C records
foreach ($this->_services as $k_id => $v_srv) {
$v_obj = $v_srv->get_ses_x_a();
if ($old_deal_id > 0 && $v_srv->get_old_srv_id() > 0) {
echo '';
$old_srv_obj = $v_srv->get_old_srv();
if ($old_srv_obj && $old_srv_obj->ses_x_a) {
$cols = array_keys((array)$old_srv_obj->ses_x_a);
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, 'SES_' . $old_srv_obj->NAME_LIST_SERVICES . '_A - stary rekord');
echo '';
PokazOfertyView::print_simple_tbl_body_row($old_srv_obj->ses_x_a, $cols, array('class'=>'row-1'));
echo ' ';
echo '
';
}
if ($v_obj) {
$cols = array_keys($v_obj->get_data());
echo '
';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name() . ' - nowy rekord');
echo '';
$t = 0;
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
echo ' ';
echo '
';
}
echo '
';
}
else {
if ($v_obj) {
$cols = array_keys($v_obj->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name());
echo '';
$t = 0;
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
echo ' ';
echo '
';
}
}
$v_obj_arr = $v_srv->get_ses_x_c();
if (!empty($v_obj_arr)) {
$v_obj = reset($v_obj_arr);
$cols = array_keys($v_obj->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, $v_obj->get_name());
echo '';
$t = 0;
foreach ($v_obj_arr as $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
}
}
function edit_update(&$err_msgs, &$log_arr, $simulate_db = null) {
// Create new services and set 'ID_SERVICES_NEW' in USERS2_DEALS rows
$old_deal_id = intval($this->_deal->get('P_DEALNUMBER_OLD'));
$db = DB::getDB();
//$db->query('SET autocommit=0');
//$db->query('START TRANSACTION');
// wyłącz stare usługi
if (!empty($this->_srv_to_off) && $old_deal_id > 0) {
$srv_data = array();
if (!empty($this->_old_srv_data[$old_deal_id])) {
foreach ($this->_srv_to_off as $k_srv_id => $v_bool) {
$srv_data[$k_srv_id] = $this->_old_srv_data[$old_deal_id][$k_srv_id];
}
}
if (!empty($srv_data)) {
foreach ($srv_data as $k_srv_id => $v_srv) {
if ($v_srv->NAME_LIST_SERVICES == 'EMAIL') {// TODO: tylko przepisz do nowej umowy
$sql_obj = new stdClass();
$sql_obj->ID = $v_srv->ID;
$sql_obj->ID_DEALS_TABLE = $this->_deal->get('ID');
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'SERVICES', $sql_obj);
} else {
if ($db->UPDATE_OBJ('SERVICES', $sql_obj) <= 0) {
//$db->query('ROLLBACK');
$err_msgs []= "nie udało się przenieść usługi {$v_srv->ID}";
} else {
$log_arr []= "przeniesiono usługę {$v_srv->ID}";
}
}
} else {
$sql_obj = new stdClass();
$sql_obj->ID = $v_srv->ID;
$sql_obj->HANGUP_STATUS = 'OFF_HARD';
$sql_obj->HANGUP_FROM = date('Y-m-d');
$sql_obj->HANGUP_RATIO = 1;
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'SERVICES', $sql_obj);
} else {
if ($db->UPDATE_OBJ('SERVICES', $sql_obj) <= 0) {
//$db->query('ROLLBACK');
$err_msgs []= "nie udało się wyłączyć usługi " . $v_srv->ID;
} else {
$log_arr []= "wyłączono usługę " . $v_srv->ID . " (HANGUP_STATUS na OFF_HARD, HANGUP_FROM: " . date('Y-m-d') . ")";
}
}
}
}
}
}
foreach ($this->_services as $k_id => $v_srv) {
if (!$v_srv->save($simulate_db)) {
//$db->query('ROLLBACK');
$err_msgs []= "nie udało się dodać usługi dla oferty " . $v_srv->get('ID_OFFERS');
return false;
} else {
if ($simulate_db) {
$log_arr []= "dodano nowe zadanie " . $v_srv->_saved_id . " dla oferty " . $v_srv->get('ID_OFFERS');
} else {
$log_arr []= "dodano nową usługę " . $v_srv->_saved_id . " dla oferty " . $v_srv->get('ID_OFFERS');
}
}
}
// update DEALS_TABLE.A_STATUS to NORMAL
$sql_obj= new stdClass();
$sql_obj->ID = $this->_deal->get('ID');
$sql_obj->A_STATUS = 'NORMAL';
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'DEALS_TABLE', $sql_obj);
} else {
if ($db->UPDATE_OBJ('DEALS_TABLE', $sql_obj) <= 0) {
//$db->query('ROLLBACK');
$err_msgs []= "nie udało się aktywować umowy " . $this->_deal->get('ID');
return false;
} else {
$log_arr []= "aktywowano umowę " . $this->_deal->get('ID') . " (status na NORMAL)";
}
}
// update USERS2_DEALS.A_STATUS to NORMAL
$users2_deals_rows = PokazOfertyHelper::get_users2_deals_by_deal_id($this->_deal->get('ID'), array('A_STATUS'=>'WAITING'));
foreach ($users2_deals_rows as $v_users2_deal) {
if ($v_users2_deal->P_OFFER_ID_NEW <= 0) {
continue;
}
if (empty($this->_group->_offers_by_id[$v_users2_deal->P_OFFER_ID_NEW])) {
continue;
}
$v_offer = $this->_group->_offers_by_id[$v_users2_deal->P_OFFER_ID_NEW];
// find services with offer id
foreach ($this->_services as $v_srv) {
if ($v_srv->_saved_id <= 0) {
continue;
}
if ($v_srv->get('ID_OFFERS') == $v_users2_deal->P_OFFER_ID_NEW) {
$sql_obj = new stdClass();
$sql_obj->ID = $v_users2_deal->ID;
$sql_obj->ID_SERVICES_NEW = $v_srv->_saved_id;
$sql_obj->A_STATUS = 'NORMAL';
if (empty($v_users2_deal->INICJALY_HANDLOWCA)) {
$sql_obj->INICJALY_HANDLOWCA = $this->_deal->get('P_DEALPREFIX');
}
if (empty($v_users2_deal->S_OTHER_INFO)) {
$sql_obj->S_OTHER_INFO = $this->_deal->get('DEALDESC');
}
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'USERS2_DEALS', $sql_obj, array('ID_SERVICES_NEW'=>$v_srv->_saved_id));
} else {
if ($db->UPDATE_OBJ('USERS2_DEALS', $sql_obj) <= 0) {
//$db->query('ROLLBACK');
} else {
$log_arr []= "zmieniono rekord w USERS2_DEALS " . $v_users2_deal->ID . " (status na NORMAL oraz ID_SERVICES_NEW na " . $v_srv->_saved_id . ")";
}
}
}
}
}
//$db->query('COMMIT');
return true;
}
}
class Column_deals_table extends Column_Base {
var $_user;
var $_group;
var $_users2_deals_rows;
var $_offers_rows;
var $_srv_to_create;// [ID_OFFER => P_SERVICE('NET', 'TV', 'TEL')]
var $_services;
var $_old_offers_ids;
function __construct() {
parent::__construct();
$this->_data['ID_BILLING_USERS'] = '';//
$this->_data['P_DEALPREFIX'] = '';//
$this->_data['P_DEALNUMBER'] = '';//
$this->_data['P_DEALNUMBER_OLD'] = '';//
$this->_data['P_DEALDATE'] = '';//
$this->_data['P_DEALDATE_TERM'] = '';//
$this->_data['ANEX_NEEDED'] = '';//
$this->_data['ANEX_CONFIRM_DATE'] = '';//
$this->_data['DEALDESC'] = '';//
$this->_data['A_STATUS'] = 'WAITING';//
$this->_data['ID_OFFERS_GROUP'] = '';//
$this->_data['S_ADDRESS_STREET'] = '';//
$this->_data['P_ID'] = 0;
$this->_group = null;
$this->_users2_deals_rows = array();
$this->_offers_rows = array();
$this->_old_offers_ids = array();
}
function get_type() {
$type = '';
$types = array();
$types []= 'ACTIVATE_OPTIONS';
$types []= 'DEACTIVATE_OPTIONS';
$types []= 'NEW_DEAL';
$types []= 'ANEKS';
$types []= 'REZYGNACJA';
//$types []= 'UNKNOWN';// error unknown type
if ($this->get('P_ID') > 0) {
// dotyczy aktywacji nowych ofert lub deaktywacji opcji
$id_offers_on = $this->get('ID_OFFERS_ON');
$id_offers_off = $this->get('ID_OFFERS_OFF');
if (!empty($id_offers_on)) {
$type = 'ACTIVATE_OPTIONS';
}
else if (!empty($id_offers_off)) {
$type = 'DEACTIVATE_OPTIONS';
}
}
else {// P_ID == 0 - nowa umowa, aneks, rezygnacja
if ($this->get('P_DEALNUMBER_OLD') > 0) {
if ($this->get('P_DEALNUMBER') > 0) {
$type = 'ANEKS';
}
else {
$type = 'REZYGNACJA';
}
}
else {
$type = 'NEW_DEAL';
}
}
return $type;
}
function set_user_data($user) {
$this->_user = $user;
$this->_data['ID_BILLING_USERS'] = $this->_user->ID_BILLING_USERS;
}
function set_new_deal_data($group) {
$this->_group = $group;
$this->_data['ID_OFFERS_GROUP'] = $this->_group->get('ID');
$this->_data['P_DEALDATE'] = date("Y-m-d");
$this->_data['P_DEALDATE_TERM'] = date("Y-m-d", mktime(0,0,0, date('m') + $this->_group->get('P_DEALTERM_MONTHS'), date('d') - 1, date('Y')));
}
function set_s_address_street($street) {
$this->_data['S_ADDRESS_STREET'] = $street;
}
function generate_P_DEALNUMBER() {
$db = DB::getDB();
// sql from l2: ./modules/webone/form/edit_user_status.php
// $sql="select ifnull(max(DEALS_TABLE.ID),1)+1 as NEXTID, ifnull(MAX(DEALS_TABLE.P_DEALNUMBER),1)+1 as NEXTNUMBER , now() as TERAZ from DEALS_TABLE ";
$sql = "select ifnull(MAX(DEALS_TABLE.P_DEALNUMBER),1)+1 as NEXTNUMBER from `DEALS_TABLE` ";
$res = $db->query($sql);
if ($r = $db->fetch($res)) {
$this->_data['P_DEALNUMBER'] = $r->NEXTNUMBER;
}
}
function view_table() {
echo '';
}
function set_from_raw_data($deal_row) {
foreach ($deal_row as $k_field_name => $v_value) {
$this->_data[$k_field_name] = $v_value;
}
}
function fetch_users2_deals_rows() {
$db = DB::getDB();
$deal_id = $this->get('ID');
if ($deal_id <= 0) {
return;
}
$sql = "select d.`ID`
, d.`DATA_DOK`
, d.`S_ADDRESS_STREET`
-- , d.`S_OTHER_INFO`
-- , d.`T_WORKPOINTS_PROCES`
-- , d.`T_PENALTIES_TYPE`
, d.`ID_BILLING_USERS_OLD`
, d.`ID_BILLING_USERS_NEW`
, d.`ID_SERVICES_OLD`
, d.`ID_SERVICES_NEW`
, d.`P_SERVICE`
-- , d.`P_SERVICE_COMPANY`
, d.`P_SERVICE_NAME`
, d.`P_OFFER_ID_OLD`
, d.`P_OFFER_ID_NEW`
, d.`P_DEAL_DATE_OLD`
, d.`P_DEAL_DATE_NEW`
, d.`P_DEALNUMBER_OLD`
, d.`P_DEALNUMBER_NEW`
, d.`P_DEALTERM_OLD`
, d.`P_DEALTERM_NEW`
, d.`MONTH_COST_OLD`
, d.`MONTH_COST_NEW`
, d.`INICJALY_HANDLOWCA`
, d.`RODZAJ_DZIALANIA_HANDLOWEGO`
-- , d.`OLD_L2_HANGUP_STATUS`
-- , d.`OLD_L2_HANGUP_FROM`
, d.`P_ACCOUNT`
from `USERS2_DEALS` as d
where d.`P_DEALNUMBER_NEW`='" . $deal_id . "'
and d.`A_STATUS`='WAITING'
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$users2_deal = new Column_users2_deals();
$users2_deal->set_from_raw_data($r);
$this->_users2_deals_rows [$r->ID]= $users2_deal;
}
}
function fetch_offers_rows() {
$db = DB::getDB();
$deal_id = $this->get('ID');
if ($deal_id <= 0) {
return;
}
$offers_ids = array();
if (!empty($this->_users2_deals_rows)) {
foreach ($this->_users2_deals_rows as $v_users2_deal) {
if ($v_users2_deal->get('P_OFFER_ID_NEW') > 0) {
$offers_ids []= $v_users2_deal->get('P_OFFER_ID_NEW');
}
}
}
if (empty($offers_ids)) {
return;
}
$this->_offers_rows = PokazOfertyHelper::get_offers_by_id($offers_ids);
}
function get_offers_by_id() {
if ($this->_group) {
return $this->_group->get_offers_by_id();
} else {
return $this->_offers_rows;
}
}
function get_offers_ids() {
if ($this->_group) {
return $this->_group->get_offers_ids();
} else {
$offers_ids = array();
return $offers_ids;
}
}
function set_old_offers_ids($old_offers_ids) {
$this->_old_offers_ids = $old_offers_ids;
}
function fetch_group_row() {
$db = DB::getDB();
if ($this->get('ID') <= 0) {
return;
}
$group_id = (int)$this->get('ID_OFFERS_GROUP');
if ($group_id <= 0) {
return;
}
$this->_group = PokazOfertyHelper::get_group($group_id);
$this->_group->set_offers($this->_offers_rows);
}
function get_services_map() {
/* fields map:
* SERVICES
* ID_BILLING_USERS $this->_user->ID_BILLING_USERS
* ID_DEALS_TABLE $this->get('ID')
* ID_OFFERS $this->_offers_rows[ID]->ID
* NAME_LIST_SERVICES USERS2, TV, VOIP
* A_STATUS WAITING
* active 1
* SERVICE_TYPE ABONAMENT
* ID_BILLING_NUMBERS_TYPE 1
* ABONAMENT_PERIOD 1
* ABONAMENT_VALUE $this->_offers_rows[ID]->P_PROMO_MONTH_PRICE_NETTO - netto w promocyjnych miesiącach
* lub P_CONTRACT_PRICE_NETTO + rekordy w SES_X_C po P_DEALTERM_MONTHS (VALUE1), TYP 17, róznice NETTO z ceną P_PROMO_MONTH_PRICE_NETTO (VALUE2)
* VAT $this->_offers_rows[ID]->STAWKA_VAT - vat (int)
* ID_CURRENCY 0
* ABONAMENT_PAYMENT UP
* ABONAMENT_START 1
* MINIMUM_BILLING_VALUE 0.00
* BILLED_TILL NULL
* HANGUP_FROM NULL
* HANGUP_TILL NULL
* HANGUP_STATUS NULL
* HANGUP_RATIO 1.00
* P_ID_SERVICES 0 lub parent services ID
* uwagi ''
* VAT_NAME 'ZW',8,23
* id_list_sww (int) ??
* SERV_ID_BILLING_PREFIXES 0
* TODO: VAT czasem jest 0 i VAT_NAME na ZW
*
* SES_USERS2_A
* ID_BILLING_USERS user.ID
* ID_SERVICES SERVICES.ID
* P_SERVICE_QUOTA_PROFILE $this->_offers_rows[ID]->P_SERVICE_QUOTA_PROFILE
* LAN_DOWNLOAD $this->_offers_rows[ID]->LAN_DOWNLOAD
* S_PUBLIC_IP $this->_offers_rows[ID]->S_PUBLIC_IP
* S_SOHO_WIFI_ROUTER_1292 $this->_offers_rows[ID]->S_SOHO_WIFI_ROUTER_1292
* S_E_PORT_1293 $this->_offers_rows[ID]->S_E_PORT_1293
* CONN_DIV $this->_offers_rows[ID]->CONN_DIV
* SES_TV_A
* P_DEVICE $this->_offers_rows[ID]->P_DEVICE
* P_SERVICE_CLASS $this->_offers_rows[ID]->P_SERVICE_CLASS
* P_SERVICE_SOCKETS_AMMOUNT_1298 $this->_offers_rows[ID]->P_SERVICE_SOCKETS_AMMOUNT_1298
* ID_DOMAINS_PACKET_ID $this->_offers_rows[ID]->ID_DOMAINS_PACKET_ID
* ID_DOMAINS $this->_offers_rows[ID]->ID_DOMAINS
* SES_VOIP_A
* ID_DOMAINS_PACKET_ID $this->_offers_rows[ID]->ID_DOMAINS_PACKET_ID
* VOIP_FAX2EMAIL $this->_offers_rows[ID]->VOIP_FAX2EMAIL
* ID_DOMAINS $this->_offers_rows[ID]->ID_DOMAINS
*/
/*
* SES_TV_A
* SES_USERS2_A
* SES_VOIP_A
*
* SES_DOMAINS_A
* SES_EMAIL_A
* SES_E_WLAN_A
* SES_INSTALL_A
* SES_SERWIS_A
* SES_WWW_A
* SES_WWW_MASS_A
*/
$name_list_services_map = array();
$name_list_services_map['NET'] = 'USERS2';
$name_list_services_map['TEL'] = 'VOIP';// TOOD: wymaga SES_USERS2_A jako podrzedna do VOIP
$name_list_services_map['TV'] = 'TV';
$name_list_services_map['TVC'] = 'TV';
$name_list_services_map['TVCP'] = 'TV';
$map = array();
$map['TV'] = 'TV';
$map['TVC'] = 'TV';
$map['TVCP'] = 'TV';
$map['NET'] = 'USERS2';
$map['TEL'] = 'VOIP';// TOOD: wymaga SES_USERS2_A jako podrzedna do VOIP
//$map['OPCJE-NET'] = 'NET';
//$map['OPCJE-TV'] = 'TV';
//$map['OPCJE-TVC'] = 'TV';
//$map['OPCJE-TVCP'] = 'TV';
//$map['OPCJE-TEL'] = 'TEL';
return $map;
}
function print_html_data() {
$cols = array_keys($this->_data);
PokazOfertyView::print_simple_tbl((object)$this->_data, $cols, 'DEALS_TABLE');
PokazOfertyView::print_simple_tbl((object)$this->_group->get_data(), $this->_group->get_cols(), 'USERS2_OFFERS_GROUPS');
$cols = array_keys(get_object_vars(reset($this->_offers_rows)));
// hide P_SERVICE_QUOTA_PROFILE
if (in_array('P_SERVICE_QUOTA_PROFILE', $cols)) {
$new_cols = array();
foreach ($cols as $v_col) {
if ($v_col == 'P_SERVICE_QUOTA_PROFILE') {
continue;
}
$new_cols []= $v_col;
}
$cols = $new_cols;
}
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'USERS2_OFFERS');
echo '';
$t = 0;
foreach ($this->_offers_rows as $k_id => $v_offer) {
PokazOfertyView::print_simple_tbl_body_row($v_offer, $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
$cols = array_keys(reset($this->_users2_deals_rows)->get_data());
echo '';
PokazOfertyView::print_simple_tbl_header($cols, 'USERS2_DEALS');
echo '';
$t = 0;
foreach ($this->_users2_deals_rows as $k_id => $v_obj) {
PokazOfertyView::print_simple_tbl_body_row((object)$v_obj->get_data(), $cols, array('class'=>'row-' . ($t = 1 - $t)));
}
echo ' ';
echo '
';
}
/**
* @return int created record id
*/
function create() {
// aneks i nowa umowa - tak samo jak nowa umowa
$sql_data = array();
foreach ($this->_data as $k => $v) {
if ($k == 'P_DEALNUMBER') {
continue;
}
if (!empty($v)) {
$sql_data["`" . $k . "`"] = "'" . $v . "'";
}
}
// insert query
$db = DB::getDB();
$sql_data["`P_DEALNUMBER`"] = "(ifnull(MAX(DEALS_TABLE.P_DEALNUMBER),1)+1)";
$sql_data["`A_RECORD_CREATE_DATE`"] = "'" . date('Y-m-d-H:i') . "'";
$sql_data["`A_RECORD_CREATE_AUTHOR`"] = "'" . User::getName() . "'";
$offers_ids = $this->get_offers_ids();
if (!empty($offers_ids)) {
$sql_data["`ID_OFFERS_ON`"] = "'" . implode(",", $offers_ids) . "'";
}
if (!empty($this->_old_offers_ids)) {
$sql_data["`ID_OFFERS_OFF`"] = "'" . implode(",", $this->_old_offers_ids) . "'";
}
$sql = "insert into `DEALS_TABLE` (" . implode(", ", array_keys($sql_data)) . ") select " . implode(", ", array_values($sql_data)) . " from `DEALS_TABLE`; ";
//insert into `DEALS_TABLE` (`ID_BILLING_USERS`, `P_DEALDATE`, `P_DEALDATE_TERM`, `A_STATUS`, `ID_OFFERS_GROUP`, `S_ADDRESS_STREET`, `P_DEALNUMBER`) select '5861', '2013-01-28', '2015-01-27', 'WAITING', '2044', 'MWZ24A/22', (ifnull(MAX(DEALS_TABLE.P_DEALNUMBER),1)+1) from `DEALS_TABLE`;
if (!$db->query($sql)) {
return false;
}
$idDeal = $db->insert_id();
$sql = "insert into `DEALS_TABLE_HIST` (`ID_USERS2`, " . implode(", ", array_keys($sql_data)) . ") select '{$idDeal}' as ID_USERS2, " . implode(", ", array_values($sql_data)) . " from `DEALS_TABLE`; ";
$db->query($sql);
return $idDeal;
}
function create_opcje_aktywacja() {
$db = DB::getDB();
$sql_data["`A_RECORD_CREATE_DATE`"] = "'" . date('Y-m-d-H:i') . "'";
$sql_data["`A_RECORD_CREATE_AUTHOR`"] = "'" . User::getName() . "'";
$sql_data["`P_ID`"] = "'" . $this->get('P_ID') . "'";
$sql_data["`ID_BILLING_USERS`"] = "'" . $this->get('ID_BILLING_USERS') . "'";
$sql_data["`DEALDESC`"] = "'" . $this->get('DEALDESC') . "'";
$sql_data["`S_ADDRESS_STREET`"] = "'" . $this->get('S_ADDRESS_STREET') . "'";
$offers_ids = array_keys($this->_offers_rows);
if (!empty($offers_ids)) {
$sql_data["`ID_OFFERS_ON`"] = "'" . implode(",", $offers_ids) . "'";
}
$sql = "insert into `DEALS_TABLE` (" . implode(", ", array_keys($sql_data)) . ") values (" . implode(", ", array_values($sql_data)) . ") ; ";
if (!$db->query($sql)) {
return false;
}
return $db->insert_id();
}
function create_opcje_deaktywacja() {
$db = DB::getDB();
$sql_data["`A_RECORD_CREATE_DATE`"] = "'" . date('Y-m-d-H:i') . "'";
$sql_data["`A_RECORD_CREATE_AUTHOR`"] = "'" . User::getName() . "'";
$sql_data["`P_ID`"] = "'" . $this->get('P_ID') . "'";
$sql_data["`ID_BILLING_USERS`"] = "'" . $this->get('ID_BILLING_USERS') . "'";
$sql_data["`DEALDESC`"] = "'" . $this->get('DEALDESC') . "'";
$sql_data["`S_ADDRESS_STREET`"] = "'" . $this->get('S_ADDRESS_STREET') . "'";
$offers_ids = array_keys($this->_offers_rows);
if (!empty($offers_ids)) {
$sql_data["`ID_OFFERS_OFF`"] = "'" . implode(",", $offers_ids) . "'";
}
$sql = "insert into `DEALS_TABLE` (" . implode(", ", array_keys($sql_data)) . ") values (" . implode(", ", array_values($sql_data)) . ") ; ";
if (!$db->query($sql)) {
return false;
}
return $db->insert_id();
}
}
class Column_users2_deals extends Column_Base {
var $_new_deal;
var $_old_fields;
var $_offer_values_map;// TODO: tylko dla nowych ofert - pola *_NEW
var $_deal_table;// @see set_deal_table
var $_old_deal;
var $_old_deals_data;
var $_old_srv_data;
var $_new_srv_data;// @from _group->offers
/**
* Mapa starych uslug do ID z nowych ofert wg ID umowy
* Array [deal_ID][srv_ID] = offer_ID;
* @used in generate_srv_map()
*/
var $_old_srv_map;
function __construct() {
parent::__construct();
$this->_data['DATA_DOK'] = '';// now()
$this->_data['S_ADDRESS_STREET'] = '';// Ulica na ktorej swiadczona jest usluga
$this->_data['S_OTHER_INFO'] = '';// Dodatkowe informacje do rejestru rozmow
//$this->_data['T_WORKPOINTS_PROCES'] = '';
//$this->_data['T_PENALTIES_TYPE'] = '';
$this->_data['ID_BILLING_USERS_OLD'] = '';// Poprzedni numer klienta wg bazy L1/L2 (numer billingowy)
$this->_data['ID_BILLING_USERS_NEW'] = '';// Nowy numer klienta wg bazy L1/L2 (numer billingowy)
$this->_data['ID_SERVICES_OLD'] = '';// Poprzedni numer uslugi wg bazy l1/l2 (numer ID_SERVICES)
$this->_data['ID_SERVICES_NEW'] = '';// Nowy numer uslugi wg bazy l1/l2 (numer ID_SERVICES)
$this->_data['P_SERVICE'] = '';// Wybierz jakiego rodzaju uslugi dotyczy wpisywany rekord
//$this->_data['P_SERVICE_COMPANY'] = '';// TODO: from $this->_deal_table->_group->get('P_SERVICE_COMPANY') - Firma swiadczaca usluge (enum('BN', 'NETDAY'))
$this->_data['P_SERVICE_NAME'] = '';// Nazwa zwyczajna uslugi ktorej dotyczy rekord
$this->_data['P_OFFER_ID_OLD'] = '';// Numer oferty/uslugi poprzedniej uslugi
$this->_data['P_OFFER_ID_NEW'] = '';// Numer oferty/uslugi aktualnie podpisywanej uslugi
$this->_data['P_DEAL_DATE_OLD'] = '';// Data ostatniego dokumentu/aneksu wg ktorego jest dokonywany wpis
$this->_data['P_DEAL_DATE_NEW'] = '';// Aktualna data umowy / nowej umowy/ aneksu
$this->_data['P_DEALNUMBER_OLD'] = '';// Numer umowy ostatnio obowiazujacej
$this->_data['P_DEALNUMBER_NEW'] = '';// Numer umowy aktualnie obowiazujacej
$this->_data['P_DEALTERM_OLD'] = '';// Termin w RRRR-MM-DD do ktorego byla wazna ostatnia umowa
$this->_data['P_DEALTERM_NEW'] = '';// Nowy termin w formacie RRRR-MM-DD do ktorego jest wazny aktualny rekord
$this->_data['MONTH_COST_OLD'] = '';// Poprzednia wartosc miesieczna kompletu uslug ktore opisywala umowa/aneks
$this->_data['MONTH_COST_NEW'] = '';// Aktualna wartosc miesieczna kompletu uslug, ktore opisuje dana umowa/aneks
$this->_data['INICJALY_HANDLOWCA'] = '';// Inicjaly handlowca i Jak klient do nas trafil (U-ulotka,R-plakat),L-List_intencyjny,Z-rywka-plakat)np DM/U
$this->_data['RODZAJ_DZIALANIA_HANDLOWEGO'] = '';// Rodzaj dzialania w wyniku ktorego doszlo do podpisania niniejszej umowy/aneksu';
//$this->_data['OLD_L2_HANGUP_STATUS'] = '';
//$this->_data['OLD_L2_HANGUP_FROM'] = '';
$this->_data['P_ACCOUNT'] = '';
$this->_old_fields = array();
$this->_old_fields['ID_BILLING_USERS_OLD'] = 'ID_BILLING_USERS';
$this->_old_fields['ID_SERVICES_OLD'] = 'ID_SERVICES';
$this->_old_fields['P_OFFER_ID_OLD'] = 'OFFER_ID';
$this->_old_fields['P_DEAL_DATE_OLD'] = 'P_DEAL_DATE';
$this->_old_fields['P_DEALNUMBER_OLD'] = 'P_DEALNUMBER';
$this->_old_fields['MONTH_COST_OLD'] = 'MONTH_COST';
$this->_offer_values_map = array();
$this->_offer_values_map['P_OFFER_ID_NEW'] = 'ID';
$this->_offer_values_map['P_SERVICE'] = 'P_SERVICE';
$this->_offer_values_map['P_SERVICE_NAME'] = 'P_SERVICE_NAME';
$this->_offer_values_map['MONTH_COST_NEW'] = 'srednia_netto';// TODO: sprawdzic czy zgodnie z zalozeniami - uzywane do rozliczen
$this->_deal_table = null;
$this->_old_services = array();
$this->_old_srv_map = array();// [DEAL_ID][SRV_ID] = [OFFER_ID]
$this->_old_srv_data = array();// [DEAL_ID][SRV_ID] = {srv}
$this->_new_srv_data = array();// [] = [srv data]
}
function set_s_address_street($street) {
$this->_data['S_ADDRESS_STREET'] = $street;
}
function set_p_dealnumber_new($deal_nr) {
$this->_data['P_DEALNUMBER_NEW'] = $deal_nr;
}
function set_deal_table($deals_table) {
$this->_deal_table = $deals_table;
$this->_data['ID_BILLING_USERS_NEW'] = $this->_deal_table->get('ID_BILLING_USERS');
$this->_data['P_DEALNUMBER_NEW'] = 'TODO';// TODO: created ID in deals_table
$this->_data['DATA_DOK'] = $this->_deal_table->get('P_DEALDATE');
$this->_data['P_DEAL_DATE_NEW'] = $this->_deal_table->get('P_DEALDATE');
$this->_data['P_DEALTERM_NEW'] = $this->_deal_table->get('P_DEALDATE_TERM');
$this->_data['INICJALY_HANDLOWCA'] = $this->_deal_table->get('P_DEALPREFIX');
$this->_data['S_OTHER_INFO'] = $this->_deal_table->get('DEALDESC');
if ($this->_deal_table->_group) {
$this->_data['P_SERVICE_COMPANY'] = $this->_deal_table->_group->get('P_SERVICE_COMPANY');
}
}
function set_from_raw_data($users2_deal_row) {
foreach ($users2_deal_row as $k_field_name => $v_value) {
$this->_data[$k_field_name] = $v_value;
}
}
function view_table() {
echo '';
}
function get_old_deal_data() {
return $this->_old_deals_data;
}
function get_old_srv_data($old_deal_id) {
return (array_key_exists($old_deal_id, $this->_old_srv_data))? $this->_old_srv_data[$old_deal_id] : array();
}
function set_old_deals_data($old_deals_by_id) {
$this->_old_deals_data = $old_deals_by_id;
}
function get_srv_map() {
return $this->_old_srv_map;
}
/**
* Numery ofert do wyłączenia zgodnie z numerem starej umowy
* (P_DEALNUMBER_OLD) oraz wygenerowaną mapą (srv_map)
*/
function get_old_offers_ids() {
$old_offers_ids = array();
if (!empty($this->_old_srv_map) && !empty($this->_old_deal)) {
$p_dealnumber_old = $this->get('P_DEALNUMBER_OLD');
if (array_key_exists($p_dealnumber_old, $this->_old_srv_map)) {
$srv_map = $this->_old_srv_map[$p_dealnumber_old];
if (!empty($srv_map)) {
foreach ($srv_map as $srv_id => $new_offer_id) {
//if ($new_offer_id > 0) {// TODO: sprawdzić warunek
$old_srv_row = $this->_old_deal->services_by_id[$srv_id];
if ($old_srv_row->ID_OFFERS > 0) {
$old_offers_ids []= $old_srv_row->ID_OFFERS;
} else {
echo '' . "Error: brak numeru oferty w SERVICES ID=" . $srv_id . '
';
}
//}
}
}
}
}
return $old_offers_ids;
}
/**
* Generate $this->_old_srv_map - [deals_ID][srv_ID] = offer_ID;
*/
function generate_srv_map() {
if (empty($this->_old_deals_data)) return;
// TODO: map old deals to new deals
foreach ($this->_old_deals_data as $k_deal_id => $v_deal) {
echo'v_deal (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_deal);echo' ';
// $this->services[TV][20495]->out_id = TVCP_1
// $this->services[TV][20495]->offer_p_service = NET, TV, TVC, TVCP
foreach ($v_deal->services as $k_p_service => $v_srv_arr) {
foreach ($v_srv_arr as $k_srv_id => $v_srv) {
$v_srv->ses_x_a = $v_deal->ses_x_a[$v_srv->ID];
$this->_old_srv_data [$v_deal->ID_DEALS] [$v_srv->ID] = $v_srv;
}
}
echo'_old_srv_data (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_old_srv_data);echo' ';
// $this->_deal_table->_group->_offers[NET_1][1383]->out_id = NET_1, OPCJA_NET_1, OPCJA_NET_2, TV_1, OPCJA_TV_1, OPCJA_TV_2, TVC_1, TEL_1, OPCJA_TEL_1
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_deal_table->_group);echo' ';
foreach ($this->_deal_table->_group->get_offers_by_id() as $v_offer) {
if ($v_offer->P_SERVICE_PARENT != '') {// opcja
if ($v_offer->ID_DOMAINS == '' && $v_offer->ID_DOMAINS_PACKET_ID == '') {
// pomin - ta oferta jest tylko opcją i nie wchodzi jako osobny SERVICES
continue;
}
}
$this->_new_srv_data [$v_offer->ID]= $v_offer;
}
echo'_new_srv_data ['.count($this->_new_srv_data).'] (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_new_srv_data);echo' ';
// set up $this->_old_srv_map
$this->_old_srv_map[$v_deal->ID_DEALS] = array();
$used_offer_ids = array();// id offers => id srv
foreach ($this->_old_srv_data[$v_deal->ID_DEALS] as $k_srv_id => $v_srv) {
$new_offer_id = 0;
foreach ($this->_new_srv_data as $k_offer_id => $v_offer) {
if (in_array($k_offer_id, $used_offer_ids) || $new_offer_id > 0) {
continue;
}
// try if new offer match old service
if ($v_srv->NAME_LIST_SERVICES == 'USERS2') {
if ($v_offer->P_SERVICE == 'NET') {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
} else if ($v_srv->NAME_LIST_SERVICES == 'VOIP') {
if ($v_offer->P_SERVICE == 'TEL') {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
} else if ($v_srv->NAME_LIST_SERVICES == 'TV') {
if ($v_offer->P_SERVICE == $v_srv->ses_x_a->P_SERVICE_CLASS
|| ($v_offer->P_SERVICE == 'OPCJE' && $v_offer->P_SERVICE_PARENT == 'TV')
) {// TV, TVC, TVCP
if ($v_offer->ID_DOMAINS != '' && $v_offer->ID_DOMAINS_PACKET_ID > 0) {
//echo '{'.$v_offer->ID_DOMAINS.' == '.$v_srv->ses_x_a->ID_DOMAINS.' && '.$v_offer->ID_DOMAINS_PACKET_ID.' == '.$v_srv->ses_x_a->ID_DOMAINS_PACKET_ID.'} ';
if ($v_offer->ID_DOMAINS == $v_srv->ses_x_a->ID_DOMAINS && $v_offer->ID_DOMAINS_PACKET_ID == $v_srv->ses_x_a->ID_DOMAINS_PACKET_ID) {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
} else {
$new_offer_id = $k_offer_id;
$used_offer_ids []= $k_offer_id;
}
}
}
}
$this->_old_srv_map[$v_deal->ID_DEALS][$v_srv->ID] = $new_offer_id;
}
echo'_old_srv_map['.$v_deal->ID_DEALS.']['.count($this->_old_srv_map[$v_deal->ID_DEALS]).'] (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_old_srv_map[$v_deal->ID_DEALS]);echo' ';
}
}
function set_old_deal($old_deal) {
$this->_old_deal = $old_deal;
$this->set('ID_BILLING_USERS_OLD', $this->_old_deal->ID_BILLING_USERS);
$this->set('P_DEALNUMBER_OLD', $this->_old_deal->ID_DEALS);
$this->set('P_DEAL_DATE_OLD', $this->_old_deal->P_DEALDATE);
$this->set('P_DEALTERM_OLD', $this->_old_deal->P_DEALDATE_TERM);
}
/**
* Create rows test
* @use $this->_old_deal for aneks
*
* @use $this->_old_srv_map[desl_ID][srv_ID] = offer_ID
*/
function create_rows_try() {
$db = DB::getDB();
$sql_cols = array();
$sql_insert = array();
$old_service_all = array();// pola dla starych uslug jesli aneks
$srv_map = array();// @used if aneks
$p_dealnumber_old = $this->get('P_DEALNUMBER_OLD');
echo'Proba dodania aneksu do umowy ID=' . $this->get('P_DEALNUMBER_OLD') . ' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
// validate
if ($p_dealnumber_old > 0) {// aneks
if (empty($this->_old_deal)) {
echo '' . "Error: Brak danych dotyczących starej umowy P_DEALNUMBER_OLD = " . $p_dealnumber_old . '
';
return -1;
}
if (!array_key_exists($p_dealnumber_old, $this->_old_srv_map)) {
echo '' . "Error: Brak services map dla P_DEALNUMBER_OLD = " . $p_dealnumber_old . '
';
return -1;
}
$srv_map = $this->_old_srv_map[$p_dealnumber_old];
}
$this->_data['A_RECORD_CREATE_DATE'] = date('Y-m-d-H:i');
$this->_data['A_RECORD_CREATE_AUTHOR'] = User::getName();
$this->_data['A_STATUS_INFO'] = 'Wprowadzono automatycznie za pomoca POKAZ_OFERTY_AKTUALNE';
// dodatkowe dane dla aneksu
if ($p_dealnumber_old > 0) {// aneks
$srv_map = $this->_old_srv_map[$p_dealnumber_old];
echo'srv_map (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($srv_map);echo' ';
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_old_deal);echo' ';
if (!empty($srv_map)) {
foreach ($srv_map as $srv_id => $offer_id) {
echo '{TODO: srv_id = '.$srv_id.'; offer_id = '.$offer_id.'}
';
$old_srv_row = $this->_old_deal->services_by_id[$srv_id];
$old_srv_data = array();
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_srv_row);
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_srv_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_srv_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_srv_row);
$old_service_all[$offer_id] = $old_srv_data;
}
}
}
// wspolne rekordy dla nowej umowy i aneksu
foreach ($this->_data as $k_field_name => $v_value) {
$sql_cols []= "`" . $k_field_name . "`";
}
foreach ($this->_deal_table->_group->get_offers() as $k_p_service => $v_offers_arr) {
$insert_values = array();
foreach ($v_offers_arr as $k_offer_id => $v_offer) {
$old_service_data = array();// fields like in $this->_old_fields
if (array_key_exists($k_offer_id, $old_service_all)) {
$old_service_data = $old_service_all[$k_offer_id];
}
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $this->_offer_values_map)) {
$offer_field_name = $this->_offer_values_map[$k_field_name];
$out_value .= $v_offer->$offer_field_name;
} else if (array_key_exists($k_field_name, $old_service_data)) {
$out_value .= $old_service_data[$k_field_name];
} else if (!empty($v_value)) {
$out_value .= $v_value;
} else {
// pozostaw puste
}
$insert_values []= "'" . $out_value . "'";
}
break;// only one offer by service
}
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
if ($p_dealnumber_old > 0) {// aneks
if (!empty($srv_map)) {
foreach ($srv_map as $srv_id => $offer_id) {
if ($offer_id == 0) {
if (!array_key_exists($srv_id, $this->_old_deal->services_by_id)) {
echo '' . "Error: brak SERVICES ID=$srv_id w starej umowie" . '
';
continue;
}
$old_srv_data = array();
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_srv_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_srv_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_srv_row);
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_srv_row);
$insert_values = array();
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $old_srv_data)) {
$out_value = $old_srv_data[$k_field_name];
} else {
$out_value = $v_value;
}
$insert_values []= "'" . $out_value . "'";
}
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
}
}
}
echo'sql_insert (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql_insert);echo' ';
if (empty($sql_insert)) {
return false;
}
$sql = "insert into `USERS2_DEALS` (" . implode(", ", $sql_cols) . ") values " . implode("\n\t ,", $sql_insert);
//echo'sql (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';
if (!$db->query($sql)) {
return false;
}
return true;
}
function create_rows() {
$db = DB::getDB();
$sql_cols = array();
$sql_insert = array();
$old_service_all = array();// pola dla starych uslug jesli aneks
$srv_map = array();// @used if aneks
$p_dealnumber_old = $this->get('P_DEALNUMBER_OLD');
// validate
if ($p_dealnumber_old > 0) {// aneks
if (empty($this->_old_deal)) {
echo '' . "Error: Brak danych dotyczących starej umowy P_DEALNUMBER_OLD = " . $p_dealnumber_old . '
';
return -1;
}
if (!array_key_exists($p_dealnumber_old, $this->_old_srv_map)) {
echo '' . "Error: Brak services map dla P_DEALNUMBER_OLD = " . $p_dealnumber_old . '
';
return -1;
}
$srv_map = $this->_old_srv_map[$p_dealnumber_old];
}
$this->_data['A_RECORD_CREATE_DATE'] = date('Y-m-d-H:i');
$this->_data['A_RECORD_CREATE_AUTHOR'] = User::getName();
$this->_data['A_STATUS_INFO'] = 'Wprowadzono automatycznie za pomoca POKAZ_OFERTY_AKTUALNE';
// dodatkowe dane dla aneksu
if ($p_dealnumber_old > 0) {// aneks
$srv_map = $this->_old_srv_map[$p_dealnumber_old];
if (!empty($srv_map)) {
foreach ($srv_map as $srv_id => $offer_id) {
if ($offer_id > 0) {
$old_srv_row = $this->_old_deal->services_by_id[$srv_id];
$old_srv_data = array();
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_srv_row);
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_srv_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_srv_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_srv_row);
$old_service_all[$offer_id] = $old_srv_data;
}
}
}
}
// wspolne rekordy dla nowej umowy i aneksu
foreach ($this->_data as $k_field_name => $v_value) {
$sql_cols []= "`" . $k_field_name . "`";
}
// utworzenie rekordów na podstawie ofert
foreach ($this->_deal_table->get_offers_by_id() as $k_offer_id => $v_offer) {
$insert_values = array();
$old_service_data = array();// fields like in $this->_old_fields
if (array_key_exists($k_offer_id, $old_service_all)) {
$old_service_data = $old_service_all[$k_offer_id];
}
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $this->_offer_values_map)) {
$offer_field_name = $this->_offer_values_map[$k_field_name];
$out_value .= $v_offer->$offer_field_name;// Undefined property: stdClass::$srednia_netto
} else if (array_key_exists($k_field_name, $old_service_data)) {
$out_value .= $old_service_data[$k_field_name];
} else if (!empty($v_value)) {
$out_value .= $v_value;
} else {
// pozostaw puste
}
// fix $this->_offer_values_map only for *_NEW fields
if ($this->_deal_table->get_type() == 'DEACTIVATE_OPTIONS') {
switch ($k_field_name) {
case 'P_OFFER_ID_OLD': $out_value = $v_offer->ID; break;
case 'P_OFFER_ID_NEW': $out_value = ''; break;
case 'MONTH_COST_OLD': $out_value = $v_offer->srednia_netto; break;// Undefined property: stdClass::$srednia_netto
case 'MONTH_COST_NEW': $out_value = ''; break;
}
}
$insert_values []= "'" . $out_value . "'";
}
if (!empty($insert_values)) {
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
}
if ($p_dealnumber_old > 0) {// aneks
if (!empty($srv_map)) {
foreach ($srv_map as $srv_id => $offer_id) {
if ($offer_id == 0) {
if (!array_key_exists($srv_id, $this->_old_deal->services_by_id)) {
echo '' . "Error: brak SERVICES ID=$srv_id w starej umowie" . '
';
continue;
}
$old_srv_row = $this->_old_deal->services_by_id[$srv_id];
$old_srv_data = array();
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_srv_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_srv_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_srv_row);
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_srv_row);
$insert_values = array();
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $old_srv_data)) {
$out_value = $old_srv_data[$k_field_name];
} else {
$out_value = $v_value;
}
$insert_values []= "'" . $out_value . "'";
}
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
}
}
}
if (empty($sql_insert)) {
return false;
}
$sql = "insert into `USERS2_DEALS` (" . implode(", ", $sql_cols) . ") values \n\t " . implode("\n\t ,", $sql_insert);
if (!$db->query($sql)) {
return false;
}
return true;
}
function create_rows_old_rmme() {
// TODO: use $this->_old_srv_map[$v_deal->ID_DEALS][$v_srv->ID] = $new_offer_id;
$db = DB::getDB();
$sql_insert = array();
/*
$this->_old_deal :
[ID_DEALS] => 8841
[ID_BILLING_USERS] => 11181
[SERVICES_S_ADDRESS_STREET] => SZP7/19
[P_NAME] => Tomasz Bachora
[P_DEALNUMBER] => 9106
[P_DEALDATE] => 2011-10-24
[P_DEALDATE_TERM] => 2013-04-23
[ID_OFFERS_GROUP] =>
[services] => Array
(
[NET] => Array
(
[18090] => stdClass Object
(
[ID] => 18090
[NAME_LIST_SERVICES] => USERS2
[A_STATUS] => NORMAL
[ID_OFFERS] => 737
[ID_DEALS_TABLE] => 8841
[P_ID_SERVICES] => 0
[ABONAMENT_VALUE] => 41.46
[P_ID] => 0
[description] => Dost.do INTERNET
[A_STATUS_DESC] => NORMALNY
[P_SERVICE] => NET
[out_id] => NET_1
*
$this->_old_fields['ID_BILLING_USERS_OLD'] = 'ID_BILLING_USERS';
$this->_old_fields['ID_SERVICES_OLD'] = 'ID_SERVICES';
$this->_old_fields['P_OFFER_ID_OLD'] = 'OFFER_ID';
$this->_old_fields['P_DEAL_DATE_OLD'] = 'P_DEAL_DATE';
$this->_old_fields['P_DEALNUMBER_OLD'] = 'P_DEALNUMBER';
$this->_old_fields['MONTH_COST_OLD'] = 'MONTH_COST';
*
for(var srv_id in srv_map){
out_offer_id=srv_map[srv_id];
if (out_offer_id > 0) {
srv=deal.services_by_id[srv_id];
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'ID_BILLING_USERS_OLD').text(deal.ID_BILLING_USERS);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'P_DEALNUMBER_OLD').text(deal.P_DEALNUMBER);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'P_DEAL_DATE_OLD').text(deal.P_DEALDATE);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'P_DEALTERM_OLD').text(deal.P_DEALDATE_TERM);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'ID_SERVICES_OLD').text(srv.ID);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'P_OFFER_ID_OLD').text(srv.ID_OFFERS);
jQuery('#NEW_OFFER-' + out_offer_id + '-' + 'MONTH_COST_OLD').text(srv.ABONAMENT_VALUE);
*/
$old_service_all = array();
$old_services_todo = array();
// $this->_deal_table->_group->_offers[$k_p_service][$k_offer_id][$k_field_name] => $v_value
// $old_service_all[$k_p_service . '-' . $k_offer_id][$k_field_name] => $v_value
if (!empty($this->_old_deal)) {
foreach ($this->_old_deal->services as $k_p_service => $v_services_arr) {
foreach ($v_services_arr as $k_service_id => $v_service) {
$old_services_todo[$v_service->offer_p_service] []= $k_service_id;
}
}
foreach ($this->_deal_table->_group->get_offers() as $k_p_service => $v_offers_arr) {
foreach ($v_offers_arr as $k_offer_id => $v_offer) {
if (empty($old_services_todo[$v_offer->P_SERVICE])) {
continue;
}
$old_service_id = array_shift($old_services_todo[$v_offer->P_SERVICE]);
$old_service_row = $this->_old_deal->services[$v_offer->P_SERVICE][$old_service_id];
$old_srv_data = array();
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_service_row);
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_service_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_service_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_service_row);
$old_service_all[$v_offer->P_SERVICE . '-' . $k_offer_id] = $old_srv_data;
}
}
}
$sql_cols = array();
$this->_data['A_RECORD_CREATE_DATE'] = date('Y-m-d-H:i');
$this->_data['A_RECORD_CREATE_AUTHOR'] = User::getName();
$this->_data['A_STATUS_INFO'] = 'Wprowadzono automatycznie za pomoca POKAZ_OFERTY_AKTUALNE';
foreach ($this->_data as $k_field_name => $v_value) {
$sql_cols []= "`" . $k_field_name . "`";
}
foreach ($this->_deal_table->_group->get_offers() as $k_p_service => $v_offers_arr) {
$insert_values = array();
foreach ($v_offers_arr as $k_offer_id => $v_offer) {
$old_service_data = array();// fields like in $this->_old_fields
if (array_key_exists($v_offer->P_SERVICE . '-' . $k_offer_id, $old_service_all)) {
$old_service_data = $old_service_all[$v_offer->P_SERVICE . '-' . $k_offer_id];
}
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $this->_offer_values_map)) {
$offer_field_name = $this->_offer_values_map[$k_field_name];
$out_value .= $v_offer->$offer_field_name;
} else if (array_key_exists($k_field_name, $old_service_data)) {
$out_value .= $old_service_data[$k_field_name];
} else if (!empty($v_value)) {
$out_value .= $v_value;
} else {
// pozostaw puste
}
$insert_values []= "'" . $out_value . "'";
}
break;// only one offer by service
}
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
// TODO: utworzyc rekordy wylaczenia dla uslug w old_deal ktorych nie ma w nowym
if (!empty($old_services_todo)) {
foreach ($old_services_todo as $k_p_service => $v_service_ids) {
if (empty($v_service_ids)) {
continue;
}
foreach ($v_service_ids as $v_service_id) {
$old_srv_row = null;
foreach ($this->_old_deal->services as $k_srv_p_service => $v_srv_arr) {
if (array_key_exists($v_service_id, $v_srv_arr)) {
$old_srv_row = $v_srv_arr[$v_service_id];
}
}
if (!$old_srv_row) {
// TODO: err brak services
continue;
}
$old_srv_data = array();
$old_srv_data['ID_SERVICES_OLD'] = V::get('ID', '', $old_srv_row);
$old_srv_data['P_OFFER_ID_OLD'] = V::get('ID_OFFERS', '', $old_srv_row);
$old_srv_data['MONTH_COST_OLD'] = V::get('ABONAMENT_VALUE', '', $old_srv_row);
$old_srv_data['P_SERVICE'] = V::get('offer_p_service', '', $old_srv_row);
$insert_values = array();
foreach ($this->_data as $k_field_name => $v_value) {
$out_value = '';
if (array_key_exists($k_field_name, $old_srv_data)) {
$out_value = $old_srv_data[$k_field_name];
} else {
$out_value = $v_value;
}
$insert_values []= "'" . $out_value . "'";
}
$sql_insert []= "(" . implode(", ", $insert_values) . ")";
}
}
}
if (empty($sql_insert)) {
return false;
}
$sql = "insert into `USERS2_DEALS` (" . implode(", ", $sql_cols) . ") values " . implode("\n\t ,", $sql_insert);
//echo'sql (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';
if (!$db->query($sql)) {
return false;
}
return true;
}
}
class Column_services extends Column_Base {
var $_defaults = array();
var $_remote_data = array();
var $_offer = null;
var $_ses_x_a = null;
var $_ses_x_b = array();
var $_ses_x_c = array();
var $_srv_map = null;
var $_install_price_netto = 0;
var $_upust_months = 0;
var $_upust_months_netto = 0;
var $_old_srv_id = 0;
var $_old_srv = null;
var $_saved_id = 0;
function __construct() {
parent::__construct();
//$this->_data['ID'] = '';
$this->_data['ID_BILLING_USERS'] = '';
$this->_data['NAME_LIST_SERVICES'] = '';// TODO: `LIST_SERVICES`.`name`
$this->_data['A_STATUS'] = '';
$this->_data['active'] = '';
$this->_data['SERVICE_TYPE'] = '';
$this->_data['ID_BILLING_NUMBERS_TYPE'] = '';
$this->_data['ABONAMENT_PERIOD'] = '';
$this->_data['ABONAMENT_VALUE'] = '';
$this->_data['VAT'] = '';
$this->_data['ID_CURRENCY'] = '';
$this->_data['ABONAMENT_PAYMENT'] = '';
$this->_data['ABONAMENT_START'] = '';
$this->_data['MINIMUM_BILLING_VALUE'] = '';
$this->_data['BILLED_TILL'] = '';
$this->_data['HANGUP_FROM'] = '';
$this->_data['HANGUP_TILL'] = '';
$this->_data['HANGUP_STATUS'] = '';
$this->_data['HANGUP_RATIO'] = '';
$this->_data['TIMESTAMP'] = '';
$this->_data['P_ID_SERVICES'] = '';
$this->_data['uwagi'] = '';
$this->_data['ID_DEALS_TABLE'] = '';
$this->_data['VAT_NAME'] = '';
$this->_data['id_list_sww'] = '';// TODO: `list_sww`.`ID`
$this->_data['SERV_ID_BILLING_PREFIXES'] = '';
$this->_data['ID_OFFERS'] = '';
$this->_data['OLD_ID_SERVICES'] = '';
//$this->_data['P_ACCOUNT'] = '';
// BILLED_TILL ???
$this->_defaults['A_STATUS'] = 'WAITING';
$this->_defaults['active'] = 1;
$this->_defaults['SERVICE_TYPE'] = 'ABONAMENT';
$this->_defaults['ID_BILLING_NUMBERS_TYPE'] = 1;
$this->_defaults['ABONAMENT_PERIOD'] = 1;
$this->_defaults['ID_CURRENCY'] = 0;
$this->_defaults['ABONAMENT_PAYMENT'] = 'UP';
$this->_defaults['ABONAMENT_START'] = 1;
$this->_defaults['MINIMUM_BILLING_VALUE'] = 0;
$this->_defaults['HANGUP_FROM'] = null;
$this->_defaults['HANGUP_TILL'] = null;
$this->_defaults['HANGUP_STATUS'] = null;
$this->_defaults['HANGUP_RATIO'] = 1;
$this->_defaults['SERV_ID_BILLING_PREFIXES'] = '0';
$this->_defaults['OLD_ID_SERVICES'] = '0';
$this->_remote_data['S_ADDRESS_STREET'] = '';
}
function set_services_map($srv_map) {
$this->_srv_map = $srv_map;
}
function set_old_srv_id($old_srv_id) {
$this->_old_srv_id = $old_srv_id;
$this->_data['OLD_ID_SERVICES'] = $this->_old_srv_id;
}
function get_old_srv_id() {
return $this->_old_srv_id;
}
function set_old_srv($old_srv) {
$this->_old_srv = $old_srv;
if ($this->_old_srv) {
$service_name = $this->get('NAME_LIST_SERVICES');// $this->_data['NAME_LIST_SERVICES']
if (!$service_name) {
echo'Unknown service_name (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($service_name);echo' ';
return;
}
$srv_b = new Column_ses_x_b();
$srv_b->set_name('SES_' . $service_name . '_B');
$srv_b->set_id_services('TODO ID');
$srv_b->set_id_user($this->get('ID_BILLING_USERS'));
$srv_b->set_type(4);// ABONAMENT_START - Poczatek liczenia abonamentu
$srv_b->set_value1(date('Y-m-d'));
$this->_ses_x_b []= $srv_b;
if (empty($this->_data['BILLED_TILL'])) {
$this->_data['BILLED_TILL'] = date('Y-m-d H:i:s');
}
}
}
function get_old_srv() {
return $this->_old_srv;
}
function get_services_map() {
return $this->_srv_map;
}
function get_ses_x_a() {
return $this->_ses_x_a;
}
function get_ses_x_c() {
return $this->_ses_x_c;
}
function get_ses_x_b() {
return $this->_ses_x_b;
}
function set_data_from_oferta_row($offer) {
// TODO: BUG no $offer!
$this->_offer = $offer;
$this->set_defaults();
$this->_data['ID_OFFERS'] = $offer->ID;
$this->set_name_list_services($offer->P_SERVICE, $offer->P_SERVICE_PARENT);
$this->set_vat($offer->STAWKA_VAT);
$this->set_abonament_value($offer->P_CONTRACT_PRICE_NETTO);
$this->add_install_price_netto($offer->P_INSTALL_QUOTE_NETTO);
// nadpisanie z opcji oferty jesli zdefiniowano
if (isset($offer->_options) && !empty($offer->_options)) {
foreach ($offer->_options as $v_option) {
if ($v_option->P_CONTRACT_PRICE_NETTO > 0) {
$this->add_abonament_value($v_option->P_CONTRACT_PRICE_NETTO);
}
// sumuj oplaty instalacyjne / aktywacyjne
if ($v_option->P_INSTALL_QUOTE_NETTO > 0) {
$this->add_install_price_netto($v_option->P_INSTALL_QUOTE_NETTO);
}
}
}
// upust zwiazany z promocyjnymi miesiacami
// 17 PROMOCYJNE_MIESIACE_DO_ODJECIA_ROZNICA_CENY 0 1 0 Jezeli w tabeli SES_C znajdzie sie taki rekord, to billing : w VALUE1 jest ilosc miesiecy do odjecia, w VALUE2 jest kwota netto bonifikatu za pojedynczy miesiac. System powinien ja rozliczac wstawiajac nowe rekordy i pomniejszajace stare.
if ($offer->P_DEAL_PROMO_MONTHS) {// Ilość promocyjnych miesięcy
$this->_upust_months = $offer->P_DEAL_PROMO_MONTHS;
// P_PROMO_MONTH_PRICE_NETTO - Wartość abonamentu w promocyjnych miesiącach
$this->_upust_months_netto = $this->_data['ABONAMENT_VALUE'] - $offer->P_PROMO_MONTH_PRICE_NETTO;
if (isset($offer->_options) && !empty($offer->_options)) {
foreach ($offer->_options as $v_option) {
// odejmij cene abonamentu z opcji - opcje powinny meic P_PROMO_MONTH_PRICE == P_CONTRACT_PRICE
if ($v_option->P_CONTRACT_PRICE_NETTO > 0) {
$this->_upust_months_netto -= $v_option->P_CONTRACT_PRICE_NETTO;
}
}
}
}
$map = $this->get_services_map();
$service_name = $this->get('NAME_LIST_SERVICES');// $this->_data['NAME_LIST_SERVICES']
if (!$service_name) {
echo'Unknown service_name (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($service_name);echo' ';
return;
}
$ses_x_class_name = 'Column_ses_' . strtolower($service_name) . '_a';
$this->_ses_x_a = new $ses_x_class_name();
$this->_ses_x_a->set_id_services('TODO ID');
$this->_ses_x_a->set_id_billing_users($this->_data['ID_BILLING_USERS']);
$this->_ses_x_a->set_data_from_oferta_row($this->_offer);
// add S_ADDRESS_STREET for SES_USERS2_A
$this->_ses_x_a->set_s_address_street($this->get_s_address_street());
// create SES_X_C object with oplata instalacyjna / aktywacyjna - TYPE 18
if ($this->_install_price_netto > 0) {
$srv_c = new Column_ses_x_c();
$srv_c->set_name('SES_' . $service_name . '_C');
$srv_c->set_id_services('TODO ID');
$srv_c->set_id_user($this->_data['ID_BILLING_USERS']);
$srv_c->set_type(18);// 18 OPLATA_AKTYWACYJNA 0 1 0 Wprowadzenie rekordu tego typu oznaczac bedzie kon...
$srv_c->set_value1('Oplata aktywacyjna');
$srv_c->set_value2($this->_install_price_netto);
$this->_ses_x_c []= $srv_c;
}
if ($this->_upust_months > 0 && $this->_upust_months_netto > 0) {
$srv_c = new Column_ses_x_c();
$srv_c->set_name('SES_' . $service_name . '_C');
$srv_c->set_id_services('TODO ID');
$srv_c->set_id_user($this->_data['ID_BILLING_USERS']);
$srv_c->set_type(17);// 17 PROMOCYJNE_MIESIACE_DO_ODJECIA_ROZNICA_CENY 0 1 0 Jezeli w tabeli SES_C znajdzie sie taki rekord, to billing : w VALUE1 jest ilosc miesiecy do odjecia, w VALUE2 jest kwota netto bonifikatu za pojedynczy miesiac. System powinien ja rozliczac wstawiajac nowe rekordy i pomniejszajace stare.
$srv_c->set_value1($this->_upust_months);
$srv_c->set_value2($this->_upust_months_netto);
$this->_ses_x_c []= $srv_c;
}
}
function set_defaults() {
foreach ($this->_defaults as $k_id => $v_val) {
$this->_data[$k_id] = $v_val;
}
}
function set_id_billing_users($id_user) {
$this->_data['ID_BILLING_USERS'] = $id_user;
}
function set_name_list_services($p_service, $p_service_parent) {
$service_name = '';
$map = $this->get_services_map();
if (array_key_exists($p_service, $map)) {
$service_name = $p_service;
} else if (array_key_exists($p_service_parent, $map)) {
$service_name = $p_service_parent;
}
if (!$service_name) {
echo'Error unknown p_service = ' . $p_service . ' [' . $this->_offer->ID . ' / P_SERVICE_PARENT: ' . $p_service_parent . ']' . ' (F.' . __FUNCTION__ . ':' . __LINE__ . ')
';
echo'map: (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($map);echo' ';
return;
}
$this->_data['NAME_LIST_SERVICES'] = $map[$service_name];
if ($map[$service_name] == 'TV') {
$this->_data['id_list_sww'] = 3;// PKUiW na wartość 61.10.52
}
}
function get_s_address_street() {
return $this->_remote_data['S_ADDRESS_STREET'];
}
function set_s_address_street($street) {
$this->_remote_data['S_ADDRESS_STREET'] = $street;
}
function set_abonament_value($abonament_value) {
$this->_data['ABONAMENT_VALUE'] = $abonament_value;
}
function add_abonament_value($price_add) {
$this->_data['ABONAMENT_VALUE'] += $price_add;
}
function add_install_price_netto($price_add) {
$this->_install_price_netto += $price_add;
}
function set_p_id_services($p_id_services) {
$this->_data['P_ID_SERVICES'] = $p_id_services;
}
function set_id_deals_table($id_deals) {
$this->_data['ID_DEALS_TABLE'] = $id_deals;
}
function set_vat($vat) {
$this->_data['VAT'] = $vat;
$this->_data['VAT_NAME'] = $vat;// TODO: VAT_NAME 'ZW',8,23
}
function set_id_list_sww() {
// TODO: set_id_list_sww ?
}
/**
* return inserted_id or false
*/
function save($simulate_db = null) {
$db = DB::getDB();
$sql_obj = (object)$this->_data;
// if aneks and should run update_old_ses_x_a then set BILLED_TILL for aneks activation date - today
if ($this->_old_srv_id > 0 && $this->_old_srv && $this->_old_srv->ID > 0) {
if (empty($sql_obj->BILLED_TILL)) {
$sql_obj->BILLED_TILL = date('Y-m-d H:i:s');
}
}
if ($simulate_db) {
$this->_saved_id = $simulate_db->add('ADD_NEW_OBJ', 'SERVICES', $sql_obj);
} else {
$this->_saved_id = $db->ADD_NEW_OBJ('SERVICES', $sql_obj);
}
if ($this->_saved_id <= 0) {
$this->_saved_id = 0;
return false;
}
if ($this->_old_srv_id > 0 && $this->_old_srv && $this->_old_srv->ID > 0) {// aneks, update $this->_old_srv
if (!$this->_ses_x_a->update_old_ses_x_a($this->_saved_id, $this->_old_srv->ses_x_a, $simulate_db)) {
return false;
}
}
else {
if (!$this->_ses_x_a->save($this->_saved_id, $simulate_db)) {
return false;
}
}
if (!empty($this->_ses_x_c)) {
foreach ($this->_ses_x_c as $v_ses_c) {
if (!$v_ses_c->save($this->_saved_id, $simulate_db)) {
return false;
}
}
}
if (!empty($this->_ses_x_b)) {
foreach ($this->_ses_x_b as $v_ses_b) {
if (!$v_ses_b->save($this->_saved_id, $simulate_db)) {
return false;
}
}
}
return $this->_saved_id;
}
}
class Column_ses_x_a extends Column_Base {
var $_data_from_offer = array();
var $_data_from_offer_add = array();
var $_defaults = array();
var $_extra_services = array();
function __construct() {
parent::__construct();
$this->_data['ID_SERVICES'] = '';
$this->_data['ID_BILLING_USERS'] = '';
$this->_data['A_STATUS'] = 'WAITING';
}
function set_defaults() {
foreach ($this->_data_from_offer as $v_field) {
if (array_key_exists($v_field, $this->_defaults)) {
$this->_data[$v_field] = $this->_defaults[$v_field];
}
}
}
function set_id_services($id_services) {
$this->_data['ID_SERVICES'] = $id_services;
}
function set_id_billing_users($id_user) {
$this->_data['ID_BILLING_USERS'] = $id_user;
}
function set_s_address_street($street) {
if (array_key_exists('S_ADDRESS_STREET', $this->_data)) {
$this->_data['S_ADDRESS_STREET'] = $street;
}
}
/**
* Override data from offer and options.
*/
function set_data_from_oferta_row($offer) {
$this->set_defaults();
foreach ($this->_data_from_offer as $v_field_name) {
if (!empty($offer->$v_field_name)) {
$this->_data[$v_field_name] = $offer->$v_field_name;
}
}
foreach ($this->_data_from_offer_add as $v_field_name) {
if (!empty($offer->$v_field_name)) {
$this->_data[$v_field_name] += $offer->$v_field_name;
}
}
// nadpisanie z opcji oferty jesli zdefiniowano
if (isset($offer->_options) && !empty($offer->_options)) {
foreach ($offer->_options as $v_option) {
foreach ($this->_data_from_offer as $v_field_name) {
if ($v_field_name == 'P_SERVICE_UPLOAD_RATIO') continue;
if (!empty($v_option->$v_field_name)) {
$this->_data[$v_field_name] = $v_option->$v_field_name;
}
}
foreach ($this->_data_from_offer_add as $v_field_name) {
if (!empty($v_option->$v_field_name)) {
$this->_data[$v_field_name] += $v_option->$v_field_name;
}
}
}
}
$this->generate_extra_services_from_offer($offer);
}
function generate_extra_services_from_offer($offer) {
}
function get_name() {
return 'SES_X_A';
}
function save($services_id, $simulate_db = null) {
if ($this->get_name() == 'SES_X_A') {
echo '' . "Error: tabela SES_X_A nie istnieje" . '
';
return false;
}
$db = DB::getDB();
$this->set_id_services($services_id);
$sql_obj = (object)$this->_data;
if ($simulate_db) {
$simulate_db->add('ADD_NEW_OBJ', $this->get_name(), $sql_obj, array('ID_SERVICES'=>$services_id));
return true;
} else {
$ret_id = $db->ADD_NEW_OBJ($this->get_name(), $sql_obj);
if ($db->has_errors()) {
echo'DB Errors: (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo "\n";print_r($sql);echo "\n";print_r($this);echo' ';
return false;
}
return $ret_id;
}
}
/**
* Generates record object to update in database.
* @returns Array $sql_arr - array of fields to update
*/
function get_update_fields_from_old_ses_x_a($srv_id, $old_ses_x_a) {
$sql_update_fields = array();
$old_field_values = array();
$sql_update_fields['ID'] = $old_ses_x_a->ID;
$sql_update_fields['A_STATUS'] = 'NORMAL';
$sql_update_fields['ID_SERVICES'] = $srv_id;
//$sql_update_fields['T_WHEN_CONNECTED'] = date('Y-m-d');// 2013-06-10 wystarczy wpis w SES_X_B
foreach ($old_ses_x_a as $k_field_name => $v_value) {
if (array_key_exists($k_field_name, $sql_update_fields)) {
continue;
}
$value = V::get($k_field_name, '', $this->_defaults);
if (array_key_exists($k_field_name, $this->_data) && !empty($this->_data[$k_field_name])) {
$value = $this->_data[$k_field_name];
}
if ($value != '' && $v_value != $value) {
$sql_update_fields[$k_field_name] = $value;
if ($k_field_name == 'P_SERVICE_QUOTA_PROFILE') {
$old_field_values []= "{$k_field_name}=...";
} else {
$old_field_values []= "{$k_field_name}={$old_ses_x_a->$k_field_name}";
}
}
}
if (!empty($old_field_values)) {
$sql_update_fields['A_PROBLEM'] = 'UNVERIFIED';
$sql_update_fields['A_PROBLEM_DATE'] = date('Y-m-d-H:i');
$sql_update_fields['A_PROBLEM_DESC'] = 'ANEKS - Stare dane: ID_SERVICES=' . $old_ses_x_a->ID_SERVICES . ', ' . implode(', ', $old_field_values);
if (!empty($old_ses_x_a->A_PROBLEM) && !empty($old_ses_x_a->A_PROBLEM_DESC)) {
$sql_update_fields['A_PROBLEM_DESC'] .= "\n" . $old_ses_x_a->A_PROBLEM_DESC;
}
}
return $sql_update_fields;
}
/**
* Aneks - change ID_SERVICES for new created record
*/
function update_old_ses_x_a($srv_id, $old_ses_x_a, $simulate_db = null) {
$retValue = 0;
$db = DB::getDB();
$sql_update_fields = $this->get_update_fields_from_old_ses_x_a($srv_id, $old_ses_x_a);
$sql_obj = new stdClass();
if (!empty($sql_update_fields)) {
foreach ($sql_update_fields as $k_field_name => $v_value) {
$sql_obj->$k_field_name = $v_value;
}
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', $this->get_name(), $sql_obj, array('ID_SERVICES'=>$srv_id));
$retValue = true;
} else {
$ret = $db->UPDATE_OBJ($this->get_name(), $sql_obj);
$retValue = ($ret > 0);
}
} else {
$retValue = true;
}
//echo'$this (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
if (!empty($this->_extra_services)) {
foreach ($this->_extra_services as $v_extra_srv) {
$v_extra_srv->update_old($srv_id, $this, $old_ses_x_a, $simulate_db);
}
}
return $retValue;
}
}
class Column_ses_users2_a extends Column_ses_x_a {
function __construct() {
parent::__construct();
//$this->_data['S_ADDRESS_CITY'] = '';
//$this->_data['S_ADDRESS_POST_CODE'] = '';
$this->_data['S_ADDRESS_STREET'] = '';
//$this->_data['S_ADDRESS_HOUSE'] = '';
//$this->_data['S_ADDRESS_HOME'] = '';
//$this->_data['S_HOST'] = '';
//$this->_data['S_DOMAIN'] = '';
//$this->_data['S_PASSWD'] = '';
//$this->_data['T_NETWORK_SERVER'] = '';
//$this->_data['P_SERVICE_QUOTA'] = '';
$this->_data['S_OTHER_INFO'] = '';
$this->_data['LAN_DOWNLOAD'] = '';
$this->_data['CONN_DIV'] = '';
$this->_data['S_PUBLIC_IP'] = '';
$this->_data['S_SOHO_WIFI_ROUTER_1292'] = '';
$this->_data['S_E_PORT_1293'] = '';
$this->_data['P_SERVICE_QUOTA'] = '';
$this->_data['P_SERVICE_QUOTA_PROFILE'] = '';
$this->_data['P_SERVICE_UPLOAD_RATIO'] = '';
$this->_data['S_TECHNOLOGY'] = '';
$this->_defaults['LAN_DOWNLOAD'] = 'DOWN_LAN_ENABLED';
$this->_defaults['CONN_DIV'] = 'NO';
$this->_defaults['S_PUBLIC_IP'] = 'NO';
$this->_defaults['S_SOHO_WIFI_ROUTER_1292'] = 'NO';
$this->_defaults['S_E_PORT_1293'] = 'NO';
$this->_data_from_offer = array();
$this->_data_from_offer []= 'CONN_DIV';
$this->_data_from_offer []= 'P_SERVICE_QUOTA';
$this->_data_from_offer []= 'P_SERVICE_QUOTA_PROFILE';
$this->_data_from_offer []= 'P_SERVICE_UPLOAD_RATIO';
$this->_data_from_offer []= 'LAN_DOWNLOAD';
$this->_data_from_offer []= 'S_PUBLIC_IP';
$this->_data_from_offer []= 'S_SOHO_WIFI_ROUTER_1292';
$this->_data_from_offer []= 'S_E_PORT_1293';
$this->_data_from_offer []= 'S_TECHNOLOGY';
}
/**
* Run after set_data_from_oferta_row($offer)
*/
function generate_extra_services_from_offer($offer) {
//echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($offer);echo' ';
if (!empty($offer->P_S_PARAM1)) {
/* sql to check if P_SERVICE_QUOTA and P_SERVICE_QUOTA_PROFILE in offers is correct
SELECT o.ID, o.`P_S_PARAM1` , o.`P_SERVICE_QUOTA` , p.`P_SERVICE_QUOTA` , o.`P_SERVICE_QUOTA_PROFILE` , p.`P_SERVICE_QUOTA_PROFILE` , o.P_SERVICE_COMPANY
FROM `USERS2_OFFERS` AS o, `LIST_USERS2_PROFILES` AS p
WHERE o.`P_SERVICE`='NET' AND o.A_STATUS IN('WAITING','NORMAL') AND o.P_SERVICE_COMPANY IN('BN','NETDAY')
AND p.P_S_PARAM1=o.`P_S_PARAM1` AND (o.`P_SERVICE_QUOTA` != p.`P_SERVICE_QUOTA` OR o.`P_SERVICE_QUOTA_PROFILE` != p.`P_SERVICE_QUOTA_PROFILE`)
ORDER BY o.`ID` DESC
LIMIT 100
*/
$db = DB::getDB();
$sql = "select `P_SERVICE_QUOTA`,`P_SERVICE_QUOTA_PROFILE`
from `LIST_USERS2_PROFILES`
where `P_S_PARAM1`='{$offer->P_S_PARAM1}'
";
//echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo' ';
$res = $db->query($sql);
//if ($db->num_rows() == 1) {
if ($r = $db->fetch($res)) {
//echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($r);echo' ';
$this->_data['P_SERVICE_QUOTA'] = $r->P_SERVICE_QUOTA;
$this->_data['P_SERVICE_QUOTA_PROFILE'] = $r->P_SERVICE_QUOTA_PROFILE;
}
//}
}
// nadpisanie z opcji oferty jesli zdefiniowano
if (!empty($offer->_options)) {
foreach ($offer->_options as $v_option) {
foreach ($this->_data_from_offer as $v_field_name) {
if ($v_field_name == 'P_SERVICE_UPLOAD_RATIO') continue;
if (!empty($v_option->$v_field_name)) {
$this->_data[$v_field_name] = $v_option->$v_field_name;
if ($v_field_name == 'S_PUBLIC_IP') {
if ($this->_data[$v_field_name] == 'YES') {
$extras_srv = new Column_extra_services();
$extras_srv->set_type_from_offer('S_PUBLIC_IP');
$this->_extra_services []= $extras_srv;
}
}
}
}
}
}
}
function get_name() {
return 'SES_USERS2_A';
}
}
class Column_ses_voip_a extends Column_ses_x_a {
function __construct() {
parent::__construct();
$this->_data['VOIP_FAX2EMAIL'] = '';
$this->_data['ID_DOMAINS'] = '';// nazwa zewnetrzenego systemu
$this->_data['ID_DOMAINS_PACKET_ID'] = '';// ID z zewnetrzenego systemu
$this->_data['S_TECHNOLOGY'] = '';
$this->_data['S_ADDRESS_STREET'] = '';
$this->_data_from_offer = array();
$this->_data_from_offer []= 'VOIP_FAX2EMAIL';
$this->_data_from_offer []= 'ID_DOMAINS';
$this->_data_from_offer []= 'ID_DOMAINS_PACKET_ID';
$this->_data_from_offer []= 'S_TECHNOLOGY';
}
function get_name() {
return 'SES_VOIP_A';
}
}
class Column_ses_tv_a extends Column_ses_x_a {
function __construct() {
parent::__construct();
$this->_data['P_DEVICE'] = '';
$this->_data['P_SERVICE_CLASS'] = '';
$this->_data['P_SERVICE_SOCKETS_AMMOUNT_1298'] = '';
$this->_data['ID_DOMAINS'] = '';// nazwa zewnetrzenego systemu
$this->_data['ID_DOMAINS_PACKET_ID'] = '';// ID z zewnetrzenego systemu
$this->_data['S_ADDRESS_STREET'] = '';
$this->_data['P_MULTIROOM_ADD_CARDS'] = '0';
$this->_data['P_MULTIROOM_ADD_DEKODER_SD'] = '0';
$this->_data['P_MULTIROOM_ADD_DEKODER_HD'] = '0';
$this->_data['P_MULTIROOM_ADD_MODUL_CAM'] = '0';
$this->_data['S_TECHNOLOGY'] = '';
$this->_defaults['P_SERVICE_CLASS'] = 'TV';
$this->_data_from_offer = array();
$this->_data_from_offer []= 'P_DEVICE';
$this->_data_from_offer []= 'P_SERVICE_CLASS';
$this->_data_from_offer []= 'P_SERVICE_SOCKETS_AMMOUNT_1298';
$this->_data_from_offer []= 'ID_DOMAINS';
$this->_data_from_offer []= 'ID_DOMAINS_PACKET_ID';
$this->_data_from_offer []= 'S_TECHNOLOGY';
$this->_data_from_offer_add []= 'P_MULTIROOM_ADD_CARDS';
$this->_data_from_offer_add []= 'P_MULTIROOM_ADD_DEKODER_SD';
$this->_data_from_offer_add []= 'P_MULTIROOM_ADD_DEKODER_HD';
$this->_data_from_offer_add []= 'P_MULTIROOM_ADD_MODUL_CAM';
}
function get_name() {
return 'SES_TV_A';
}
}
class Column_ses_x_c extends Column_Base {
var $_name;
function __construct() {
parent::__construct();
$this->_name = 'SES_X_C';
/* @from superedit-UPDATEDB.php after POST from superedit-A_PROBLEM.php
* insert into SES_X_C (ID,ID_SERVICES,ID_BILLING_USERS,TYPE,VALUE1,VALUE2)
*
* A_PROBLEM dodaje TYPE 14 i 15:
* 14 PROBLEM_START_STOP Poczatek i koniec problemu uniemozliwiajacy korzys...
* 15 CZYNNOSCI_SERWISOWE_USLUGI Data i kwota czynnosci serwisowych, do rozliczenia...
*/
$this->_data['ID_SERVICES'] = '';
$this->_data['ID_BILLING_USERS'] = '';
$this->_data['TYPE'] = '';
$this->_data['VALUE1'] = '';
$this->_data['VALUE2'] = '';
}
function set_name($name) {
$this->_name = $name;
}
function get_name() {
return $this->_name;
}
function set_id_services($id_services) {
$this->_data['ID_SERVICES'] = $id_services;
}
function set_id_user($id_user) {
$this->_data['ID_BILLING_USERS'] = $id_user;
}
function set_type($type) {
$this->_data['TYPE'] = $type;
}
function set_value1($val) {
$this->_data['VALUE1'] = $val;
}
function set_value2($val) {
$this->_data['VALUE2'] = $val;
}
function save($services_id, $simulate_db = null) {
if ($this->get_name() == 'SES_X_C') {
echo '' . "Error: tabela SES_X_C nie istnieje" . '
';
return;
}
$db = DB::getDB();
$this->set_id_services($services_id);
//$sql_obj = (object)$this->_data;
//$ret_id = $db->ADD_NEW_OBJ($this->get_name(), $sql_obj);
$sql_arr = array();
foreach ($this->_data as $k => $v) {
$sql_arr ["`" . $k . "`"] = "'" . $v . "'";
}
if ($simulate_db) {
$simulate_db->add('INSERT', $this->get_name(), $this->_data, array('ID_SERVICES'=>$services_id));
return true;
} else {
$sql = "insert into `" . $this->get_name() . "` (" . implode(", ", array_keys($sql_arr)) . ") values (" . implode(", ", array_values($sql_arr)) . ");";
$db->query($sql);
if ($db->has_errors()) {
echo'DB Errors: (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo "\n";print_r($sql);echo "\n";print_r($this);echo' ';
return false;
}
return $db->insert_id();
}
}
}
class Column_ses_x_b extends Column_Base {
var $_name;
function __construct() {
parent::__construct();
$this->_name = 'SES_X_B';
/* @from superedit-UPDATEDB.php after POST from superedit-A_PROBLEM.php
* insert into SES_X_C (ID,ID_SERVICES,ID_BILLING_USERS,TYPE,VALUE1,VALUE2)
*
* A_PROBLEM dodaje TYPE 14 i 15:
* 14 PROBLEM_START_STOP Poczatek i koniec problemu uniemozliwiajacy korzys...
* 15 CZYNNOSCI_SERWISOWE_USLUGI Data i kwota czynnosci serwisowych, do rozliczenia...
*/
$this->_data['TIMESTAMP'] = date('Y-m-d H:i:s');
$this->_data['ID_SERVICES'] = '';
$this->_data['ID_BILLING_USERS'] = '';
$this->_data['TYPE'] = '';
$this->_data['VALUE1'] = '';
$this->_data['VALUE2'] = '';
}
function set_name($name) {
$this->_name = $name;
}
function get_name() {
return $this->_name;
}
function set_id_services($id_services) {
$this->_data['ID_SERVICES'] = $id_services;
}
function set_id_user($id_user) {
$this->_data['ID_BILLING_USERS'] = $id_user;
}
function set_type($type) {
$this->_data['TYPE'] = $type;
}
function set_value1($val) {
$this->_data['VALUE1'] = $val;
}
function set_value2($val) {
$this->_data['VALUE2'] = $val;
}
function save($services_id, $simulate_db = null) {
if ($this->get_name() == 'SES_X_B') {
echo '' . "Error: tabela SES_X_C nie istnieje" . '
';
return;
}
$db = DB::getDB();
$this->set_id_services($services_id);
//$sql_obj = (object)$this->_data;
//$ret_id = $db->ADD_NEW_OBJ($this->get_name(), $sql_obj);
$sql_arr = array();
foreach ($this->_data as $k => $v) {
$sql_arr ["`" . $k . "`"] = "'" . $v . "'";
}
if ($simulate_db) {
$simulate_db->add('INSERT', $this->get_name(), $this->_data, array('ID_SERVICES'=>$services_id));
return true;
} else {
$sql = "insert into `" . $this->get_name() . "` (" . implode(", ", array_keys($sql_arr)) . ") values (" . implode(", ", array_values($sql_arr)) . ");";
$db->query($sql);
if ($db->has_errors()) {
echo'DB Errors: (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo "\n";print_r($sql);echo "\n";print_r($this);echo' ';
return false;
}
return $db->insert_id();
}
}
}
class Column_users2_offers_groups extends Column_Base {
var $_offers;
var $_offers_by_id;
var $_id_options;
var $_group_external_offers_id;
var $suma_P_PROMO_INSTALL_PRICE = 0;
var $suma_P_PROMO_MONTH_PRICE = 0;
var $suma_P_CONTRACT_PRICE = 0;
var $suma_P_OFFER_SREDNIA = 0;
var $suma_P_OFFER_SREDNIA_NETTO = 0;
var $suma_P_OFFER_COSTS = 0;
var $suma_P_OFFER_COSTS_START = 0;
function __construct() {
parent::__construct();
$this->_offers = array();
$this->_offers_by_id = array();
$this->_id_options = array();
$this->_group_external_offers_id = array('ID_NET'=>'NET','ID_TV'=>'TV','ID_TVC'=>'TVC','ID_TVCP_1'=>'TVC','ID_TVCP_2'=>'TVC','ID_TVCP_3'=>'TVC','ID_TVCP_4'=>'TVC','ID_TEL'=>'TEL');
$this->suma_P_PROMO_INSTALL_PRICE = 0;
$this->suma_P_PROMO_MONTH_PRICE = 0;
$this->suma_P_CONTRACT_PRICE = 0;
$this->suma_P_OFFER_SREDNIA = 0;
$this->suma_P_OFFER_SREDNIA_NETTO = 0;
$this->suma_P_OFFER_COSTS = 0;
$this->suma_P_OFFER_COSTS_START = 0;
}
function set_from_raw_data($db_row) {
foreach ($db_row as $k_field => $v_value) {
$this->_data[$k_field] = $v_value;
}
}
function has_offers() {
return !empty($this->_offers_by_id);
}
function get_offers() {
return $this->_offers;
}
function get_offers_by_id() {
return $this->_offers_by_id;
}
function set_offers($offers) {
$this->_offers_by_id = $offers;
$this->recount_costs();
$this->_convert_offers();
}
function set_id_options($id_options) {
$this->_id_options = $id_options;
}
function get_offers_ids() {
return array_keys($this->_offers_by_id);
}
function fetch_offers() {
$offers = array();
foreach ($this->_group_external_offers_id as $k_external_id => $v_p_service) {
if ($this->get($k_external_id) > 0) {
$offers[$this->get($k_external_id)] = null;
}
}
foreach ($this->_id_options as $k_service => $v_options) {
if (empty($v_options)) continue;
foreach ($v_options as $v_option_id) {
if ($v_option_id > 0) {
$offers[$v_option_id] = null;
}
}
}
//$offers = PokazOfertyHelper::get_offers_by_id(array_keys($offers), array('P_DEALTERM_MONTHS'=>$this->get('P_DEALTERM_MONTHS')));
$this->_offers_by_id = PokazOfertyHelper::get_offers_by_id(array_keys($offers), array('P_DEALTERM_MONTHS'=>$this->get('P_DEALTERM_MONTHS')));
$this->recount_costs();
$this->_convert_offers();
}
/**
* Fetch offers by given ids and set _id_options.
* @param array $ids_offers - array of int - offers id
*/
function fetch_offers_by_ids($ids_offers) {
$offers = array();
$options = array();
foreach ($this->_group_external_offers_id as $k_external_id => $v_p_service) {
if ($this->get($k_external_id) > 0) {
$offers[$this->get($k_external_id)] = null;
}
}
foreach ($ids_offers as $v_offer_id) {
if (!array_key_exists($v_offer_id, $offers)) {
$offers[$v_offer_id] = null;
$options []= $v_offer_id;
}
}
$this->_offers_by_id = PokazOfertyHelper::get_offers_by_id(array_keys($offers), array('P_DEALTERM_MONTHS'=>$this->get('P_DEALTERM_MONTHS')));
$this->recount_costs();
foreach ($this->_offers_by_id as $v_offer) {
if (in_array($v_offer->ID, $options)) {
$this->_id_options[$v_offer->P_SERVICE_PARENT] []= $v_offer->ID;
}
}
$this->_convert_offers();
}
function get_options_by_service($p_service) {
if (array_key_exists($p_service, $this->_id_options)) {
$options = array();
foreach ($this->_id_options[$p_service] as $v_id_option) {
$option = V::get($v_id_option, '', $this->_offers_by_id);
if ($option) {
$options [$v_id_option] = $option;
}
}
return $options;
}
return null;
}
/**
* Convert $this->_offers_by_id to $this->_offers.
* Note: first run fetch_offers() or set_offers($offers) to set up $this->_offers;
*/
function _convert_offers() {
$tmp_srv_id = array();// 'NET'=>1, 'TV'=>0, 'TEL'=>0, 'OPCJA_NET'=>2, 'OPCJA_TV'=>2
foreach ($this->_group_external_offers_id as $k_external_id => $v_p_service) {
if ($this->get($k_external_id) > 0) {
$v_offer = $this->_offers_by_id[$this->get($k_external_id)];
if ($v_offer) {
$v_offer->out_id = $v_p_service;
// wiele uslug tego samego typu np. TVC
$tmp_srv_id[$v_offer->out_id] = (!array_key_exists($v_offer->out_id, $tmp_srv_id))? 1 : $tmp_srv_id[$v_offer->out_id] + 1;
$v_offer->out_id = $v_offer->out_id . '_' . $tmp_srv_id[$v_offer->out_id];
$this->_offers [$v_offer->out_id] [$v_offer->ID] = $v_offer;
if (!empty($this->_id_options[$v_p_service])) {
foreach ($this->_id_options[$v_p_service] as $v_option_id) {
if ($v_option_id > 0) {
$v_option = V::get($v_option_id, null, $this->_offers);
if ($v_option) {
$v_option->out_id = 'OPCJA_' . $v_option->P_SERVICE_PARENT;
$tmp_srv_id[$v_option->out_id] = (!array_key_exists($v_option->out_id, $tmp_srv_id))? 1 : $tmp_srv_id[$v_option->out_id] + 1;
$v_option->out_id = $v_option->out_id . '_' . $tmp_srv_id[$v_option->out_id];
$this->_offers [$v_option->out_id] [$v_option->ID] = $v_option;
}
}
}
}
}
}
}
unset($tmp_srv_id);
}
function recount_costs() {
$this->suma_NETTO = 0;// suma abonamentu netto (bez instalacji tylko abonament)
$this->suma_BRUTTO = 0;// suma abonamentu brutto
$this->suma_P_PROMO_INSTALL_PRICE = 0;
$this->suma_P_PROMO_MONTH_PRICE = 0;
$this->suma_P_CONTRACT_PRICE = 0;
$this->suma_P_OFFER_SREDNIA = 0;
$this->suma_P_OFFER_SREDNIA_NETTO = 0;
$this->suma_P_OFFER_COSTS = 0;
$this->suma_P_OFFER_COSTS_START = 0;
$oferty_costs = PokazOfertyHelper::get_offers_costs_by_offer_ids(array_keys($this->_offers_by_id));
$oferty_costs_start = PokazOfertyHelper::get_offers_costs_start_by_offer_ids(array_keys($this->_offers_by_id));
foreach ($this->_offers_by_id as $v_offer) {
$vOfferSumaNetto = (($this->get('P_DEALTERM_MONTHS') - $v_offer->P_DEAL_PROMO_MONTHS) * $v_offer->P_CONTRACT_PRICE_NETTO) + ($v_offer->P_DEAL_PROMO_MONTHS * $v_offer->P_PROMO_MONTH_PRICE_NETTO);
$vOfferSumaBrutto = (($this->get('P_DEALTERM_MONTHS') - $v_offer->P_DEAL_PROMO_MONTHS) * $v_offer->P_CONTRACT_PRICE) + ($v_offer->P_DEAL_PROMO_MONTHS * $v_offer->P_PROMO_MONTH_PRICE);
$this->suma_NETTO += $vOfferSumaNetto;
$this->suma_BRUTTO += $vOfferSumaBrutto;
$this->suma_P_PROMO_INSTALL_PRICE += $v_offer->P_INSTALL_QUOTE;
$this->suma_P_PROMO_MONTH_PRICE += $v_offer->P_PROMO_MONTH_PRICE;
$this->suma_P_CONTRACT_PRICE += $v_offer->P_CONTRACT_PRICE;
if (!isset($v_offer->srednia)) {
$v_offer->srednia = round(( (($this->get('P_DEALTERM_MONTHS') - $v_offer->P_DEAL_PROMO_MONTHS) * $v_offer->P_CONTRACT_PRICE) + ($v_offer->P_DEAL_PROMO_MONTHS * $v_offer->P_PROMO_MONTH_PRICE) + ($v_offer->P_INSTALL_QUOTE)) / $this->get('P_DEALTERM_MONTHS'), 2);
}
$this->suma_P_OFFER_SREDNIA += $v_offer->srednia;
if (!isset($v_offer->srednia_netto)) {
$v_offer->srednia_netto = round(( $vOfferSumaNetto + ($v_offer->P_INSTALL_QUOTE/1.23)) / $this->get('P_DEALTERM_MONTHS'), 2);
}
$this->suma_P_OFFER_SREDNIA_NETTO += $v_offer->srednia_netto;
if (isset($oferty_costs[$v_offer->ID])) {
$this->suma_P_OFFER_COSTS += $oferty_costs[$v_offer->ID];
}
if (isset($oferty_costs_start[$v_offer->ID])) {
$this->suma_P_OFFER_COSTS_START += $oferty_costs_start[$v_offer->ID];
}
}
}
/**
* Zysk netto tylko z abonamentu - pomijając koszta aktywacji/instalacji (tylko typ MONTHLY pomijając START)
*/
function get_zysk_netto() {
$this->recount_costs();
return $this->suma_P_OFFER_SREDNIA_NETTO - $this->suma_P_OFFER_COSTS;
}
function get_zysk_netto_by_months($months) {
//$this->recount_costs();
$zysk = $this->get_zysk_netto();
return $zysk * $months - $this->suma_P_OFFER_COSTS_START;
}
function get_srednia_netto() {
$this->recount_costs();
return $this->suma_P_OFFER_SREDNIA_NETTO;
}
public function get_suma_netto() {
return $this->suma_NETTO;
}
public function get_suma_brutto() {
return $this->suma_BRUTTO;
}
function has_service($p_service) {
foreach ($this->_group_external_offers_id as $k_external_id => $v_p_service) {
if ($v_p_service == $p_service) {
if ($this->get($k_external_id) > 0) {
return true;
}
}
}
return false;
}
}
class Column_extra_services extends Column_Base {
var $_type = '';
var $_old_esrv_rows = array();
function set_type_from_offer($type) {
// EXTRA_SERVICES.E_SERVICE : enum('','E_PORT','E_MAIL_ACCOUNT','E_MAIL_ALIAS','E_MAIL_CARBON','E_WWW_SITE','E_DB','E_TIMER_ON_OFF','E_NAT_IP')
$this->_type = $type;
// S_PUBLIC_IP -> E_NAT_IP @from proces 187 Elektroniczne aktywacje usług Proces zwiazany z elektronicznymi aktywacjami uslug
}
function get_old_rows($old_ses_x_a_id) {
if ($this->_type == 'S_PUBLIC_IP') {
$sql_e_type = 'E_NAT_IP';
$db = DB::getDB();
$sql = "select e.`ID`, e.`ID_SERVICES`, e.`E_SERVICE`, e.`E_S_V`
from `EXTRA_SERVICES` as e
where e.`ID_SERVICES`='{$old_ses_x_a_id}'
and e.`E_SERVICE`='{$sql_e_type}'
";
$res = $db->query($sql);
while ($r = $db->fetch($res)) {
$this->_old_esrv_rows[$r->ID] = $r;
}
}
return $this->_old_esrv_rows;
}
/**
* @param int $srv_id - SERVICES.ID or simulate ID
* @param Column_ses_x_a $srv - new ses_x_a data
* @param object $old_ses_x_a - old ses_x_a data ($k_field_name => $v_value)
* @param $simulate_db
*/
function update_old($srv_id, $srv, $old_ses_x_a, $simulate_db = null) {
$extra_srv_rows = $this->get_old_rows($old_ses_x_a->ID_SERVICES);
if (!empty($extra_srv_rows)) {
foreach ($extra_srv_rows as $v_extra_srv) {
$sql_obj = new stdClass();
$sql_obj->ID = $v_extra_srv->ID;
$sql_obj->ID_SERVICES = $srv_id;
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'EXTRA_SERVICES', $sql_obj, array('ID_SERVICES'=>$srv_id));
} else {
$db->UPDATE_OBJ('EXTRA_SERVICES', $sql_obj);
}
}
}
}
}
class DealOptionsForm {
var $options;
var $oferty_opcje;
var $allowed_services;
var $deal;
var $group;
var $group_view;
var $_sent;
var $_errors;
function __construct() {
$this->options = array();
$this->oferty_opcje = array();
$this->oferty_opcje_by_id = array();
$this->allowed_services = array('NET','TV','TEL', 'TVC');
$this->deal = array();
$this->group = array();
$this->group_view = array();
$this->_sent = false;
$this->_errors = array();
}
function set_options($options_arr) {
if (empty($options_arr)) {
return;
}
foreach ($this->allowed_services as $v_service) {
$options = V::get('id_options_' . $v_service, null, $options_arr, 'array');
if (!empty($options)) {
$this->options[$v_service] = $options;
}
}
if (!empty($this->options)) {
$this->_sent = true;
}
}
function has_option($p_service, $offer_id) {
if (array_key_exists($p_service, $this->options)) {
if (in_array($offer_id, $this->options[$p_service])) {
return true;
}
}
return false;
}
function set_deal($deal) {
$this->deal = $deal;
}
function set_group($group) {
$this->group = $group;
}
function set_group_view($group_view) {
$this->group_view = $group_view;
}
function set_oferty_opcje($oferty_opcje) {
$this->oferty_opcje = $oferty_opcje;
}
function get_oferty_opcje_by_service($p_service) {
$options = array();
if (!$this->group->has_service($p_service)) {
return $options;
}
if (array_key_exists($p_service, $this->oferty_opcje)) {
foreach ($this->oferty_opcje[$p_service] as $k_id => $v_oferta) {
$options[$k_id] = $v_oferta;
}
}
return $options;
}
function get_oferta_opcja($p_service, $offer_id) {
if (array_key_exists($p_service, $this->oferty_opcje)) {
if (array_key_exists($offer_id, $this->oferty_opcje[$p_service])) {
return $this->oferty_opcje[$p_service][$offer_id];
}
}
return null;
}
function get_oferty_opcje_by_id() {
$opcje_by_id = array();
foreach ($this->options as $k_service => $v_options_ids) {
foreach ($v_options_ids as $v_option_id) {
$v_opcja = $this->get_oferta_opcja($k_service, $v_option_id);
if ($v_opcja) {
$opcje_by_id[$v_opcja->ID] = $v_opcja;
}
}
}
return $opcje_by_id;
}
function print_selected_options($title) {
$options_tree = array();
foreach ($this->options as $k_service => $v_options) {
$options_tree[$k_service] = array();
foreach ($v_options as $k_option_id) {
$v_option = $this->get_oferta_opcja($k_service, $k_option_id);
if ($v_option) {
$options_tree[$k_service][$k_option_id] = $v_option;
}
}
}
$cols = PokazOfertyHelper::get_oferty_opcje_visible_cols();
PokazOfertyView::print_options_tree($options_tree, $cols, $title);
}
function is_sent() {
return $this->_sent;
}
function is_valid() {
return empty($this->_errors);
}
function is_confirmed() {
return ('' != V::get('accept', '', $_POST));
}
function validate() {
}
function print_form() {
}
function run() {
}
function save() {
}
}
class DealRmOptionsForm extends DealOptionsForm {
function generate_print_link() {
$link_href = "./odt2xhtml/4138.opcje-rezygnacja.php";
$link_args = array();
foreach ($this->options as $k_service => $v_options_ids) {
foreach ($v_options_ids as $v_option_id) {
$link_args []= "id_options_{$k_service}[]={$v_option_id}";
}
}
$link_href .= "?id_user={$this->deal->ID_BILLING_USERS}&" . implode("&", $link_args);
$link_ico = ' ';
$out = '' . " drukuj {$link_ico}" . ' ';
return $out;
}
function validate() {
$opcje_by_id = $this->get_oferty_opcje_by_id();
if (empty($opcje_by_id)) {
$this->_errors []= 'Nie wybrano żadnych opcji';
}
}
function print_form() {
if ($this->is_sent() && $this->is_valid()) {
return;
}
echo '' . "Zaznacz opcje do wyłączenia" . '
';
echo '';
}
function run() {
if ($this->is_sent()) {
$this->validate();
if ($this->is_valid()) {
if (!$this->is_confirmed()) {
$print_link = $this->generate_print_link();
$this->print_selected_options("Wybrano dodatkowe opcje do wyłączenia {$print_link}");
echo '';
} else {
$this->save();
}
return;
}
else {
echo '' . "Wystąpiły następujące błędy: ". ' ' . implode(' ', $this->_errors) . '
';
}
}
$this->print_form();
}
function save() {
$this->print_selected_options('Wybrano dodatkowe opcje do wyłączenia');
$opcje_by_id = $this->get_oferty_opcje_by_id();
$deals_table = new Column_deals_table();
$deals_table->set('P_ID', $this->deal->ID_DEALS);
$deals_table->set('ID_BILLING_USERS', $this->deal->ID_BILLING_USERS);
$deals_table->set('S_ADDRESS_STREET', $this->deal->S_ADDRESS_STREET);
$deals_table->set('DEALDESC', 'Deaktywacja opcji ' . implode(',', array_keys($opcje_by_id)));
$deals_table->set('P_DEALDATE', date('Y-m-d'));
$deals_table->_offers_rows = $opcje_by_id;
$new_deal_id = $deals_table->create_opcje_deaktywacja();
if ($new_deal_id > 0) {
echo '' . "Pomyślnie utworzono rekord w DEALS_TABLE {$new_deal_id}" . '
';
$users2_deals = new Column_users2_deals();
$users2_deals->set_deal_table($deals_table);
$users2_deals->set_s_address_street($this->deal->S_ADDRESS_STREET);
$users2_deals->set_p_dealnumber_new($new_deal_id);
if (!$users2_deals->create_rows()) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordów do USERS2_DEALS" . '
';
$this->_show_deal_form = true;
} else {
echo '' . "Utworzono rekordy w tabeli USERS2_DEALS dla nowej umowy (ID=" . $new_deal_id . ")" . '
';
$this->_show_deal_form = false;
}
} else {
echo '' . "Nie udało się utworzyć rekordu w DEALS_TABLE" . '
';
}
}
}
class DealAddOptionsForm extends DealOptionsForm {
function generate_print_link() {
$link_href = "./odt2xhtml/1657.opcje-zamowienie.php";
$link_args = array();
foreach ($this->options as $k_service => $v_options_ids) {
foreach ($v_options_ids as $v_option_id) {
$link_args []= "id_options_{$k_service}[]={$v_option_id}";
}
}
$link_href .= "?id_user={$this->deal->ID_BILLING_USERS}&" . implode("&", $link_args);
$link_ico = ' ';
$out = '' . " drukuj {$link_ico}" . ' ';
return $out;
}
function validate() {
$opcje_by_id = $this->get_oferty_opcje_by_id();
if (empty($opcje_by_id)) {
$this->_errors []= 'Nie wybrano żadnych opcji';
}
}
function print_form() {
if ($this->is_sent() && $this->is_valid()) {
return;
}
echo '' . "Zaznacz opcje do dodania do umowy {$this->deal->ID_DEALS}" . '
';
echo '';
}
function run() {
if ($this->is_sent()) {
$this->validate();
if ($this->is_valid()) {
if (!$this->is_confirmed()) {
$print_link = $this->generate_print_link();
$this->print_selected_options("Wybrano dodatkowe opcje do uruchomienia {$print_link}");
echo '';
} else {
$this->save();
}
return;
}
else {
echo '' . "Wystąpiły następujące błędy: ". ' ' . implode(' ', $this->_errors) . '
';
}
}
$this->print_form();
}
function save() {
$this->print_selected_options('Wybrano dodatkowe opcje do uruchomienia');
$opcje_by_id = $this->get_oferty_opcje_by_id();
$deals_table = new Column_deals_table();
$deals_table->set('P_ID', $this->deal->ID_DEALS);
$deals_table->set('ID_BILLING_USERS', $this->deal->ID_BILLING_USERS);
$deals_table->set('S_ADDRESS_STREET', $this->deal->S_ADDRESS_STREET);
$deals_table->set('DEALDESC', 'Aktywacja opcji ' . implode(',', array_keys($opcje_by_id)));
$deals_table->set('P_DEALDATE', date('Y-m-d'));
$deals_table->_offers_rows = $opcje_by_id;
$new_deal_id = $deals_table->create_opcje_aktywacja();
if ($new_deal_id > 0) {
echo '' . "Pomyślnie utworzono rekord w DEALS_TABLE {$new_deal_id}" . '
';
$users2_deals = new Column_users2_deals();
$users2_deals->set_deal_table($deals_table);
$users2_deals->set_s_address_street($this->deal->S_ADDRESS_STREET);
$users2_deals->set_p_dealnumber_new($new_deal_id);
if (!$users2_deals->create_rows()) {
echo '' . "Error: wystąpił błąd podczas dodawania rekordów do USERS2_DEALS" . '
';
$this->_show_deal_form = true;
} else {
echo '' . "Utworzono rekordy w tabeli USERS2_DEALS dla nowej umowy (ID=" . $new_deal_id . ")" . '
';
$this->_show_deal_form = false;
}
} else {
echo '' . "Nie udało się utworzyć rekordu w DEALS_TABLE" . '
';
}
}
}
class DealActivateOptionsForm {
var $deal;
var $active_deals_by_id;
var $p_active_deal;
var $offers_rows;
var $user;
var $group;// Column_users2_offers_groups
function set_deal($deal) {
$this->deal = $deal;
}
function fetch_data() {
$this->user = PokazOfertyHelper::get_user_info($this->deal->get('ID_BILLING_USERS'));
$this->active_deals_by_id = PokazOfertyHelper::get_deals_active_by_user($this->user->ID_BILLING_USERS);
$this->p_active_deal = $this->active_deals_by_id[$this->deal->get('P_ID')];
$id_offers_on = $this->deal->get('ID_OFFERS_ON');
$id_offers_on = explode(',', $id_offers_on);
$this->group = PokazOfertyHelper::get_group($this->p_active_deal->ID_OFFERS_GROUP);
$this->group->fetch_offers();
$this->offers_rows = PokazOfertyHelper::get_offers_by_id($id_offers_on);
}
function run() {
$this->fetch_data();
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
$pokaz_oferty_view->user_with_services($this->user, $this->active_deals_by_id);
$pokaz_oferty_view->print_group_info($this->group, array('hide_print'=>true));
$options_tree = array();
foreach ($this->offers_rows as $k_offer_id => $v_offer) {
$options_tree[$v_offer->P_SERVICE_PARENT][$k_offer_id] = $v_offer;
}
$cols = PokazOfertyHelper::get_oferty_opcje_visible_cols();
$pokaz_oferty_view->print_options_tree($options_tree, $cols);
$this->save_preview();
if (1 == V::get('accept', 0, $_POST, 'int')) {
$this->save();
}
echo '';
echo'active_deal (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->p_active_deal);echo' ';
echo 'TODO: run L.' . __LINE__ . '
';
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
}
function save() {
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
}
function save_preview() {
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this);echo' ';
$this->_srv_to_create = array();
$this->_srv_to_update = array();
// generate preview
// $this->p_active_deal;
// $this->p_active_deal->services
// $this->p_active_deal->services_by_id
// $this->p_active_deal->ses_x_a
foreach ($this->offers_rows as $k_id => $v_option) {
echo '' . "opcja {$k_id}; P_SERVICE_PARENT: {$v_option->P_SERVICE_PARENT}" . '
';
echo' (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_option);echo' ';
if (!empty($v_option->ID_DOMAINS) && $v_option->ID_DOMAINS_PACKET_ID > 0) {
$this->_srv_to_create[$v_option->ID] = $v_option;
}
else {
$found_service = null;
if (array_key_exists($v_opcja->P_SERVICE_PARENT, $this->p_active_deal->services)) {
if (count($this->p_active_deal->services[$v_opcja->P_SERVICE_PARENT]) > 1) {
// TODO: za duzo SERVICES
}
}
//$offers[$k_id]->_options[$k_option_id] = $offers[$k_option_id];
}
}
echo'_srv_to_create (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_srv_to_create);echo' ';
return;
// create new _services objects
foreach ($this->_srv_to_create as $k_offer_id => $v_params) {
$offer = $offers[$k_offer_id];
$srv = new Column_services();
$srv->set_id_deals_table($this->_deal->get('ID'));
$srv->set_id_billing_users($this->_deal->get('ID_BILLING_USERS'));
$srv->set_s_address_street($this->_deal->get('S_ADDRESS_STREET'));
$srv->set_services_map($this->get_service_type_map());
$srv->set_data_from_oferta_row($offer);
if (($old_srv_id = V::get('old_srv_id', 0, $v_params)) > 0) {
$srv->set_old_srv_id($old_srv_id);
$srv->set_old_srv($this->get_old_srv_by_id($old_deal_id, $old_srv_id));
$srv->set('A_STATUS', 'NORMAL');
// TODO: HANGUP_FROM i inne parametry wymagane do uruchomienia usługi
// _srv_to_off
$this->_srv_to_off [$old_srv_id] = true;
}
$this->_services []= $srv;
}
}
}
class DealActivateRezygnacja {
var $deal;
var $_user_active_deals = null;
var $_errors = array();
function add_error($msg) {
$this->_errors []= $msg;
}
function get_errors() {
return $this->_errors;
}
function has_errors() {
return !empty($this->_errors);
}
function set_deal($deal) {
$this->deal = $deal;
}
function _fetch_active_deals() {
if ($this->_user_active_deals === null) {
$user_id = $this->deal->get('ID_BILLING_USERS');
$this->_user_active_deals = array();
if ($user_id > 0) {
$this->_user_active_deals = PokazOfertyHelper::get_deals_active_by_user($user_id);
}
}
return $this->_user_active_deals;
}
function get_deal_old() {
$old_active_deals = $this->_fetch_active_deals();
$deal_old_id = $this->deal->get('P_DEALNUMBER_OLD');
if ($deal_old_id <= 0) {
return false;
}
if (array_key_exists($deal_old_id, $old_active_deals)) {
return $old_active_deals[$deal_old_id];
}
return false;
}
function validate() {
$user_id = $this->deal->get('ID_BILLING_USERS');
if ($user_id <= 0) {
$this->add_error('Brak ID klienta (ID_BILLING_USERS)');
}
$deal_old_id = $this->deal->get('P_DEALNUMBER_OLD');
if ($deal_old_id <= 0) {
$this->add_error('Brak numeru ID starej umowy (P_DEALNUMBER_OLD)');
}
$street = $this->deal->get('S_ADDRESS_STREET');
if (empty($street)) {
$this->add_error('Brak adresu (S_ADDRESS_STREET)');
}
$l2_hangup_from = $this->deal->get('L2_HANGUP_FROM');
if (empty($l2_hangup_from)) {
$this->add_error('Brak daty odłączenia usług (L2_HANGUP_FROM)');
}
else if (strlen($l2_hangup_from) != 10 || strlen(str_replace('-', '', $l2_hangup_from)) != 8 || !is_numeric(str_replace('-', '', $l2_hangup_from))) {
$this->add_error('Błędna data odłączenia usług (L2_HANGUP_FROM)');
}
//$id_offers_off = $this->deal->get('ID_OFFERS_OFF');// wypełnić poprawnymi ID ofert z aktualnych usług
//$id_offers_off = (!empty($id_offers_off))? explode(',', $id_offers_off) : array();
if (!$this->has_errors()) {
$old_deal = $this->get_deal_old();
if (empty($old_deal)) {
$this->add_error("Umowa ID {$deal_old_id} nie ma aktywnych usług (P_DEALNUMBER_OLD)");
} else {
if (!empty($old_deal->services_by_id)) {
$id_offers_off_by_srv = array();
foreach ($old_deal->services_by_id as $k_srv_id => $v_srv) {
if ($v_srv->ID_OFFERS > 0) {
$id_offers_off_by_srv []= $v_srv->ID_OFFERS;
} else {
$this->add_error("Brak numeru oferty w usłudze ID {$v_srv->ID} typu {$v_srv->P_SERVICE} (ID_OFFERS)");
}
}
//if (empty($id_offers_off) || count($id_offers_off_by_srv) > count($id_offers_off)) {
$this->deal->set('ID_OFFERS_OFF', implode(',', $id_offers_off_by_srv));
//}
}
}
}
return !$this->has_errors();
}
function run() {
echo '' . "Aktywacja rezygnacji" . ' ';
if (!$this->validate()) {
echo '' . "Error: nie można aktywować rezygnacji:" . '
';
echo '' . implode(' ', $this->get_errors()) . ' ';
}
$id_user = $this->deal->get('ID_BILLING_USERS');
$user = PokazOfertyHelper::get_user_info($id_user);
if (!$user) {
echo '' . "Error: brak danych o kliencie {$id_user}" . '
';
return;
}
$active_deals_by_id = $this->_fetch_active_deals();
$pokaz_oferty_view = new PokazOfertyView();
echo $pokaz_oferty_view->print_css();
//echo $pokaz_oferty_view->print_jquery_ui();
$pokaz_oferty_view->user_with_services($user, $active_deals_by_id);
if (1 == V::get('accept', 0, $_POST, 'int')) {
Lib::loadClass('SimulateDBTask');
$db = DB::getDB();
$simulate_db = new SimulateDBTask($db, "DEALS_TABLE-" . $this->deal->get('ID'));
if ($this->save($simulate_db)) {
echo $pokaz_oferty_view->print_ui_widget_ok("Rezygnację aktywowano pomyślnie");
if ($simulate_db) {
echo '';
echo '
' . "Run database tasks:" . '
';
$simulate_db->run();
echo '
' . "database tasks end." . '
';
echo '
';
}
return;
} else {
echo $pokaz_oferty_view->print_ui_widget_errors('wystąpiły błądy podczas aktywacji rezygnacji', $this->get_errors());
}
}
$old_deal = $this->get_deal_old();
echo '' . "Podgląd wprowadzanych zmian - rezygnacja z umowy ID {$old_deal->ID_DEALS}" . ' ';
if (!empty($old_deal->services_by_id)) {
$id_offers_off_by_srv = array();
foreach ($old_deal->services_by_id as $k_srv_id => $v_srv) {
$cols = array('ID', 'NAME_LIST_SERVICES', 'A_STATUS', 'ABONAMENT_VALUE', 'description', 'ID_OFFERS', 'HANGUP_FROM', 'HANGUP_STATUS');
$v_srv->HANGUP_FROM = $this->deal->get('L2_HANGUP_FROM');
$v_srv->HANGUP_STATUS = 'OFF_HARD';
$v_srv->HANGUP_RATIO = 1;
PokazOfertyView::print_simple_tbl($v_srv, $cols, "Usługa {$v_srv->P_SERVICE} (ID={$v_srv->ID})");
$cols = array('ID', 'S_ADDRESS_STREET', 'A_PROBLEM', 'A_PROBLEM_DESC', 'A_PROBLEM_DATE');
$v_srv_a = $old_deal->ses_x_a[$k_srv_id];
$v_srv_a->A_PROBLEM = 'UNVERIFIED';
$v_srv_a->A_PROBLEM_DATE = date('Y-m-d-H:i');
$v_srv_a->A_PROBLEM_DESC = "Rezygnacja z dniem: " . $this->deal->get('L2_HANGUP_FROM') . "\n" . $v_srv_a->A_PROBLEM_DESC;
PokazOfertyView::print_simple_tbl($v_srv_a, $cols, "Parametry usługi {$v_srv->P_SERVICE} (ID={$v_srv->ID})");
}
}
echo ' ';
echo '';
}
function save($simulate_db = null) {
$log_arr = array();
$id_offers_off_by_srv = array();
$old_deal = $this->get_deal_old();
if (!empty($old_deal->services_by_id)) {
foreach ($old_deal->services_by_id as $k_srv_id => $v_srv) {
$id_offers_off_by_srv []= $v_srv->ID_OFFERS;
$sql_obj = new stdClass();
$sql_obj->ID = $v_srv->ID;
$sql_obj->HANGUP_STATUS = 'OFF_HARD';
$sql_obj->HANGUP_FROM = $this->deal->get('L2_HANGUP_FROM');
$sql_obj->HANGUP_RATIO = 1;
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'SERVICES', $sql_obj);
} else {
if ($db->UPDATE_OBJ('SERVICES', $sql_obj) <= 0) {
$this->add_error("nie udało się wyłączyć usługi {$v_srv->ID}");
} else {
$log_arr []= "wyłączono usługę {$v_srv->ID} (HANGUP_STATUS na OFF_HARD, HANGUP_FROM: " . $this->deal->get('L2_HANGUP_FROM') . ")";
}
}
if ($v_srv->NAME_LIST_SERVICES == 'USERS2') {
continue;// nie wystawiaj problemów dla internetu
}
if (isset($old_deal->ses_x_a[$k_srv_id])) {
$v_srv_a = $old_deal->ses_x_a[$k_srv_id];
$sql_obj = new stdClass();
$sql_obj->ID = $v_srv_a->ID;
$sql_obj->A_PROBLEM = 'UNVERIFIED';
$sql_obj->A_PROBLEM_DATE = date('Y-m-d-H:i');
$sql_obj->A_PROBLEM_DESC = "Rezygnacja z dniem: " . $this->deal->get('L2_HANGUP_FROM');
if (!empty($v_srv_a->A_PROBLEM) && !empty($v_srv_a->A_PROBLEM_DESC)) {
$sql_obj->A_PROBLEM_DESC .= "\n" . $v_srv_a->A_PROBLEM_DESC;
}
$ses_x_a_tbl = 'SES_' . $v_srv->NAME_LIST_SERVICES . '_A';
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', $ses_x_a_tbl, $sql_obj);
} else {
if ($db->UPDATE_OBJ($ses_x_a_tbl, $sql_obj) <= 0) {
$this->add_error("nie udało się dodać problemu dla usługi {$v_srv->ID}");
} else {
$log_arr []= "dodano problem do usługi {$ses_x_a_tbl} ID_SERVICES={$v_srv->ID}";
}
}
} else {
$this->add_error("brak rekordu ses_x_a dla usługi {$v_srv->ID}");
}
}
}
$sql_obj = new stdClass();
$sql_obj->ID = $this->deal->get('ID');
$sql_obj->A_STATUS = 'NORMAL';
$sql_obj->ID_OFFERS_OFF = implode(',', $id_offers_off_by_srv);
if ($simulate_db) {
$simulate_db->add('UPDATE_OBJ', 'DEALS_TABLE', $sql_obj);
} else {
if ($db->UPDATE_OBJ('DEALS_TABLE', $sql_obj) <= 0) {
$this->add_error("nie udało się aktywować umowy " . $this->deal->get('ID'));
return false;
} else {
$log_arr []= "aktywowano umowę " . $this->deal->get('ID') . " (status na NORMAL)";
}
}
return !$this->has_errors();
}
}