Преглед изворни кода

Pokaz oferty Rozliczenie miesiąca - dodanie rezygnacji i innych typów umów wprowadzonych w danym miesiącu

Piotr Labudda пре 11 година
родитељ
комит
d41612d5ca
1 измењених фајлова са 220 додато и 53 уклоњено
  1. 220 53
      SE/superedit-POKAZ_OFERTY_AKTUALNE_FUNC.php

+ 220 - 53
SE/superedit-POKAZ_OFERTY_AKTUALNE_FUNC.php

@@ -2996,6 +2996,48 @@ class PokazOfertyHelper {
 		return $deals;
 	}
 
+	function get_deals_created_in_month($month, $params = array()) {
+		$deals = array();
+
+		$sql_status = "";
+		$sql_pominId = "";
+
+		$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) . ")";
+			}
+		}
+		$pominId = V::get('pominId', '', $params);
+		if (!empty($pominId)) {
+			$sql_pominId = "and `ID` not in(" . implode(",", $pominId) . ")";
+		}
+
+		$db = DB::getDB();
+		$sql = "select d.*
+			from `DEALS_TABLE` as d
+			where
+				d.`A_RECORD_CREATE_DATE` like '{$month}-%'
+				{$sql_status}
+				{$sql_pominId}
+		";
+		$res = $db->query($sql);
+		while ($r = $db->fetch($res)) {
+			$deals[$r->ID] = $r;
+		}
+		return $deals;
+	}
+
 }
 
 class Column_Base {
@@ -6826,35 +6868,70 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
 .tbl-view-small th {font-size:small}
 .tbl-view thead th {background-color:#eee;}
 .tbl-view tr:nth-child(even) td {background-color:#eee;}
+
+.tbl_deals { table-layout:fixed; width:100%; }
+ .tbl_deals td,
+ .tbl_deals th { font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
+ .tbl_deals .tbl_deals-col_offers { width:80px; color:#999; }
+ .tbl_deals .tbl_deals-col_num { width:40px; }
+ .tbl_deals .tbl_deals-col_date { width:60px; }
+ .tbl_deals .tbl_deals-col_street { width:100px; }
+ .tbl_deals .tbl_deals-col_prefix { width:80px; }
+ .tbl_deals .tbl_deals-col_dzialanie { width:150px; }
+ .tbl_deals .tbl_deals-col_opis { width:auto; }
+ .tbl_deals .tbl_deals-col_deal_type { width:auto; }
+
+  .tbl_deals .tbl_deals-col_dzialanie-BRAK-BOK { color:silver; }
+  .tbl_deals .tbl_deals-col_dzialanie-TELEMARKETING { color:lightgreen; }
+  .tbl_deals .tbl_deals-col_dzialanie-UMOWA-W-BOK-ZWYCZAJNA { color:lightgreen; }
+  .tbl_deals .tbl_deals-col_dzialanie-UMOWA_BEZPOSREDNIA { color:green; }
+  .tbl_deals .tbl_deals-col_dzialanie-UMOWA_POSREDNIA { color:lightgreen; }
+  .tbl_deals .tbl_deals-col_dzialanie-WYPOWIEDZENIE-PRZEZ-OPERATORA-ZA-DLUGI { color:red; }
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-CESJA,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-INNE,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-NIEZADOWOLENIE,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-PROBLEMY-TECHNICZNE,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-SLABA-OFERTA,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-WYPROWADZKA,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-ZLA-OBSLUGA-BOK,
+  .tbl_deals .tbl_deals-col_dzialanie-REZYGNACJA-ZMIANA-OPERATORA { color:red; }
+
 	" . '</style>';
 
+	$tblOutCells = array();
+	$tblOutCells['ID'] = 								(object)array('class'=>'num', 'type'=>'link', 'link_format'=>'<a href="index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=895#EDIT/{ID}" target="_blank" title="Edytuj rekord {ID}">{ID}</a>');
+	$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['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'=>'<a href="index.php?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC&task=verify_deal&id_deal={ID}" target="_blank" title="verify deal {ID}">verify</a>');
+	$tblOutCells['check_errors'] = 			(object)array('class'=>'num', 'type'=>'array_of_errors');
+
 	if(V::get('DBG_PO', '', $_GET)>0){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">deals (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deals);echo'</pre>';}
-	echo '<table cellspacing="0" cellpadding="0" border="1" class="tbl-view tbl-view-small">';
-	echo '<thead>';
-		echo '<tr>';
-			echo '<th>' . "ID" . '</th>';
-			echo '<th>' . "P DEALDATE" . '</th>';
-			echo '<th>' . "ID BILLING USERS" . '</th>';
-			echo '<th>' . "S ADDRESS STREET" . '</th>';
-			echo '<th>' . "P DEALPREFIX" . '</th>';
-			echo '<th>' . "P DEALNUMBER OLD" . '</th>';
-			echo '<th>' . "ID OFFERS GROUP" . '</th>';
-			echo '<th title="ID ofert do włączenia">' . "ID OFFERS ON" . '</th>';
-			echo '<th title="ID ofert do wyłączenia">' . "ID OFFERS OFF" . '</th>';
-			echo '<th>' . "RODZAJ DZIALANIA HANDLOWEGO" . '</th>';
-			echo '<th>' . "DEALDESC" . '</th>';
-			echo '<th>' . "Wykryty rodzaj dokumentu" . '</th>';
-			echo '<th title="Średni miesięczny zysk netto">' . "Zysk" . '</th>';
-			echo '<th title="Ilość miesięcy obowiązywania umowy">' . "Mies." . '</th>';
-			echo '<th title="Ilość miesięcy obowiązywania poprzedniej umowy">' . "Aneks Mies." . '</th>';
-			echo '<th title="Strata w zysku związana z okresem obowiązywania poprzedniej umowy">' . "Aneks Strata" . '</th>';
-			echo '<th title="Zysk całkowity: Zysk * Mies. - Aneks Strata">' . "Zysk" . '</th>';
-		echo '</tr>';
-	echo '</thead>';
-	foreach ($deals as $k_id => $v_deal_row) {
+	$dealsAll = PokazOfertyHelper::get_deals_created_in_month($month, array('A_STATUS'=>'NORMAL', 'pominId'=>array_keys($deals)));
+	if(V::get('DBG_PO', '', $_GET)>0){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">dealsAll (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($dealsAll);echo'</pre>';}
+
+	$dealsOut = array();
+	foreach ($deals as $k_id => $v_deal_row)    $dealsOut[$k_id] = $v_deal_row;
+	foreach ($dealsAll 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;
@@ -6863,8 +6940,38 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
 		$v_deal_row->check_errors = array();
 
 		$out_html_attr = array();
-		$deal_type = $deal->get_type();
-		if ($deal_type) {
+		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();
+							$v_deal_row->zysk = $group->get_zysk_netto();
+							$v_deal_row->zysk_total = -1 * $v_deal_row->zysk;
+						}
+					}
+				}
+			}
+		}
+		else if ($v_deal_row->deal_type) {
 			$id_offers_group = $deal->get('ID_OFFERS_GROUP');
 			if ($id_offers_group > 0) {
 				$group = PokazOfertyHelper::get_group($id_offers_group);
@@ -6874,7 +6981,7 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
 				}
 			}
 
-			if ($deal_type == 'ANEKS') {
+			if ($v_deal_row->deal_type == 'ANEKS') {
 				$deal_old_id = $deal->get('P_DEALNUMBER_OLD');
 
 				$old_offers_ids = array();
@@ -6929,45 +7036,105 @@ function POKAZ_OFERTY_AKTUALNE_FUNC__rozlicz_month($month) {
 		}
 
 		if ($v_deal_row->ID_OFFERS_GROUP <= 0) {
-			if ($deal_type == 'NEW_DEAL') {
+			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 ($deal_type == 'ANEKS') {
+		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;
 			}
 		}
 
-		echo '<tr>';
-			echo '<td>' . '<a href="' . "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=895#EDIT/{$v_deal_row->ID}" . '" target="_blank" title="Edytuj rekord '.$v_deal_row->ID.'">' . $v_deal_row->ID . '</a>' . '</td>';
-			echo '<td>' . $v_deal_row->P_DEALDATE . '</td>';
-			echo '<td' . V::get('ID_BILLING_USERS', '', $out_html_attr) . '>' . $v_deal_row->ID_BILLING_USERS . '</td>';
-			echo '<td>' . $v_deal_row->S_ADDRESS_STREET . '</td>';
-			echo '<td' . V::get('P_DEALPREFIX', '', $out_html_attr) . '>' . $v_deal_row->P_DEALPREFIX . '</td>';
-			echo '<td' . V::get('P_DEALNUMBER_OLD', '', $out_html_attr) . '>' . $v_deal_row->P_DEALNUMBER_OLD . '</td>';
-			echo '<td' . V::get('ID_OFFERS_GROUP', '', $out_html_attr) . '>' . $v_deal_row->ID_OFFERS_GROUP . '</td>';
-			echo '<td' . V::get('ID_OFFERS_ON', '', $out_html_attr) . '>' . $v_deal_row->ID_OFFERS_ON . '</td>';
-			echo '<td' . V::get('ID_OFFERS_OFF', '', $out_html_attr) . '>' . $v_deal_row->ID_OFFERS_OFF . '</td>';
-			echo '<td' . V::get('RODZAJ_DZIALANIA_HANDLOWEGO', '', $out_html_attr) . '>' . $v_deal_row->RODZAJ_DZIALANIA_HANDLOWEGO . '</td>';
-			echo '<td' . V::get('DEALDESC', '', $out_html_attr) . '>' . '<em title="'.htmlspecialchars($v_deal_row->DEALDESC).'">' . substr($v_deal_row->DEALDESC, 0, 20) . '...' . '</em>' . '</td>';
-			echo '<td>' . ((!$deal_type)? '<b style="color:red">' . "NIEZNANY" . '</b>' : '<b>' . $deal_type . '</b>') . '</td>';
-			echo '<td' . V::get('zysk', '', $out_html_attr) . '>' . number_format($v_deal_row->zysk, 2, ',', '') . '</td>';
-			echo '<td' . V::get('miesiecy', '', $out_html_attr) . '>' . $v_deal_row->miesiecy . '</td>';
-			echo '<td' . V::get('aneks_diff', '', $out_html_attr) . '>' . $v_deal_row->aneks_diff . '</td>';
-			echo '<td' . V::get('aneks_loss', '', $out_html_attr) . '>' . $v_deal_row->aneks_loss . '</td>';
-			echo '<td' . V::get('zysk_total', '', $out_html_attr) . '>' . number_format($v_deal_row->zysk_total, 2, ',', '') . '</td>';
-			echo '<td>' . '<a href="' . "?MENU_INIT=POKAZ_OFERTY_AKTUALNE_FUNC&task=verify_deal&id_deal={$v_deal_row->ID}" . '" target="_blank" title="verify deal '.$v_deal_row->ID.'">' . "v" . '</a>' . '</td>';
-			echo '<td>';
-				if (!empty($v_deal_row->check_errors)) {
-					echo '<span title="' . implode("\n", $v_deal_row->check_errors) . '" style="color:red">' . " Errors " . '</span>';
+		$dealsOut[$k_id] = $v_deal_row;
+	}
+	if(V::get('DBG_PO', '', $_GET)>0){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">dealsOut (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($dealsOut);echo'</pre>';}
+
+	?>
+	<table cellspacing="0" cellpadding="0" border="1" class="tbl_deals tbl-view tbl-view-small">
+	<thead>
+	<?php foreach ($tblOutCells as $kCell => $vCellConf) : ?>
+		<?php
+			$cellLabel = str_replace('_', ' ', $kCell);
+			$cellLabel = V::get('label', $cellLabel, $vCellConf);
+		?>
+		<th class="tbl_deals-col_<?php echo V::get('class', '', $vCellConf); ?>" title="<?php echo $cellLabel; ?>">
+			<?php echo $cellLabel; ?>
+		</th>
+	<?php endforeach; ?>
+	</thead>
+	<tbody>
+	<?php foreach ($dealsOut as $kId => $r) : ?>
+		<tr>
+		<?php foreach ($tblOutCells as $kCell => $vCellConf) : ?>
+			<?php
+				$cellValue = '';
+				if ('number' == V::get('type', '', $vCellConf)) {
+					$cellValue = number_format($r->{$kCell}, 2, ',', '');
+					$cellLabel = $cellValue;
 				}
-			echo '</td>';
-		echo '</tr>';
+				else if ('array_of_errors' == V::get('type', '', $vCellConf)) {
+					if (!empty($r->check_errors)) {
+						$cellValue = '<span title="' . implode("\n", $r->check_errors) . '" style="color:red">' . " Errors " . '</span>';
+					}
+					$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});
+				}
+			?>
+			<td class="tbl_deals-col_<?php echo V::get('class', '', $vCellConf); echo $clsAdd; ?>" title="<?php echo $cellLabel; ?>">
+				<?php echo $cellValue; ?>
+			</td>
+		<?php endforeach; ?>
+		</tr>
+	<?php endforeach; ?>
+	</tbody>
+	</table>
+	<?php
+
+	$statsType = array();
+	foreach ($dealsOut as $kId => $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;
+		}
 	}
-	echo '</table>';
+
+	?>
+	<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) : ?>
+		<tr>
+			<td><?php echo $type; ?></td><td><?php echo $vStat->ilosc; ?></td>
+		</tr>
+		<?php endforeach; ?>
+	</tbody>
+	</table>
+	<?php
 }