|
|
@@ -1,6 +1,7 @@
|
|
|
<?php
|
|
|
|
|
|
Lib::loadClass('RouteBase');
|
|
|
+Lib::loadClass('Windykacja_View');
|
|
|
|
|
|
// Tool for Windykacja status table to store contacts with clients
|
|
|
class Route_UrlAction_UserContact extends RouteBase {
|
|
|
@@ -11,7 +12,7 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
if ($idUser <= 0) throw new Exception("Missing id client");
|
|
|
|
|
|
echo UI::h('h3', [ 'style' => "margin-bottom: 24px; border-bottom: 1px solid #eee" ], "Dodaj notatkę ze spotkania z klientem {$idUser}");
|
|
|
- $this->viewUserInfo($idUser);
|
|
|
+ Windykacja_View::viewUserInfo($idUser);
|
|
|
|
|
|
$postTask = V::get('_postTask', '', $_POST);
|
|
|
switch ($postTask) {
|
|
|
@@ -23,11 +24,11 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
|
|
|
echo UI::h('hr');
|
|
|
|
|
|
- $this->viewHistContacts($idUser);
|
|
|
+ $this->viewUserPaymentContactsHistory($idUser);
|
|
|
}
|
|
|
|
|
|
function viewSaveContactForm($idUser) {
|
|
|
- $windykInfo = $this->getWindykacjaInfo($idUser);
|
|
|
+ $windykInfo = Windykacja_View::getWindykacjaInfo($idUser);
|
|
|
$windykStatusInfo = ($windykInfo) ? $windykInfo['A_STATUS_INFO'] : '';
|
|
|
$windykReminder = ($windykInfo && (
|
|
|
!empty($windykInfo['L_APPOITMENT_USER'])
|
|
|
@@ -81,8 +82,8 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
]),
|
|
|
UI::h('div', [ 'class' => "row", 'style' => "padding-bottom: 12px" ], [
|
|
|
UI::h('div', [ 'class' => "col-md-12" ], [
|
|
|
- UI::h('label', [], "Notatka"),
|
|
|
- UI::h('textarea', [ 'class' => "form-control", 'type' => "text", 'name' => 'L_APPOITMENT_INFO' ], $args['L_APPOITMENT_INFO']),
|
|
|
+ UI::h('label', [], "Notatka ze spotkania"),
|
|
|
+ UI::h('textarea', [ 'class' => "form-control", 'type' => "text", 'name' => 'L_APPOITMENT_INFO', 'rows' => 3 ], $args['L_APPOITMENT_INFO']),
|
|
|
]),
|
|
|
]),
|
|
|
UI::h('div', [ 'class' => "row", 'style' => "padding-bottom: 12px" ], [
|
|
|
@@ -197,26 +198,34 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
if (empty($args['REMINDER_INFO'])) throw new Exception("Brak adnotacji przypomnienia");
|
|
|
}
|
|
|
|
|
|
- $windykInfo = $this->getWindykacjaInfo($idUser);
|
|
|
+ $windykInfo = Windykacja_View::getWindykacjaInfo($idUser);
|
|
|
|
|
|
// create new record with L_APPOITMENT_* in table `USERS2_CONTACT`
|
|
|
- DB::getPDO()->insert('USERS2_CONTACT', [
|
|
|
+ $newContactItem = [
|
|
|
'ID_BILLING_USERS' => $idUser,
|
|
|
'L_APPOITMENT_USER' => $args['L_APPOITMENT_USER'],
|
|
|
'L_APPOITMENT_DATE' => $args['L_APPOITMENT_DATE'],
|
|
|
'L_APPOITMENT_TYPE' => $args['L_APPOITMENT_TYPE'],
|
|
|
'L_APPOITMENT_INFO' => $args['L_APPOITMENT_INFO'],
|
|
|
- 'SALDO' => $windykInfo['SALDO'],
|
|
|
+ 'SALDO' => $windykInfo['PAY_SALDO'],
|
|
|
'A_RECORD_CREATE_DATE' => "NOW()",
|
|
|
'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
|
|
|
- ]);
|
|
|
+ ];
|
|
|
+ $idCreated = DB::getPDO()->insert('USERS2_CONTACT', $newContactItem);
|
|
|
+ DB::getPDO()->insert('USERS2_CONTACT_HIST', array_merge($newContactItem, [ 'ID_USERS2' => $idCreated ]));
|
|
|
// update A_STATUS_INFO in `USERS2_WINDYKACJA_STATUS` if $args['change_windykacja_status']
|
|
|
if ($args['change_windykacja_status']) {
|
|
|
- DB::getPDO()->update('USERS2_WINDYKACJA_STATUS', 'ID_BILLING_USERS', $idUser, [
|
|
|
- 'A_STATUS_INFO' => $args['A_STATUS_INFO'],
|
|
|
- 'A_RECORD_UPDATE_DATE' => "NOW()",
|
|
|
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
|
|
|
- ]);
|
|
|
+ if ($windykInfo['A_STATUS_INFO'] != $args['A_STATUS_INFO']) {
|
|
|
+ $toUpdateWindyk = [
|
|
|
+ 'A_STATUS_INFO' => $args['A_STATUS_INFO'],
|
|
|
+ 'A_RECORD_UPDATE_DATE' => "NOW()",
|
|
|
+ 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
|
|
|
+ ];
|
|
|
+ DB::getPDO()->update('USERS2_WINDYKACJA_STATUS', 'ID_BILLING_USERS', $idUser, $toUpdateWindyk);
|
|
|
+ DB::getPDO()->insert('USERS2_WINDYKACJA_STATUS_HIST', array_merge($toUpdateWindyk, [
|
|
|
+ 'ID_USERS2' => $windykInfo['ID'],
|
|
|
+ ]));
|
|
|
+ }
|
|
|
}
|
|
|
// update L_APPOITMENT_* fields using REMINDER_* in `USERS2_WINDYKACJA_STATUS` if $args['add_reminder']
|
|
|
if ($args['add_reminder']) {
|
|
|
@@ -237,187 +246,13 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
throw new AlertSuccessException("Wprowadzono notatkę ze spotkania z klientem " . UI::h('a', [ 'href' => $this->getLink('', [ 'id_user' => $idUser ]) ], "wróć"));
|
|
|
}
|
|
|
|
|
|
- function viewUserInfo($idUser) {
|
|
|
- $userInfo = $this->getUserInfo($idUser);
|
|
|
- $windykInfo = $this->getWindykacjaInfo($idUser);
|
|
|
-
|
|
|
- echo UI::h('details', [ 'style' => "margin-bottom: 24px" ], [
|
|
|
- UI::h('summary', [ 'style' => "padding: 12px; background: #eee; cursor: pointer; outline: none" ], [
|
|
|
- ($userInfo['is_firma']) ? "Firma" : "Klient",
|
|
|
- " ",
|
|
|
- UI::h('b', [], "{$userInfo['P_NAME']} {$userInfo['P_NAME_SECOND']}"),
|
|
|
- $windykInfo ? UI::h('span', [ 'style' => "padding-left: 24px" ], [
|
|
|
- "Zapis/Odczyt dla: {$windykInfo['A_ADM_COMPANY']}", // $windykInfo['A_CLASSIFIED'];
|
|
|
- ]) : "",
|
|
|
- UI::h('span', [ 'style' => "padding-left: 24px" ], [
|
|
|
- "Status windykacji: ",
|
|
|
- (!$windykInfo) ? "brak danych" : UI::h('span', [], "{$windykInfo['A_STATUS']} <em>{$windykInfo['A_STATUS_INFO']}</em>"),
|
|
|
- ]),
|
|
|
- " ...",
|
|
|
- UI::h('span', [ 'style' => "float:right" ], [
|
|
|
- UI::h('a', [ 'href' => "index.php?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=&_f=&_user_id={$idUser}" ], "Panel windykacji"),
|
|
|
- ]),
|
|
|
- ]),
|
|
|
- UI::h('div', [ 'style' => "padding: 12px; background: #eee;" ], [
|
|
|
- UI::h('table', [], [
|
|
|
- UI::h('tr', [], [
|
|
|
- UI::h('td', [ 'style' => "vertical-align:top; padding-right:8px" ], [
|
|
|
- $this->viewWidgetUserInfo($idUser, $userInfo),
|
|
|
- ]),
|
|
|
- UI::h('td', [ 'style' => "vertical-align:top; padding-right:8px" ], [
|
|
|
- $this->viewWidgetUserWindykInfo($idUser, $windykInfo),
|
|
|
- ]),
|
|
|
- ]),
|
|
|
- ]),
|
|
|
- ]),
|
|
|
- ]);
|
|
|
- }
|
|
|
- function viewWidgetUserInfo($idUser, $userInfo = []) {
|
|
|
- if (empty($userInfo)) $userInfo = $this->getUserInfo($idUser);
|
|
|
-
|
|
|
- $outUserInfo = [
|
|
|
- 'Nr klienta' => $userInfo['ID_BILLING_USERS'],
|
|
|
- 'Firma' => ($userInfo['is_firma']) ? "Tak" : "Nie",
|
|
|
- 'Nip' => $userInfo['P_NIP'],
|
|
|
- 'Pesel' => $userInfo['P_PESEL'],
|
|
|
- 'Tel' => $userInfo['P_PHONE'],
|
|
|
- 'email' => $userInfo['user_mail_contact'],
|
|
|
- 'Adres' => "{$userInfo['P_ADDRESS_POST_CODE']} {$userInfo['P_ADDRESS_CITY']} {$userInfo['P_ADDRESS_STREET']} {$userInfo['P_ADDRESS_HOME']}/{$userInfo['P_ADDRESS_HOUSE']}",
|
|
|
- 'Operator' => "[{$userInfo['BILLING_OWNER']}] {$userInfo['BILLING_OWNER_NAME']}",
|
|
|
- ];
|
|
|
-
|
|
|
- return UI::h('div', [], [
|
|
|
- UI::h('p', [ 'style' => "border-left:3px solid #ddd; padding-left:6px; font-weight:bold" ], "Dane klienta"),
|
|
|
- UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; background:#fff" ],
|
|
|
- array_map(function ($fieldName) use ($outUserInfo) {
|
|
|
- return UI::h('tr', [], [
|
|
|
- UI::h('th', [], $fieldName),
|
|
|
- UI::h('td', [], $outUserInfo[$fieldName]),
|
|
|
- ]);
|
|
|
- }, array_keys($outUserInfo))
|
|
|
- ),
|
|
|
- ]);
|
|
|
- }
|
|
|
- function viewWidgetUserWindykInfo($idUser, $windykInfo = []) {
|
|
|
- if (empty($windykInfo)) $windykInfo = $this->getUserInfo($idUser);
|
|
|
-
|
|
|
- $outWindykInfo = [
|
|
|
- 'Status' => $windykInfo['A_STATUS'],
|
|
|
-
|
|
|
- // $filter_arr['stan_zero'] = array("stan zerowy");
|
|
|
- // $filter_arr['10-ego'] = array("termin płatności faktur, saldo na -", 'desc'=>array("10-ego", "10-ego każdego miesiąca - termin płatnosci faktur oraz saldo na minusie"));
|
|
|
- // $filter_arr['WAITING'] = array("termin płatności faktur", 'desc'=>array("10-ego", "10-ego każdego miesiąca - termin płatnosci faktur"));// z regulaminu
|
|
|
- // $filter_arr['15'] = array("mail ponaglenie", 'desc'=>array("10-ego + 5", "10-ego + 5 dni roboczych"));
|
|
|
- // $filter_arr['blokada'] = array("blokada", 'desc'=>array("pn, wt, śr około 25", "najbliższy pn, wt, śr do 25"));// najbliższy pn, wt, śr do 25-ego danego miesiąca
|
|
|
- // $filter_arr['tel1'] = array("kontakt tel.", 'desc'=>array("", "Ostatni kontakt tel. ponad 3 m-ce temu"));
|
|
|
- // $filter_arr['bad_address'] = array("błędny adres");
|
|
|
- // $filter_arr['wezwanie1'] = array("wezwanie do zapłaty", 'desc'=>array("2 x FVat", "2 faktury"));
|
|
|
- // $filter_arr['waiting-wezwanie2'] = array("oczekiwanie 7 dni od terminu płatności");
|
|
|
- // $filter_arr['wezwanie2'] = array("ostateczne wezwanie do zapłaty, rozwiązanie umowy", 'desc'=>array("wezwanie + 14", "wezwanie + 14 dni"));
|
|
|
- // $filter_arr['waiting-krd'] = array("min. 30 dni od ostatecznego wezwania");
|
|
|
- // $filter_arr['krd'] = array("do przekazania do KRD", 'desc'=>array("wezwanie ost. + 60", "wezwanie ost. + 60 dni"));
|
|
|
- // $filter_arr['waiting-sad'] = array("przekazano do KRD");
|
|
|
- // $filter_arr['docs-in-sad'] = array("przekazać sprawę do sądu");// waiting-sad = 30 dni
|
|
|
- // $filter_arr['sad'] = array("przekazano sprawę do sądu");
|
|
|
-
|
|
|
- // $filter_arr['3 m-ce przed'] = array("3 m-ce przed przedawnieniem");// 3 m-ce przed przedawnieniem
|
|
|
- // $filter_arr['po-terminie'] = array("po terminie");// 3 lata po dacie platnosci faktur
|
|
|
- // $filter_arr['has_nr_sad'] = array("nr sprawy sąd");
|
|
|
- // $filter_arr['has_nr_komornik'] = array("nr sprawy komornik");
|
|
|
- // $filter_arr['has_ustalenia'] = array("ustalenia z klientem");
|
|
|
- // $filter_arr['sad_and_komornik'] = array("sąd z komornik");
|
|
|
- // $filter_arr['sad_bez_komornik'] = array("sąd bez komornik");
|
|
|
- // $filter_arr['isMovedToVectra'] = array("przeniesieni do Vectra");
|
|
|
-
|
|
|
- // if ($filter_selected == 'po-terminie') {
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == '3 m-ce przed') {
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'tel1') {
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')";
|
|
|
- // $sql_where_and_arr[] = "( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
|
|
|
- // or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'bad_address') {
|
|
|
- // $sql_where_and_arr[] = "w.`BAD_ADDRESS`>0";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'stan_zero') {
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`>-0.05";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == '10-ego') {
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
|
|
|
- // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'has_nr_sad') {
|
|
|
- // $sql_where_and_arr[] = "w.`NR_SPRAWY_SAD`!=''";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'has_nr_komornik') {
|
|
|
- // $sql_where_and_arr[] = "w.`NR_SPRAWY_KOMORNIK`!=''";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'has_ustalenia') {
|
|
|
- // $sql_where_and_arr[] = "w.`L_APPOITMENT_INFO`!=''";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'sad_and_komornik') {
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`!=''";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'sad_bez_komornik') {
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`=''";
|
|
|
- // }
|
|
|
- // else if ($filter_selected == 'isMovedToVectra') {
|
|
|
- // $sql_where_and_arr[] = "w.`IS_MOVED_TO_VECTRA`=1";
|
|
|
- // }
|
|
|
- // else {
|
|
|
- // $sql_where_and_arr[] = "w.`A_STATUS`='{$filter_selected}'";
|
|
|
- // }
|
|
|
-
|
|
|
- 'Saldo' => $windykInfo['PAY_SALDO'],
|
|
|
- 'Termin ost. fv' => $windykInfo['PAY_DATE'], // Data wymagalności ostatniej faktury
|
|
|
- 'Zaległe faktury' => $windykInfo['PAY_FVAT'],
|
|
|
- 'Adresy usług' => $windykInfo['SERVICES_STREETS'],
|
|
|
- ];
|
|
|
-
|
|
|
- return UI::h('div', [], [
|
|
|
- UI::h('p', [ 'style' => "border-left:3px solid #ddd; padding-left:6px; font-weight:bold" ], [
|
|
|
- "Informacje o płatnościach",
|
|
|
- ($windykInfo['A_STATUS_UPDATE_DATE'] < date("Y-m-d"))
|
|
|
- ? UI::h('div', [ 'class' => "text-danger" ], [
|
|
|
- "Uwaga: Wymagają aktualizacji",
|
|
|
- " ",
|
|
|
- UI::h('em', [ 'class' => "text-muted" ], "(dane z {$windykInfo['A_STATUS_UPDATE_DATE']})"),
|
|
|
- // TODO: btn aktualizuj lub auto aktualizuj przed pokazaniem danych
|
|
|
- ])
|
|
|
- : "",
|
|
|
- ]),
|
|
|
- UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; background:#fff" ],
|
|
|
- array_map(function ($fieldName) use ($outWindykInfo) {
|
|
|
- return UI::h('tr', [], [
|
|
|
- UI::h('th', [], $fieldName),
|
|
|
- UI::h('td', [], $outWindykInfo[$fieldName]),
|
|
|
- ]);
|
|
|
- }, array_keys($outWindykInfo))
|
|
|
- ),
|
|
|
- UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; display:none; background:yellow" ],
|
|
|
- array_map(function ($fieldName) use ($windykInfo) {
|
|
|
- return UI::h('tr', [], [
|
|
|
- UI::h('th', [], $fieldName),
|
|
|
- UI::h('td', [], $windykInfo[$fieldName]),
|
|
|
- ]);
|
|
|
- }, array_keys($windykInfo))
|
|
|
- ),
|
|
|
- ]);
|
|
|
- }
|
|
|
+ function viewUserPaymentContactsHistory($idUser, $params = []) {
|
|
|
+ $markEventsFromSpotkanieNr = V::get('markEventsFromSpotkanieNr', 0, $params, 'int');
|
|
|
+
|
|
|
+ Lib::loadClass('Windykacja_StatsModel');
|
|
|
+ $billDocs = Windykacja_StatsModel::getBillDocsByDate($idUser);
|
|
|
+ // DBG::nicePrint($billDocs, '$billDocs');
|
|
|
|
|
|
- function viewHistContacts($idUser) {
|
|
|
$lastHist = DB::getPDO()->fetchAll("
|
|
|
select t.ID
|
|
|
, t.ID_BILLING_USERS
|
|
|
@@ -428,66 +263,314 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
, t.L_APPOITMENT_DATE
|
|
|
, t.L_APPOITMENT_TYPE
|
|
|
, t.L_APPOITMENT_INFO
|
|
|
+ , IF('0000-00-00 00:00:00' = t.A_RECORD_UPDATE_DATE, t.A_RECORD_CREATE_DATE, t.A_RECORD_UPDATE_DATE) as A_RECORD_UPDATE_DATE
|
|
|
from USERS2_CONTACT t
|
|
|
where t.ID_BILLING_USERS = :id
|
|
|
limit 11
|
|
|
", [ ':id' => $idUser ]);
|
|
|
+ // DBG::nicePrint($lastHist, '$lastHist');
|
|
|
+ if (!empty($lastHist)) {
|
|
|
+ foreach ($lastHist as $bill_doc) {
|
|
|
+ $billDocs->add_event(substr($bill_doc['A_RECORD_UPDATE_DATE'], 0, 10), 'HIST_CONTACT', $bill_doc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: add zmiania statusu: select h.* from Windyk_HIST where A_STATUS_INFO != 'N/S;'
|
|
|
+
|
|
|
+ $umowy_l2 = Windykacja_StatsModel::getClientUmowy($idUser);
|
|
|
+ //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billDocs ';print_r($billDocs);echo'</pre>';
|
|
|
+ //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billDocs ';print_r(reset($billDocs));echo'</pre>';
|
|
|
+ //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2 ';print_r($umowy_l2);echo'</pre>';
|
|
|
+ if (!empty($umowy_l2)) {
|
|
|
+ foreach ($umowy_l2 as $h) {
|
|
|
+ $billDocs->add_event($h['P_DEALDATE'], 'UMOWA', $h);
|
|
|
+
|
|
|
+ if ($h['P_DEALDATE_TERM'] != '0000-00-00') {// < date('Y-m-d')) {
|
|
|
+ $billDocs->add_event($h['P_DEALDATE_TERM'], 'KONIEC UMOWY', $h);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $user_hist_events = Windykacja_StatsHelper::getUserHistStatusEvents($idUser);
|
|
|
+ if (!empty($user_hist_events)) {
|
|
|
+ foreach ($user_hist_events as $bill_doc) {
|
|
|
+ $billDocs->add_event($bill_doc['A_STATUS_UPDATE_DATE'], 'HIST_STATUS', $bill_doc);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- UI::table([ 'caption' => "Historia kontaktów z klientem (TODO: w trakcie prac. Zobacz " .
|
|
|
- UI::h('a', [ 'href' => "index.php?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=&_f=&_user_id={$idUser}" ], "Panel windykacji") .
|
|
|
- ")", 'rows' => $lastHist ]);
|
|
|
+ $user_hist_events = Windykacja_StatsHelper::getUserHistPhoneEvents($idUser);
|
|
|
+ if (!empty($user_hist_events)) {
|
|
|
+ foreach ($user_hist_events as $bill_doc) {
|
|
|
+ $billDocs->add_event(substr($bill_doc['A_RECORD_UPDATE_DATE'], 0, 10), 'HIST_PHONE', $bill_doc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $user_hist_events = Windykacja_StatsHelper::getUserBadAddressEvents($user->ID);
|
|
|
+ if (!empty($user_hist_events)) {
|
|
|
+ foreach ($user_hist_events as $bill_doc) {
|
|
|
+ $billDocs->add_event(substr($bill_doc['A_RECORD_UPDATE_DATE'], 0, 10), 'HIST_BAD_ADDRESS', $bill_doc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // add today
|
|
|
+ $bill_doc = array();
|
|
|
+ $bill_doc['saldo'] = $billDocs->get_saldo();
|
|
|
+ $billDocs->add_event(date('Y-m-d'), 'TODAY', $bill_doc);
|
|
|
+
|
|
|
+ $billDocs->sort_docs();
|
|
|
+ $billDocs->set_saldo_for_all_docs();
|
|
|
+
|
|
|
+ $listBillDocs = $billDocs->get_docs(); // [ day => [ Windykacja_EventDoc, ... ], ... ]
|
|
|
+ // convert to: [ year => [ Windykacja_EventDoc, ... ] ]
|
|
|
+ $groupedByYearBillDocs = array_reduce($listBillDocs, function ($ret, $listDayEvents) {
|
|
|
+ foreach ($listDayEvents as $event) {
|
|
|
+ $year = substr($event->get_date(), 0, 4);
|
|
|
+ if (empty($ret[$year])) $ret[$year] = [];
|
|
|
+ array_unshift($ret[$year], $event);
|
|
|
+ }
|
|
|
+ return $ret;
|
|
|
+ }, []);
|
|
|
+ $groupedByYearBillDocs = array_reverse($groupedByYearBillDocs, true);
|
|
|
+
|
|
|
+ // DBG::nicePrint($listBillDocs, '$listBillDocs');
|
|
|
+ // DBG::nicePrint($groupedByYearBillDocs, '$groupedByYearBillDocs');
|
|
|
+
|
|
|
+ // UI::table([ 'caption' => "Historia kontaktów z klientem (TODO: w trakcie prac. Zobacz " .
|
|
|
+ // UI::h('a', [ 'href' => "index.php?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=&_f=&_user_id={$idUser}" ], "Panel windykacji") .
|
|
|
+ // ")", 'rows' => $lastHist ]);
|
|
|
// if (count($lastHist) > 10) UI::alert('info', "Przeglądaj wszystkie wpisy TODO: link to view table with ff_ID_BILLING_USERS");
|
|
|
- }
|
|
|
+ echo UI::h('div', [], array_merge(
|
|
|
+ [
|
|
|
+ UI::h('h3', [], "Historia klienta"),
|
|
|
+ ],
|
|
|
+ array_map(function ($listEventDocs, $year) use ($markEventsFromSpotkanieNr) {
|
|
|
+ return UI::h('details', array_merge([ 'style' => "margin:8px 0" ],
|
|
|
+ (date("Y") == $year) ? [ 'open' => "" ] : []
|
|
|
+ ), [
|
|
|
+ UI::h('summary', [ 'style' => "height:20px; position:relative; cursor:pointer; outline:none" ], [
|
|
|
+ UI::h('div', [ 'style' => "position:absolute; top:9px; left:20px; width: 100%; border-bottom:2px solid #000" ]),
|
|
|
+ UI::h('span', [ 'style' => "position:absolute; top:0; left:12px; padding:0 12px 0 0; line-height:20px; background-color:#fff; font-weight:bold" ], [
|
|
|
+ "{$year}:",
|
|
|
+ ]),
|
|
|
+ ]),
|
|
|
+ UI::h('div', [ 'style' => "padding: 8px 0px 8px 54px" ],
|
|
|
+ array_merge(
|
|
|
+ [
|
|
|
+ UI::hTable([
|
|
|
+ 'disable_lp' => true,
|
|
|
+ '@class' => 'table table-hover', // table-bordered
|
|
|
+ 'cols' => [
|
|
|
+ 'data',
|
|
|
+ 'winien',
|
|
|
+ 'ma',
|
|
|
+ 'saldo',
|
|
|
+ '#',
|
|
|
+ 'uwagi',
|
|
|
+ ],
|
|
|
+ '@style[data]' => "width:80px; text-align:right",
|
|
|
+ '@style[winien]' => "width:90px; text-align:right",
|
|
|
+ '@style[ma]' => "width:90px; text-align:right",
|
|
|
+ '@style[saldo]' => "width:90px; text-align:right; background-color:#f5f5f5",
|
|
|
+ '@style[#]' => "width:140px; padding-left:12px; text-align:left",
|
|
|
+ 'rows' => array_map(function ($eventDoc) use ($markEventsFromSpotkanieNr) {
|
|
|
+ $saldo = $eventDoc->get_saldo();
|
|
|
+ $overallSaldo = $eventDoc->get_saldo_overall();
|
|
|
+ $rowClass = "";
|
|
|
+ // $markEventsFromSpotkanieNr
|
|
|
+ if ($markEventsFromSpotkanieNr
|
|
|
+ && $eventDoc->get_class() == 'EVENT' && $eventDoc->get_type() == 'HIST_CONTACT'
|
|
|
+ && $eventDoc->get('ID') == $markEventsFromSpotkanieNr
|
|
|
+ ) {
|
|
|
+ $rowClass = "info";
|
|
|
+ } else {
|
|
|
+ $rowClass = ('EVENT' === $eventDoc->get_class() && 'TODAY' === $eventDoc->get_type()) ? "warning" : "";
|
|
|
+ }
|
|
|
|
|
|
- function getUserInfo($idUser) {
|
|
|
- return DB::getPDO()->fetchFirst("
|
|
|
- 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`
|
|
|
- , ( select bo.name1 from BILLING_OWNER bo where bo.ID = bu.BILLING_OWNER ) as BILLING_OWNER_NAME
|
|
|
- from `BILLING_USERS_ADD` as bua
|
|
|
- left join `BILLING_USERS` as bu on ( bu.`ID` = bua.`id_users` )
|
|
|
- where bua.`id_users` = :id_user
|
|
|
- ", [ ':id_user' => $idUser ]);
|
|
|
+ return [
|
|
|
+ 'data' => $eventDoc->get_date(),
|
|
|
+ 'winien' => UI::h('span', [
|
|
|
+ 'style' => "color:" . ( (-1 * $saldo > 0) ? "#000" : "#ddd" ),
|
|
|
+ ], ($saldo < 0) ? UI::price(-1 * $saldo) : 0
|
|
|
+ ),
|
|
|
+ 'ma' => UI::h('span', [
|
|
|
+ 'style' => "color:" . ( ($saldo > 0) ? "#000" : "#ddd" ),
|
|
|
+ ], ($saldo > 0) ? UI::price($saldo) : 0
|
|
|
+ ),
|
|
|
+ 'saldo' => UI::h('span', [
|
|
|
+ 'style' => "color:" . ( ($overallSaldo >= 0) ? "green" : "red" ),
|
|
|
+ ], UI::price($overallSaldo)
|
|
|
+ ),
|
|
|
+ '#' => $this->viewUserPaymentContactsHistory_eventNr($eventDoc),
|
|
|
+ 'uwagi' => $this->viewUserPaymentContactsHistory_eventLabel($eventDoc),
|
|
|
+ '@class' => $rowClass,
|
|
|
+ '@style[data]' => "text-align:right",
|
|
|
+ '@style[winien]' => "text-align:right",
|
|
|
+ '@style[ma]' => "text-align:right",
|
|
|
+ '@style[saldo]' => "text-align:right; background-color:#f5f5f5",
|
|
|
+ '@style[#]' => "padding-left:12px",
|
|
|
+ ];
|
|
|
+ }, $listEventDocs),
|
|
|
+ ]),
|
|
|
+ ],
|
|
|
+ []
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ ]);
|
|
|
+ }, $groupedByYearBillDocs, array_keys($groupedByYearBillDocs))
|
|
|
+ ));
|
|
|
}
|
|
|
- function getWindykacjaInfo($idUser) {
|
|
|
- if ($this->_windykInfo) return $this->_windykInfo;
|
|
|
+ function viewUserPaymentContactsHistory_eventNr($v_doc) { // return html (string)
|
|
|
+ /* links fomr l1:
|
|
|
+ * FV: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura&adm=edit&uid=4014&fpos=&dz=&close=0&doc=799413&doctype=1
|
|
|
+ * KOR: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura_korekta&adm=edit&uid=4014&fpos=&dz=&close=0&doc=809557&doctype=3
|
|
|
+ * https://biuro.biall-net.pl/dev-pl/se-master/index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=809557
|
|
|
+ */
|
|
|
+ if ($v_doc->get_class() == 'BILLING' && 'FVAT' == $v_doc->get_type()) {
|
|
|
+ $nr = $v_doc->get_type();
|
|
|
+ Lib::loadClass('Windykacja_StatsModel');
|
|
|
+ $type_desc = Windykacja_StatsModel::get_billing_type_desc($v_doc->get_type());
|
|
|
+ if ($type_desc) {
|
|
|
+ $type_desc .= "\n Wystawiona: ".$v_doc->get('BILL_DATE')."\n Termin płatności: ".$v_doc->get('PAYMENT_TERM');
|
|
|
+ $nr = '<span title="'.$type_desc.'">'.$nr.'</span>';
|
|
|
+ // TODO: podglad faktury
|
|
|
+ //if ($h['type'] == 'FVAT') $nr .= ' <a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&_user_id=".$user->ID."&task=view_faktura&id=".$h['ID'].'" target="_blank">'.'<img src="'."icon/search.png".'" alt="'."U".'" title="'."Podgląd faktury".'" />'.'</a>';
|
|
|
+ }
|
|
|
+ $docNr = $v_doc->get('nr');
|
|
|
+ $docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
|
|
|
+ $nr .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $docNr . '" target="_blank">'."({$docNrLabel})".'</a>';
|
|
|
|
|
|
- $this->_windykInfo = $this->fetchWindykacjaInfo($idUser);
|
|
|
- if ($this->_windykInfo['A_STATUS_UPDATE_DATE'] < date("Y-m-d")) {
|
|
|
+ return $nr;
|
|
|
+ }
|
|
|
+ if ($v_doc->get_class() == 'BILLING' && 'KORV' == $v_doc->get_type()) {
|
|
|
+ $nr = $v_doc->get_type();
|
|
|
+ Lib::loadClass('Windykacja_StatsModel');
|
|
|
+ $type_desc = Windykacja_StatsModel::get_billing_type_desc($v_doc->get_type());
|
|
|
+ if ($type_desc) {
|
|
|
+ $nr = '<span title="'.$type_desc.'">'.$nr.'</span>';
|
|
|
+ }
|
|
|
+ $docNr = $v_doc->get('nr');
|
|
|
+ $docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
|
|
|
+ $remoteFvNum = $v_doc->get('FV_NUMBER');
|
|
|
+ $korNr = $v_doc->get('ID_BILLING_NUMBERS');
|
|
|
+ $korTitle = "Korekta dotycząca faktury nr: {$remoteFvNum}";
|
|
|
+ $nr .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $korNr . '" target="_blank" title="'.$korTitle.'">'."({$docNrLabel})".'</a>';
|
|
|
+
|
|
|
+ return $nr;
|
|
|
+ }
|
|
|
+ if ($v_doc->get_class() == 'BILLING') {
|
|
|
+ $nr = $v_doc->get_type();
|
|
|
Lib::loadClass('Windykacja_StatsModel');
|
|
|
- Lib::loadClass('Windykacja_StatsHelper');
|
|
|
- $user = Windykacja_StatsModel::get_user_by_id($idUser);
|
|
|
- if ($user) {
|
|
|
- $billing_docs = Windykacja_StatsModel::get_bill_dosc_by_date($user);
|
|
|
- Windykacja_StatsHelper::update_stats($user, $billing_docs);
|
|
|
+ $type_desc = Windykacja_StatsModel::get_billing_type_desc($v_doc->get_type());
|
|
|
+ if ($type_desc) {
|
|
|
+ $nr = '<span title="'.$type_desc.'">'.$nr.'</span>';
|
|
|
}
|
|
|
- $this->_windykInfo = $this->fetchWindykacjaInfo($idUser);
|
|
|
+ $docNr = $v_doc->get('nr');
|
|
|
+ $docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
|
|
|
+
|
|
|
+ return $nr;
|
|
|
}
|
|
|
- return $this->_windykInfo;
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'TODAY') return "";
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_STATUS') return "";
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_PHONE') return "";
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_BAD_ADDRESS') return "";
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_CONTACT') return "Spotkanie " . UI::h('a', [
|
|
|
+ 'href' => "index.php?_route=ViewTableAjax&namespace=default_db/USERS2_CONTACT#EDIT/" . $v_doc->get('ID'),
|
|
|
+ 'target' => "_blank",
|
|
|
+ 'title' => "Notatka ze spotkania",
|
|
|
+ ], "(" . $v_doc->get('ID') . ")");
|
|
|
+ if ($v_doc->get_class() == 'EVENT') return UI::h('span', [ 'title' => $v_doc->get('ID') ], $v_doc->get_type()); // TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
|
|
|
+
|
|
|
+ return "???";
|
|
|
}
|
|
|
- function fetchWindykacjaInfo($idUser) {
|
|
|
- return DB::getPDO()->fetchFirst("
|
|
|
- select t.`ID`
|
|
|
- , t.A_STATUS
|
|
|
- , t.A_STATUS_INFO
|
|
|
- , t.*
|
|
|
- from `USERS2_WINDYKACJA_STATUS` as t
|
|
|
- where t.`ID_BILLING_USERS` = :id_user
|
|
|
- ", [ ':id_user' => $idUser ]);
|
|
|
+ function viewUserPaymentContactsHistory_eventLabel($v_doc) { // return html (string)
|
|
|
+ if ($v_doc->get_class() == 'BILLING') return '';
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'TODAY') return '';
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_STATUS') {
|
|
|
+ $id_koresp = intval($v_doc->get('ID_KORESP'));
|
|
|
+ $add = '';
|
|
|
+ if ($id_koresp > 0) {
|
|
|
+ $koresp_edit_link = "index.php?_route=ViewTableAjax&namespace=default_db/IN7_DZIENNIK_KORESP#EDIT/{$id_koresp}";
|
|
|
+ $add = " " . '<a href="' . $koresp_edit_link . '" title="' . "Edycja KORESP. ({$id_koresp})" . '" target="_blank">' . "KOR" . '</a>';
|
|
|
+ }
|
|
|
+ switch ($v_doc->get('A_STATUS')) {
|
|
|
+ case 'WAITING': return "powrót do oczekujących {$add}";
|
|
|
+ case 'waiting-wezwanie2':return "wezwanie do zapłaty (Nr koresp.: ".$v_doc->get('ID_KORESP').") <em>(termin: ".$v_doc->get('PAY_TERM').")</em> {$add}";
|
|
|
+ case 'waiting-krd': return "wezwanie do zapłaty ost. (Nr koresp.: ".$v_doc->get('ID_KORESP').") <em>(termin: ".$v_doc->get('PAY_TERM').")</em> {$add}";
|
|
|
+ case 'N/S;': return "Nr koresp.: ".$v_doc->get('ID_KORESP')." <em>(" . $v_doc->get('K_ZAWARTOS') . ")</em>" .
|
|
|
+ (
|
|
|
+ ($v_doc->get('ID_KORESP') > 0 && substr($v_doc->get('params'), 0, strlen('rozwiazanie umowy')) == 'rozwiazanie umowy')
|
|
|
+ ? " " . '<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."bok_rozwiazanie_umowy_print"."&user_id={$user->ID}&id_koresp=".$v_doc->get('ID_KORESP').'" target="_blank" title="' . "Generuj druk rozwiązania umowy" . '">' . "druk" . '</a>'
|
|
|
+ : ""
|
|
|
+ ) . " {$add}"
|
|
|
+ ;
|
|
|
+ // TODO: get opis from koresp
|
|
|
+ //echo '('.$v_doc->get('ID_KORESP').', '.$v_doc->get('K_ZAWARTOS').'='.substr($v_doc->get('K_ZAWARTOS'), 0, strlen('rozwiazanie umowy')).')';
|
|
|
+ default: return "zmiana statusu na: " . $v_doc->get('A_STATUS') . " ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_PHONE') {
|
|
|
+ $lastUpdateDate = $v_doc->get('A_RECORD_UPDATE_DATE');
|
|
|
+
|
|
|
+ $lastPhoneStatus = ('N/S;' === $v_doc->get('LAST_PHONE_STATUS')) ? '' : $v_doc->get('LAST_PHONE_STATUS');
|
|
|
+ if (!empty($lastPhoneStatus)) {
|
|
|
+ $date = $v_doc->get('PAY_TERM');
|
|
|
+ if ($date == 'N/S;') $date = '';
|
|
|
+ switch ($lastPhoneStatus) {
|
|
|
+ case 'nie_zaplaci': return "nie zapłaci";
|
|
|
+ case 'zaplaci_w_terminie': return "zapłaci w terminie {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
|
|
|
+ case 'zaplaci_za_1mc': return "zapłaci miesiąc później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
|
|
|
+ case 'zaplaci_za_2mc': return "zapłaci 2 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
|
|
|
+ case 'zaplaci_za_3mc': return "zapłaci 3 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
|
|
|
+ default: return "kontakt z klientem: {$lastPhoneStatus} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $lastSmsStatus = $v_doc->get('LAST_SMS_STATUS');
|
|
|
+ if ($lastSmsStatus == 'N/S;') $lastSmsStatus = '';
|
|
|
+ if (!empty($lastSmsStatus)) {
|
|
|
+ $lastSmsId = $v_doc->get('LAST_SMS_MSG_ID');
|
|
|
+ return "SMS: {$lastSmsStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastSmsId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
|
|
|
+ }
|
|
|
+
|
|
|
+ $lastMailStatus = $v_doc->get('LAST_MAIL_STATUS');
|
|
|
+ if ($lastMailStatus == 'N/S;') $lastMailStatus = '';
|
|
|
+ if (!empty($lastMailStatus)) {
|
|
|
+ $lastMailId = $v_doc->get('LAST_MAIL_MSG_ID');
|
|
|
+ return "MAIL: {$lastMailStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastMailId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_BAD_ADDRESS') {
|
|
|
+ $koresp_edit_link = "index.php?_route=ViewTableAjax&namespace=default_db/IN7_DZIENNIK_KORESP#EDIT/";
|
|
|
+ $add = ($v_doc->get('ID_KORESP') > 0)
|
|
|
+ ? " - ID Koresp. (" . '<a href="' . $koresp_edit_link . $v_doc->get('ID_KORESP') . '" target="_blank">' . $v_doc->get('ID_KORESP') . '</a>' . ")"
|
|
|
+ : ""
|
|
|
+ ;
|
|
|
+
|
|
|
+ return ($v_doc->get('BAD_ADDRESS'))
|
|
|
+ ? "błędny adres zameldowania {$add}"
|
|
|
+ : "poprawa adresu zameldowania {$add}"
|
|
|
+ ;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'UMOWA') {
|
|
|
+ return "umowa nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(termin ".$v_doc->get('P_DEALDATE_TERM').")</em>";
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'KONIEC UMOWY') {
|
|
|
+ return "zakończenie umowy nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(z dnia ".$v_doc->get('P_DEALDATE').")</em>";
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($v_doc->get_class() == 'EVENT' && $v_doc->get_type() == 'HIST_CONTACT') {
|
|
|
+ return implode(" ", [
|
|
|
+ $v_doc->get('L_APPOITMENT_TYPE'),
|
|
|
+ $v_doc->get('L_APPOITMENT_INFO'),
|
|
|
+ UI::h('em', [], "(" . $v_doc->get('L_APPOITMENT_USER') . ")"),
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return "...";
|
|
|
+
|
|
|
}
|
|
|
|
|
|
function prepareTable() {
|
|
|
@@ -560,4 +643,42 @@ class Route_UrlAction_UserContact extends RouteBase {
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
");
|
|
|
}
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+insert into USERS2_CONTACT (
|
|
|
+ A_RECORD_CREATE_DATE,
|
|
|
+ A_RECORD_CREATE_AUTHOR,
|
|
|
+ ID_BILLING_USERS,
|
|
|
+ CLIENT_INFO,
|
|
|
+ L_APPOITMENT_TYPE,
|
|
|
+ L_APPOITMENT_DATE,
|
|
|
+ L_APPOITMENT_USER,
|
|
|
+ L_APPOITMENT_INFO
|
|
|
+)
|
|
|
+select
|
|
|
+ h.A_RECORD_UPDATE_DATE as A_RECORD_CREATE_DATE,
|
|
|
+ h.A_RECORD_UPDATE_AUTHOR as A_RECORD_CREATE_AUTHOR,
|
|
|
+ ( select w.ID_BILLING_USERS from USERS2_WINDYKACJA_STATUS w where w.ID = h.ID_USERS2 ) as ID_BILLING_USERS,
|
|
|
+ '' as CLIENT_INFO,
|
|
|
+ 'TEL' as L_APPOITMENT_TYPE,
|
|
|
+ IF('N/S;' = h.L_APPOITMENT_DATE and h.LAST_PHONE_STATUS_DATE != 'N/S;', h.LAST_PHONE_STATUS_DATE, h.L_APPOITMENT_DATE) as L_APPOITMENT_DATE,
|
|
|
+ IF('N/S;' = h.L_APPOITMENT_DATE and h.LAST_PHONE_STATUS_DATE != 'N/S;', h.A_RECORD_UPDATE_AUTHOR, h.L_APPOITMENT_USER) as L_APPOITMENT_USER,
|
|
|
+ IF('N/S;' = h.L_APPOITMENT_DATE and h.LAST_PHONE_STATUS_DATE != 'N/S;', h.LAST_PHONE_STATUS, h.L_APPOITMENT_INFO) as L_APPOITMENT_INFO
|
|
|
+
|
|
|
+-- , '===' as X, h.*
|
|
|
+
|
|
|
+from USERS2_WINDYKACJA_STATUS_HIST h
|
|
|
+where
|
|
|
+ h.A_RECORD_UPDATE_DATE like '2019-08-%'
|
|
|
+ and h.A_RECORD_UPDATE_AUTHOR not like '%update%'
|
|
|
+
|
|
|
+
|
|
|
+select sum(ILE_ODZYSKANO) from USERS2_CONTACT;
|
|
|
+
|
|
|
+
|
|
|
+select count(DISTINCT ID_BILLING_USERS) from USERS2_CONTACT;
|
|
|
+
|
|
|
+
|
|
|
+select ID_BILLING_USERS, count(*) as cnt from USERS2_CONTACT group by ID_BILLING_USERS;
|
|
|
+*/
|