فهرست منبع

Merge branch 'master' of biuro.biall-net.pl:plabudda/se

# By Piotr Labudda
# Via Piotr Labudda
* 'master' of biuro.biall-net.pl:plabudda/se:
  Zasoby Tree add path for alias info
  WindykacjaPanel fix srvHist
  WindykacjaPanel add srvHist test view
  Billing from l1 add TODO Korekta
a.binder 10 سال پیش
والد
کامیت
1c95d04b46
3فایلهای تغییر یافته به همراه215 افزوده شده و 30 حذف شده
  1. 4 0
      SE/se-lib/Billing_html.php
  2. 9 6
      SE/se-lib/Tree.php
  3. 202 24
      SE/superedit-USERS2_WINDYKACJA_STATUS.php

+ 4 - 0
SE/se-lib/Billing_html.php

@@ -734,6 +734,10 @@ $do_rozliczenia = $this->SZUKAJ_NIEROZLICZONEJ_TRANSAKCJI('PRAWO',$fv_naglowek['
 				}
 	}
 
+	function show_doc_BILLING_NUMBERS_TYPE_CLASS_SELL_MA($ID_BILLING_NUMBERS) {
+		echo "<br> TODO " . __CLASS__ . '->' . __FUNCTION__ . '()';
+	}
+
 	function bm_show_document($ID_BILLING_NUMBERS) {
 		$doc = $this->get_document_type($ID_BILLING_NUMBERS);
 		DEBUG_S(3,'Doctype',$doc,__FILE__,__FUNCTION__,__LINE__);

+ 9 - 6
SE/se-lib/Tree.php

@@ -379,12 +379,15 @@ class Tree {
 			";
 
 			$sql->select[] = "IF(t.`ALIAS_ID` > 0
-					, (select concat_ws('.', zap.`DESC`, za.`DESC`)
-							from `CRM_LISTA_ZASOBOW` as za
-								left join `CRM_LISTA_ZASOBOW` as zap on(zap.`ID`=za.`PARENT_ID`)
-							where za.`ID`=t.`ALIAS_ID`
-							limit 1
-						)
+					, concat_ws('\n'
+						, (select concat_ws('.', zap.`DESC`, za.`DESC`)
+								from `CRM_LISTA_ZASOBOW` as za
+									left join `CRM_LISTA_ZASOBOW` as zap on(zap.`ID`=za.`PARENT_ID`)
+								where za.`ID`=t.`ALIAS_ID`
+								limit 1
+							)
+						, (select av.`PATH` from `CRM_LISTA_ZASOBOW_ALIASY_view` av where av.`ID`=t.`ID`)
+					)
 					, ''
 				) as ALIAS_NAME
 			";

+ 202 - 24
SE/superedit-USERS2_WINDYKACJA_STATUS.php

@@ -2118,9 +2118,20 @@ body{font-family:arial;line-height:1.4;}
 					}
 					$docNr = $v_doc->get('nr');
 					$docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
+					/* 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
+					 */
 					if ('FVAT' == $v_doc->get_type()) {
 						$out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $docNr . '" target="_blank">'."({$docNrLabel})".'</a>';
 					}
+					else if ('KORV' == $v_doc->get_type()) {
+						// https://biuro.biall-net.pl/dev-pl/se-master/index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=809557
+						$remoteFvNum = $v_doc->get('FV_NUMBER');
+						$korNr = $v_doc->get('ID_BILLING_NUMBERS');
+						$korTitle = "Korekta dotycząca faktury nr: {$remoteFvNum}";
+						$out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $korNr . '" target="_blank" title="'.$korTitle.'">'."({$docNrLabel})".'</a>';
+					}
 					$out_tr['nr'] = $docNrLabel;
 					$out_tr['winien'] = number_format($v_doc->get('WINIEN'), 2, ',', ' ');
 					$out_tr['ma'] = number_format($v_doc->get('MA'), 2, ',', ' ');
@@ -2325,6 +2336,167 @@ body{font-family:arial;line-height:1.4;}
 		echo'<br />';
 		echo'<br />';
 		WindykacjaStatsHelper::update_stats($user, $billing_docs);
