|
|
@@ -3325,6 +3325,10 @@ class Column_Base {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function setForce($field, $value) {
|
|
|
+ $this->_data[$field] = $value;
|
|
|
+ }
|
|
|
+
|
|
|
function get_cols() {
|
|
|
return array_keys($this->_data);
|
|
|
}
|
|
|
@@ -6442,6 +6446,11 @@ class Column_users2_offers_groups extends Column_Base {
|
|
|
return $zysk * $months - $this->suma_P_OFFER_COSTS_START;
|
|
|
}
|
|
|
|
|
|
+ function get_srednia_netto() {
|
|
|
+ $this->recount_costs();
|
|
|
+ return $this->suma_P_OFFER_SREDNIA_NETTO;
|
|
|
+ }
|
|
|
+
|
|
|
function has_service($p_service) {
|
|
|
foreach ($this->_group_external_offers_id as $k_external_id => $v_p_service) {
|
|
|
if ($v_p_service == $p_service) {
|
|
|
@@ -7090,6 +7099,7 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
$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);
|
|
|
@@ -7134,7 +7144,9 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
.tbl-view-small {font-size:small}
|
|
|
.tbl-view-small th {font-size:small}
|
|
|
.tbl-view thead th {background-color:#eee;}
|
|
|
+.tbl-view tfoot td {background-color:#eee;}
|
|
|
.tbl-view tr:nth-child(even) td {background-color:#eee;}
|
|
|
+.tbl-view-small td {padding:0 2px;}
|
|
|
|
|
|
.tbl_deals { table-layout:fixed; width:100%; }
|
|
|
.tbl_deals td,
|
|
|
@@ -7231,8 +7243,10 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
$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 = -1 * $v_deal_row->zysk;
|
|
|
+ $v_deal_row->zysk_total = $v_deal_row->zysk * -1;
|
|
|
+ $v_deal_row->abonament_srednia_netto = $group->get_srednia_netto();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -7245,6 +7259,7 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
if ($group) {
|
|
|
$group->fetch_offers();
|
|
|
$v_deal_row->zysk = $group->get_zysk_netto();
|
|
|
+ $v_deal_row->abonament_srednia_netto = $group->get_srednia_netto();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -7300,18 +7315,18 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- 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" . '"';
|
|
|
+ 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;
|
|
|
+ $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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -7386,20 +7401,147 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($dealsOut);echo'</pre>';}
|
|
|
+ $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->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;
|
|
|
+ }
|
|
|
+
|
|
|
+ $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'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">group for deal('.$r->ID.') ID_OFFERS_OFF('.$r->ID_OFFERS_OFF.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($group);echo'</pre>';}
|
|
|
+ $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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
?>
|
|
|
<h3>Podsumowanie:</h3>
|
|
|
- <table cellspacing="0" cellpadding="0" border="1" class="tbl-view tbl-view-small">
|
|
|
- <thead>
|
|
|
- <th>RODZAJ_DZIALANIA_HANDLOWEGO</th>
|
|
|
- <th>ilość</th>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
- <?php foreach ($statsType as $type => $vStat) : ?>
|
|
|
+ <table cellspacing="0" cellpadding="0" border="0">
|
|
|
<tr>
|
|
|
- <td><?php echo $type; ?></td><td><?php echo $vStat->ilosc; ?></td>
|
|
|
+ <td style="vertical-align:top">
|
|
|
+ <table cellspacing="0" cellpadding="0" border="1" class="tbl-view tbl-view-small">
|
|
|
+ <thead>
|
|
|
+ <th>RODZAJ_DZIALANIA_HANDLOWEGO</th>
|
|
|
+ <th>ilość</th>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <?php foreach ($statsType as $type => $vStat) : ?>
|
|
|
+ <tr>
|
|
|
+ <td><?php echo $type; ?></td><td><?php echo $vStat->ilosc; ?></td>
|
|
|
+ </tr>
|
|
|
+ <?php endforeach; ?>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ </td>
|
|
|
+ <td style="vertical-align:top;padding-left:20px;">
|
|
|
+ <table cellspacing="0" cellpadding="0" border="1" class="tbl-view tbl-view-small">
|
|
|
+ <thead>
|
|
|
+ <th>Wykryty rodzaj umowy</th>
|
|
|
+ <th>ilość</th>
|
|
|
+ <th class="tbl_deals-col_num" title="Zysk całkowity: Zysk * Mies. - Aneks Strata">Zysk</th>
|
|
|
+ <th class="tbl_deals-col_num" title="Średni miesięczny abonament netto">Śr. abonament</th>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <?php foreach ($statsByFoundType as $type => $vStat) : ?>
|
|
|
+ <tr>
|
|
|
+ <td><?php echo $type; ?></td>
|
|
|
+ <td><?php echo $vStat->ilosc; ?></td>
|
|
|
+ <td><?php echo number_format($vStat->zysk_total, 2, ',', ''); ?></td>
|
|
|
+ <td><?php echo number_format($vStat->abonament_srednia_netto, 2, ',', ''); ?></td>
|
|
|
+ </tr>
|
|
|
+ <?php endforeach; ?>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ <?php if (!empty($errosNoGroupIDInOldDeal)) : ?>
|
|
|
+ <h4 style="color:red">Błędy w umowach (<?php echo count($errosNoGroupIDInOldDeal); ?>):</h4>
|
|
|
+ <table cellspacing="0" cellpadding="0" border="1" class="tbl-view tbl-view-small">
|
|
|
+ <thead>
|
|
|
+ <th title="Numer umowy">Nr</th>
|
|
|
+ <th title="Numer klienta">Klient</th>
|
|
|
+ <th title="Wykryty rodzaj umowy">Typ</th>
|
|
|
+ <th title="Numery ofert do wyłączenia">ID_OFFERS_OFF</th>
|
|
|
+ <th title="Średni miesięczny zysk netto na podstawie numerów ofert do wyłączenia">Śr. zysk</th>
|
|
|
+ <th title="Średni miesięczny abonament netto na podstawie numerów ofert do wyłączenia">Śr. abonament</th>
|
|
|
+ </thead>
|
|
|
+ <tfoot>
|
|
|
+ <td style="text-align:right" colspan="4">Suma:</td>
|
|
|
+ <td><?php echo $sumaSrZyskZoff; ?></td>
|
|
|
+ <td><?php echo $sumaSrAboZoff; ?></td>
|
|
|
+ </tfoot>
|
|
|
+ <tbody>
|
|
|
+ <?php foreach ($errosNoGroupIDInOldDeal as $deal) : ?>
|
|
|
+ <tr>
|
|
|
+ <td style="padding:0 3px;"><?php echo $deal->ID; ?></td>
|
|
|
+ <td style="padding:0 3px;"><?php echo $deal->ID_BILLING_USERS; ?></td>
|
|
|
+ <td style="padding:0 3px;"><?php echo $deal->deal_type; ?></td>
|
|
|
+ <td style="padding:0 3px;"><?php echo $deal->ID_OFFERS_OFF; ?></td>
|
|
|
+ <td style="padding:0 3px;">
|
|
|
+ <?php if (!$deal->zysk_total) : ?>
|
|
|
+ <b style="color:red">Brak</b>
|
|
|
+ <?php else : ?>
|
|
|
+ <?php echo number_format($deal->zysk_total, 2, ',', ''); ?>
|
|
|
+ <?php endif; ?>
|
|
|
+ </td>
|
|
|
+ <td style="padding:0 3px;">
|
|
|
+ <?php if (!$deal->abonament_srednia_netto_prze_1mies) : ?>
|
|
|
+ <b style="color:red">Brak</b>
|
|
|
+ <?php else : ?>
|
|
|
+ <?php echo number_format($deal->abonament_srednia_netto_prze_1mies, 2, ',', ''); ?>
|
|
|
+ <?php endif; ?>
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ <?php endforeach; ?>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ <?php endif; ?>
|
|
|
+
|
|
|
+ <?php if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($errosNoGroupIDInOldDeal);echo'</pre>';} ?>
|
|
|
+ </td>
|
|
|
</tr>
|
|
|
- <?php endforeach; ?>
|
|
|
- </tbody>
|
|
|
</table>
|
|
|
<?php
|
|
|
}
|