+
+		{// srv hist
+			$srvHist = array();
+			$db = DB::getDB();
+			$sql = <<<SQL
+	select fvPos.`ID` as fvPos__ID
+		, fvPos.`DATE_FROM` as fvPos__DATE_FROM
+		, fvPos.`DATE_TO` as fvPos__DATE_TO
+		, fvPos.`ID_SERVICES` as fvPos__ID_SERVICES
+		, (select srv.`NAME_LIST_SERVICES` from `billing2013`.`SERVICES` srv where srv.`ID`=fvPos.`ID_SERVICES` limit 1) as srv__NAME_LIST_SERVICES
+		, fvPos.`AMMOUNT` as fvPos__AMMOUNT
+		, fvPos.`PRICE` as fvPos__PRICE
+		, fvPos.`VAT` as fvPos__VAT
+--		, fvPos.`ID_BILLS_FVAT` as fvPos__ID_BILLS_FVAT
+		, fvPos.`DESCR` as fvPos__DESCR
+--		, fvPos.`id_list_services` as fvPos__id_list_services
+--		, fvPos.`id_list_sww` as fvPos__id_list_sww
+--		, fvPos.`VAT_NAME` as fvPos__VAT_NAME
+--		, fvPos.`ID_OFFERS` as fvPos__ID_OFFERS
+--		, 'fv', fv.*
+--		, fv.`ID` as fv__ID
+		, fv.`ID_BILLING_NUMBERS` as fv__ID_BILLING_NUMBERS
+--		, fv.`ID_BILLING_USERS` as fv__ID_BILLING_USERS
+--		, fv.`id_owner` as fv__id_owner
+		, fv.`BILL_DATE` as fv__BILL_DATE
+		, fv.`SELL_DATE` as fv__SELL_DATE
+--		, fv.`TIMESTAMP` as fv__TIMESTAMP
+		, fv.`PAYMENT_TERM` as fv__PAYMENT_TERM
+--		, fv.`PAYMENT_TYPE` as fv__PAYMENT_TYPE
+--		, fv.`ID_CURRENCY` as fv__ID_CURRENCY
+--		, fv.`ID_FK_DEKRET` as fv__ID_FK_DEKRET
+--		, fv.`ID_FK_ROZRACH` as fv__ID_FK_ROZRACH
+--		, fv.`OPEN` as fv__OPEN
+--		, fv.`FK_ZAKSIEG` as fv__FK_ZAKSIEG
+		, fv.`IF_KORV` as fv__IF_KORV
+--		, 'fvNum', fvNum.*
+--		, fvNum.`ID` as fvNum__ID
+--		, fvNum.`TIMESTAMP` as fvNum__TIMESTAMP
+--		, fvNum.`ID_BILLING_NUMBERS_TYPE` as fvNum__ID_BILLING_NUMBERS_TYPE
+--		, fvNum.`ID_BILLING_PREFIXES` as fvNum__ID_BILLING_PREFIXES
+		, fvNum.`NUMBER` as fvNum__NUMBER
+--		, fvNum.`ID_BILLING_USERS` as fvNum__ID_BILLING_USERS
+		, fvNum.`FOREIGN_ID_BILLING_NUMBERS` as fvNum__FOREIGN_ID_BILLING_NUMBERS
+--		, fvNum.`U_ID` as fvNum__U_ID
+--		, fvNum.`BILLING_OWNER` as fvNum__BILLING_OWNER
+--		, 'korPos', korPos.*
+		, korPos.`ID` as korPos__ID
+--		, korPos.`ID_BILLS_FVAT` as korPos__ID_BILLS_FVAT
+		, korPos.`DESCR` as korPos__DESCR
+		, korPos.`ID_SERVICES` as korPos__ID_SERVICES
+		, korPos.`DATE_FROM` as korPos__DATE_FROM
+		, korPos.`DATE_TO` as korPos__DATE_TO
+		, korPos.`AMMOUNT` as korPos__AMMOUNT
+		, korPos.`PRICE` as korPos__PRICE
+		, korPos.`VAT` as korPos__VAT
+--		, korPos.`id_list_services` as korPos__id_list_services
+--		, korPos.`id_list_sww` as korPos__id_list_sww
+--		, korPos.`VAT_NAME` as korPos__VAT_NAME
+--		, korPos.`N_DESCR` as korPos__N_DESCR
+--		, korPos.`N_ID_SERVICES` as korPos__N_ID_SERVICES
+--		, korPos.`N_DATE_FROM` as korPos__N_DATE_FROM
+--		, korPos.`N_DATE_TO` as korPos__N_DATE_TO
+--		, korPos.`N_AMMOUNT` as korPos__N_AMMOUNT
+--		, korPos.`N_PRICE` as korPos__N_PRICE
+--		, korPos.`N_VAT` as korPos__N_VAT
+--		, korPos.`N_id_list_services` as korPos__N_id_list_services
+--		, korPos.`N_id_list_sww` as korPos__N_id_list_sww
+--		, korPos.`N_VAT_NAME` as korPos__N_VAT_NAME
+		, korPos.`TYP_KOREKTY` as korPos__TYP_KOREKTY
+	from `billing2013`.`BILLS_FVAT_POS` fvPos
+		join `billing2013`.`BILLS_FVAT` fv on (fv.`ID`=fvPos.`ID_BILLS_FVAT`)
+		join `billing2013`.`BILLING_NUMBERS` fvNum on(fvNum.`ID`=fv.`ID_BILLING_NUMBERS`)
+		left join `billing2013`.`BILLS_KORV_POS` korPos on(
+			korPos.`ID_BILLS_FVAT`=(
+				select kor.`ID`
+				from `billing2013`.`BILLS_KORV` kor
+				where kor.`REMOTE_ID_BILLING_NUMBERS`=fvNum.`ID`
+			)
+			and korPos.`ID_SERVICES`=fvPos.`ID_SERVICES`
+		)
+	where fv.`ID_BILLING_USERS`='{$user->ID}'
+	order by fv.`ID` DESC
+SQL;
+			//echo'<pre>srvHist:sql: ';print_r($sql);echo'</pre>';
+			$idxDates = array();
+			$idxSrv = array();
+			$idxHasKor = array();
+			$res = $db->query($sql);
+			while ($r = $db->fetch($res)) {
+				$srvHist[$r->fvPos__ID] = $r;
+				$month = substr($r->fv__BILL_DATE, 0, 7);
+				$idSrv = $r->fvPos__ID_SERVICES;
+				if (!empty($r->fv__BILL_DATE)) {
+					if (!array_key_exists($month, $idxDates)) $idxDates[$month] = array();
+					$idxDates[$month][$r->fvPos__ID] = $idSrv;
+				}
+				if (!empty($idSrv)) {
+					$idxSrv[$idSrv] = $r->srv__NAME_LIST_SERVICES;
+				}
+				if ($r->korPos__ID > 0) {
+					$isKorZero = ($r->korPos__AMMOUNT * $r->korPos__PRICE == -1 * $r->fvPos__AMMOUNT * $r->fvPos__PRICE);
+					$idxHasKor[$month][$idSrv][] = $isKorZero;
+				}
+			}
+			krsort($idxDates);
+			?>
+		<div class="container">
+			<script>
+				function showHideSrvHist() {
+					jQuery('#srvHist').toggle();
+					return false;
+				}
+			</script>
+			<h3>Historia usług <button class="btn btn-xs btn-danger" onclick="return showHideSrvHist()">+/-</button></h3>
+			<table class="table table-bordered" id="srvHist" style="display:none">
+				<thead>
+					<tr>
+						<th style="padding:2px"><nobr class="pull-right">Usługi</nobr></th>
+						<?php foreach ($idxSrv as $idSrv => $srvType) : ?>
+							<th style="padding:2px"><?php echo $idSrv; ?></th>
+						<?php endforeach; ?>
+					</tr>
+					<tr>
+						<th style="padding:2px"><nobr>Data</nobr></th>
+						<?php foreach ($idxSrv as $idSrv => $srvType) : ?>
+							<th style="padding:2px"><?php echo $srvType; ?></th>
+						<?php endforeach; ?>
+					</tr>
+				</thead>
+				<tbody>
+					<?php foreach ($idxDates as $month => $posIds) : ?>
+						<tr>
+							<td style="padding:2px"><?php echo $month; ?></td>
+							<?php foreach ($idxSrv as $idSrv => $srvType) : ?>
+							<?php if (in_array($idSrv, $posIds)) : ?>
+								<?php if (!empty($idxHasKor[$month][$idSrv])) : ?>
+									<?php if (count($idxHasKor[$month][$idSrv]) > 1) : ?>
+										<td style="padding:2px" class="danger"><b title="Faktury i Korekty w tym na 0"><?php echo count($idxHasKor[$month][$idSrv]); ?> * FV (FV - KOR = 0)</b></td>
+									<?php elseif (true == $idxHasKor[$month][$idSrv][0]) : ?>
+										<td style="padding:2px" class="danger"><b title="Faktura i Korekta na 0">FV - KOR = 0</b></td>
+									<?php else : ?>
+										<td style="padding:2px" class="warning"><b title="Faktura i Korekta">FV - KOR &gt; 0</b></td>
+									<?php endif; ?>
+								<?php else : ?>
+									<td style="padding:2px" class="success"><b title="brak korekty">FV</b></td>
+								<?php endif; ?>
+							<?php else : ?>
+								<td style="padding:2px"><i class="muted">---</i></td>
+							<?php endif; ?>
+						<?php endforeach; ?>
+						</tr>
+					<?php endforeach; ?>
+				</tbody>
+			</table>
+		</div>
+			<?php
+			//echo'<pre>idxHasKor: ';print_r($idxHasKor);echo'</pre>';
+			//echo'<pre>idxDates: ';print_r($idxDates);echo'</pre>';
+			//echo'<pre>idxSrv: ';print_r($idxSrv);echo'</pre>';
+			//echo'<pre>srvHist: ';print_r($srvHist);echo'</pre>';
+		}// srv hist
 	}
 
 	public static function view_faktura($faktura_id) {
@@ -5129,16 +5301,16 @@ class WindykacjaStatsModel {
 				, BILLS_FVAT_POS.ID_BILLS_FVAT
 				, sum(round((round(BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE, 2)) * (1 + BILLS_FVAT_POS.VAT / 100), 2)) as WARTOSC
 				-- , count(BILLS_FVAT_POS.PRICE) as ILOSC_POZYCJI
-				, `NUMBER` as `NUMBER`
-				, `ID_BILLING_PREFIXES` as `ID_BILLING_PREFIXES`
+				, `BILLING_NUMBERS`.`NUMBER` as `NUMBER`
+				, `BILLING_NUMBERS`.`ID_BILLING_PREFIXES` as `ID_BILLING_PREFIXES`
 			from `BILLS_FVAT`
-				left join `BILLS_FVAT_POS` on BILLS_FVAT.ID=BILLS_FVAT_POS.ID_BILLS_FVAT
-				left join `BILLING_NUMBERS` on (`BILLING_NUMBERS`.`ID`=`BILLS_FVAT`.`ID_BILLING_NUMBERS`)
+				left join `BILLING_NUMBERS` on(`BILLING_NUMBERS`.`ID`=`BILLS_FVAT`.`ID_BILLING_NUMBERS`)
+				left join `BILLS_FVAT_POS` on(`BILLS_FVAT_POS`.`ID_BILLS_FVAT`=`BILLS_FVAT`.`ID`)
 			where {$sql_where}
 			group by BILLS_FVAT.ID
 			order by BILLS_FVAT.ID_BILLING_NUMBERS ASC
 		";
-		//echo'<pre>sql1:';print_r($sql);echo'</pre>';
+		//echo'<pre>sql1: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
 //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
 		$res = $db_webone->query($sql);
 		while ($h = $db_webone->fetch_assoc($res)) {
@@ -5204,35 +5376,41 @@ class WindykacjaStatsModel {
 					where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
 						{$sql_where}
 				";
-				//echo'<pre>sql2:';print_r($sql);echo'</pre>';
+				//echo'<pre>sql2: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
 				$res = $db_webone->query($sql);
 				while ($h = $db_webone->fetch_assoc($res)) {
 					$billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
 				}
 			}
 			else if ($bill_type['CLASS'] == 'SELL_MA') {
-				$sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
-				$sql = "select {$bill_type['TABLE']}.ID
-						, count({$bill_type['TABLE']}_POS.ID) as cnt
-						, {$bill_type['TABLE']}_POS.ID_BILLS_FVAT
-						, {$bill_type['TABLE']}.ID_CURRENCY
-						, round(sum(({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE) * ( 1 + {$bill_type['TABLE']}_POS.N_VAT / 100)),2) as WINIEN
+				$sql_where = ($date_limit)? " and t.BILL_DATE <= '{$date_limit}' " : "";
+				$sql = "select t.ID
+						, count(t_pos.ID) as cnt
+						, t_pos.ID_BILLS_FVAT
+						, t.ID_CURRENCY
+						, round(sum((t_pos.N_AMMOUNT * t_pos.N_PRICE) * ( 1 + t_pos.N_VAT / 100)),2) as WINIEN
 						, round(sum( 
-								(({$bill_type['TABLE']}_POS.AMMOUNT * {$bill_type['TABLE']}_POS.PRICE) * ( 1 + {$bill_type['TABLE']}_POS.VAT / 100))
-								- ({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE * {$bill_type['TABLE']}_POS.N_VAT / 100)
-								+ ({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE * {$bill_type['TABLE']}_POS.VAT / 100)
+								((t_pos.AMMOUNT * t_pos.PRICE) * ( 1 + t_pos.VAT / 100))
+								- (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.N_VAT / 100)
+								+ (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.VAT / 100)
 							),2) as MA
-						, {$bill_type['TABLE']}.ID_BILLING_NUMBERS , {$bill_type['TABLE']}.OPEN , {$bill_type['TABLE']}.FK_ZAKSIEG
-						, {$bill_type['TABLE']}.IF_KORV , {$bill_type['TABLE']}.BILL_DATE , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
-					from {$bill_type['TABLE']}
-						left join {$bill_type['BILLING_NUMBERS_TABLE']} on {$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS
-						left join {$bill_type['TABLE']}_POS on {$bill_type['TABLE']}.ID={$bill_type['TABLE']}_POS.ID_BILLS_FVAT
-					where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
+						, t.ID_BILLING_NUMBERS
+						, t.OPEN
+						, t.FK_ZAKSIEG
+						, t.IF_KORV , t.BILL_DATE
+						, t_num.`NUMBER`
+						, t_num.`ID_BILLING_PREFIXES`
+						, fv_num.`NUMBER` as FV_NUMBER
+					from `{$bill_type['TABLE']}` t
+						left join `{$bill_type['BILLING_NUMBERS_TABLE']}` t_num on (t_num.`ID`=t.`ID_BILLING_NUMBERS`)
+						left join `{$bill_type['BILLING_NUMBERS_TABLE']}` fv_num on (fv_num.`ID`=t.`REMOTE_ID_BILLING_NUMBERS`)
+						left join `{$bill_type['TABLE']}_POS` t_pos on (t_pos.`ID_BILLS_FVAT`=t.`ID`)
+					where t.`ID_BILLING_USERS`='{$user->ID}'
 						{$sql_where}
-					group by {$bill_type['TABLE']}.ID
-					order by {$bill_type['TABLE']}.ID
+					group by t.`ID`
+					order by t.`ID`
 				";
-				//echo'<pre>sql3:';print_r($sql);echo'</pre>';
+				//echo'<pre>sql3: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
 				$res = $db_webone->query($sql);
 				while ($h = $db_webone->fetch_assoc($res)) {
 					$billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);