Просмотр исходного кода

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

# By Piotr Labudda (21) and a.binder (9)
# Via Piotr Labudda
* 'master' of biuro.biall-net.pl:plabudda/se: (30 commits)
  Budget: select sub projects, show only selected
  Budget: choose selected year, css cleanup, row hover, add view query
  add test BUDGET_ANALYTICS
  Fix small bug in V class
  TableAjax: more responsive forms
  WindykacjaPanel: add SERVICES_STREETS
  windykacjaPanel: add ACCOUNT_NUMBER
  WindykacjaPanel: add adres koresp.
  WindykacjaPanel: add nr konta
  WindykacjaPanel and Billing: Fix nr konta
  WindykacjaPanel: rm dbg msgs
  WindykacjaPanel: add saldo 30 dni, saldo wystawione #106
  Fix sql injection in bm_show_document and bm_make_faktura
  Fix fv price round BUG in bm_show_document
  WindykcjaPanel: Fix fv price round BUG
  Fix billing price on lista faktur
  Fix code style in Billing
  Fix qrcode in Billing (bm_show_document)
  Fix functions from l1
  amend last commit...;-)
  ...
a.binder 11 лет назад
Родитель
Сommit
0fe9421c32

Разница между файлами не показана из-за своего большого размера
+ 272 - 430
SE/se-lib/Billing.php


Разница между файлами не показана из-за своего большого размера
+ 66 - 463
SE/se-lib/Billing_html.php


+ 8 - 8
SE/se-lib/TableAjax.php

@@ -3216,11 +3216,11 @@ function hidePopover() {
 				<?php $tabindex = 0; foreach ($fieldsList as $kID => $vCol) : ?>
 					<?php if ($this->_acl->isAllowed($kID, 'W', $record)) : ?>
 						<div class="form-group">
-							<label class="col-sm-3 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
+							<label class="col-xs-12 col-sm-3 col-md-2 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
 								<i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="<?php echo htmlspecialchars($vCol['opis']); ?>" data-original-title="<?php echo "[{$kID}] {$vCol['name']}"; ?>"></i>
 								<?php $perms = $this->_acl->getFieldPerms($kID); SE_Layout::hotKeyDBG($perms); ?>
 							</label>
-							<div class="col-sm-9">
+							<div class="col-xs-12 col-sm-9 col-md-10">
 								<?php
 									$fieldParams = array('appendBack'=>true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8);
 									if (!empty($tsValues[$kID])) {
@@ -3232,11 +3232,11 @@ function hidePopover() {
 						</div>
 					<?php elseif ($this->_acl->isAllowed($kID, 'R', $record)) : ?>
 						<div class="form-group">
-							<label class="col-sm-3 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
+							<label class="col-xs-12 col-sm-3 col-md-2 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
 								<i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="<?php echo htmlspecialchars($vCol['opis']); ?>" data-original-title="<?php echo "[{$kID}] {$vCol['name']}"; ?>"></i>
 								<?php $perms = $this->_acl->getFieldPerms($kID); SE_Layout::hotKeyDBG($perms); ?>
 							</label>
-							<div class="col-sm-9">
+							<div class="col-xs-12 col-sm-9 col-md-10">
 								<p style="margin-top:5px;">
 								<?php
 									//echo $this->_acl->showFormItem('R', $kID, "f{$kID}", $cols[$kID], array('appendBack'=>true), $record);
@@ -3253,7 +3253,7 @@ function hidePopover() {
 				<?php endforeach; ?>
 
 				<div class="form-group">
-					<div class="col-sm-offset-3 col-sm-9">
+					<div class="col-xs-offset-0 col-xs-12 col-sm-offset-3 col-sm-9 col-md-offset-2 col-md-10">
 						<button type="submit" class="btn btn-primary" tabindex="<?php echo (++$tabindex); ?>">Zapisz</button>
 					</div>
 				</div>
@@ -3474,11 +3474,11 @@ jQuery(document).ready(function(){
 				<?php $tabindex = 0; foreach ($fieldsList as $kID => $vCol) : ?>
 					<?php if ($this->_acl->isAllowed($kID, 'C')) : ?>
 						<div class="form-group">
-							<label class="col-sm-3 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
+							<label class="col-xs-12 col-sm-3 col-md-2 control-label" for="<?php echo "f{$kID}"; ?>"><?php echo $vCol['label']; ?>
 								<i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="<?php echo htmlspecialchars($vCol['opis']); ?>" data-original-title="<?php echo "[{$kID}] {$vCol['name']}"; ?>"></i>
 								<?php $perms = $this->_acl->getFieldPerms($kID); SE_Layout::hotKeyDBG($perms); ?>
 							</label>
-							<div class="col-sm-9">
+							<div class="col-xs-12 col-sm-9 col-md-10">
 								<?php
 									$fieldParams = array('appendBack'=>true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8);
 									echo $this->_acl->showFormItem('C', $kID, "f{$kID}", $cols[$kID], $fieldParams);
@@ -3489,7 +3489,7 @@ jQuery(document).ready(function(){
 				<?php endforeach; ?>
 
 				<div class="form-group">
-					<div class="col-sm-offset-3 col-sm-9">
+					<div class="col-xs-offset-0 col-xs-12 col-sm-offset-3 col-sm-9 col-md-offset-2 col-md-10">
 						<button type="submit" class="btn btn-primary" tabindex="<?php echo (++$tabindex); ?>">Dodaj rekord</button>
 					</div>
 				</div>

+ 1 - 0
SE/se-lib/TypespecialVariable.php

@@ -236,6 +236,7 @@ jQuery(document).ready(function(){
 		switch ($this->fldName) {
 			case 'A_ADM_COMPANY':
 			case 'A_CLASSIFIED':
+			case 'A_EXEC_GROUP':
 				Lib::loadClass('UsersHelper');
 				$userName = User::getLogin();
 				$userLdapGroups = UsersHelper::getLDAPGroupByUserName($userName);

+ 0 - 6
SE/se-lib/UserAcl.php

@@ -12,12 +12,6 @@ class UserAcl {
 	var $_use_cache = false;
 	/**
 	 * User groups (cached)
-	 *
-	 * should be called like :
-	 * $userAcl = User::getAcl();
-	 *	$tblAcl = $userAcl->getTableAcl(ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW'));
-	 *	if($tblAcl)
-	 * 	if($tblAcl->hasFieldPerm($tblAcl->getFieldIdByName('ID'),'R')) $tree->set_param('hasFieldPerm__ID', true);
 	 */
 	var $_groups = array();
 	var $_proces_ids = array();

+ 1 - 1
SE/se-lib/V.php

@@ -49,7 +49,7 @@ class V {
 			case 'word':
 				if (is_scalar($from)) {
 					$ret = $from;
-					settype($ret, $type);
+					settype($ret, 'string');
 					$ret = trim($ret);
 					if (false !== ($pos = strpos($ret, ' '))) {
 						$ret = substr($ret, 0, $pos);

+ 0 - 12
SE/superedit-ANALIZA_GRUP_KOSZTOW.php

@@ -1,18 +1,7 @@
 <?php
 
-if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
-if (!defined('APP_PATH_ROOT')) define('APP_PATH_ROOT', dirname(__FILE__));
-if (!defined('APP_PATH_WWW')) define('APP_PATH_WWW', dirname(__FILE__));
-if (!defined('APP_PATH_CONFIG')) define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
-
 function ANALIZA_GRUP_KOSZTOW() {
 
-	require_once dirname(__FILE__) . '/' . 'se-lib' . '/' . 'Lib.php';
-	Lib::loadClass('V');
-	Lib::loadClass('User');
-	Lib::loadClass('Config');
-	Lib::loadClass('DB');
-
 	$analizaGrupKosztowRouter = new AnalizaGrupKosztowRouter();
 
 	$_print = V::get('_print', '', $_GET);
@@ -20,7 +9,6 @@ function ANALIZA_GRUP_KOSZTOW() {
 		$analizaGrupKosztowRouter->menu();
 	}
 
-	$task = V::get('task', 'cyfrowe', $_GET);
 	$grupyKosztow = $analizaGrupKosztowRouter->getGrupyKosztow();
 
 	$projekty = $analizaGrupKosztowRouter->getProjekty();

+ 326 - 0
SE/superedit-BUDGET_ANALYTICS.php

@@ -0,0 +1,326 @@
+<?php
+
+function BUDGET_ANALYTICS() {
+
+	$budgetAnalyticsRouter = new BudgetAnalyticsRouter();
+
+	$args = array();
+	$args['year'] = V::get('zest_year', '', $_REQUEST, 'int');
+	$args['_print'] = V::get('_print', '', $_REQUEST, 'int');
+
+	if (!$args['_print']) {
+		$budgetAnalyticsRouter->menu($args['year']);
+	}
+
+	if (empty($args['year'])) {
+		?>
+		<div class="alert alert-warning">
+			Nie wybrano roku.
+		</div>
+		<?
+		return;
+	}
+
+	$costs = $budgetAnalyticsRouter->getCostsByYear($args['year']);
+	if (empty($costs)) {
+		?>
+		<div class="alert alert-warning">
+			Brak danych na wybrany rok.
+		</div>
+		<?
+		return;
+	}
+
+	$projTree = $budgetAnalyticsRouter->buildProjectTree($costs);
+	//$orderby = V::get('orderby', '', $_GET);
+	//$view_type = V::get('view_type', '', $_GET);
+	//$budgetAnalyticsRouter->cyfrowe($projekty, $grupyKosztow, $costs, $orderby, $view_type);
+	$budgetAnalyticsRouter->printCostsForYear($projTree, $costs, $args['year']);
+}
+
+class BudgetAnalyticsRouter {
+
+	function menu($selectedYear) {
+		//SE_Layout::menu();
+		$year = ($selectedYear)? $selectedYear : date("Y");
+		?>
+<div class="jumbotron">
+  <div class="container">
+		<form class="form-inline" method="POST">
+			<input type="hidden" name="task" value="zest_year" />
+			<label for="zest_year">Zestawienie kosztów projektów na podstawie korespondencji:</label>
+			<div class="input-group date" id="fldZestYear">
+				<input type="text" name="zest_year" class="form-control" value="" />
+				<span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
+			</div>
+			<button type="submit" id="fldZestYearBtn" class="btn btn-primary" autocomplete="off">
+				Pokaż
+			</button>
+		</form>
+	</div>
+</div>
+<script type="text/javascript">
+jQuery(document).ready(function () {
+  jQuery('#fldZestYearBtn').on('click', function () {
+    jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
+		jQuery(this).parent().submit();
+  })
+
+	jQuery("#fldZestYear").datetimepicker({
+		format: "YYYY",
+		defaultDate: new Date(<?php echo $year; ?>, <?php echo intval(date("m")); ?>, 1),
+		// minDate: new Date(2014, 11, 1),
+		// maxDate: "<?php echo date("Y"); ?>"
+	});
+});
+</script>
+		<?php
+	}
+
+	function css() {
+		?>
+	<style type="text/css">
+		.c { text-align:center; }
+		.r { text-align:right; }
+
+		.zestawienie-kosztow-tbl { border-collapse:collapse; border:1px solid #7EC5FF; }
+		.zestawienie-kosztow-tbl td { border:1px solid #7EC5FF; }
+		.zestawienie-kosztow-tbl .p2 { padding:0 2px; }
+		.zestawienie-kosztow-tbl .nr { color:#7A7A7A; }
+		.zestawienie-kosztow-tbl thead th { border:1px solid #7EC5FF; }
+		.zestawienie-kosztow-tbl tbody tr:hover td { background:#cafbfd; }
+		.row-selected td {background-color:#d8fded;}
+		.showOnlySelected tr { display:none; }
+		.showOnlySelected tr.row-selected { display:table-row; }
+
+		.cost { padding:0 2px; min-width:30px; text-align:right; }
+		.cost-only_child { color:#777; }
+		.cost-only_self { color:red; }
+		.cost-self_and_child { color:orange; }
+
+		/* print table background colors */
+		table td, table th { -webkit-print-color-adjust:exact; }
+		table { page-break-after:auto }
+		tr    { page-break-inside:avoid; page-break-after:auto; position:relative; }
+		td    { page-break-inside:avoid; page-break-after:auto; position:relative; }
+		thead { display:table-header-group }
+		tfoot { display:table-footer-group }
+	</style>
+		<?php
+	}
+
+	function printCostsForYear($projOrder, $costs, $year) {
+		$months = array();
+		for ($i = 0; $i < 12; $i++) {
+			$months[] = $i + 1;
+		}
+		$this->css();
+		//echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;">';print_r($costs);echo'</pre>';
+?>
+<div class="container">
+	<div style="float:right;color:#aaa;"><?php echo date("Y-m-d"); ?></div>
+	<h1>Zestawienie kosztów projektów na rok <?php echo $year; ?></h1>
+	<table cellspacing="0" cellpadding="0" border="0" id="zestawienie-kosztow-projektow" class="zestawienie-kosztow-tbl">
+	<thead>
+		<tr>
+			<td colspan="3" class="p2">
+				<span class="pull-left">
+					<input type="checkbox" onclick="return showHideAll(this);"/> pokaż tylko zaznaczone
+				</span>
+				<span class="pull-right">miesiąc</span>
+			</td>
+			<?php foreach ($months as $month) { ?>
+				<th class="c"><?php echo $month; ?></th>
+			<?php } ?>
+		</tr>
+	</thead>
+	<tbody>
+	<?php $t = 1; ?>
+	<?php foreach ($projOrder as $projPath => $projId) : ?>
+		<?php $projectInfo = $costs[$projId]; ?>
+		<tr class="row-<?php echo ($t = 1 - $t); ?>"
+				data-projId="<?php echo $projectInfo->ID_PROJECT; ?>"
+				data-path="<?php echo $projectInfo->path; ?>">
+			<td class="p2 r nr">
+				<input type="checkbox" name="selectedProject" onclick="return selectProject(this);" value="<?php echo $projectInfo->ID_PROJECT; ?>" />
+			</td>
+			<td class="p2 l nr"><?php echo $projectInfo->path; ?></td>
+			<td class="p2" style="max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;" title="<?php echo $projectInfo->M_DIST_DESC; ?>"><?php echo $projectInfo->M_DIST_DESC; ?></td>
+			<?php foreach ($months as $month) : ?>
+				<?php if (array_key_exists($month, $projectInfo->costsByMonth)) : ?>
+					<?php $vCost = V::get($month, '', $projectInfo->costsByMonth); ?>
+					<?php if ($vCost->COST_CHILD > 0) : ?>
+						<?php  $title = "Koszt projektu {$vCost->COST_SELF} / koszt podprojektów {$vCost->COST_CHILD}"; ?>
+						<?php if ($vCost->COST_SELF > 0) : ?>
+			<td class="cost cost-self_and_child"><span class="ttip" title="<?php echo $title; ?>"><?php echo $vCost->COST_TOTAL; ?></span></td>
+						<?php else : ?>
+			<td class="cost cost-only_child"><span class="ttip" title="<?php echo $title; ?>"><?php echo $vCost->COST_TOTAL; ?></span></td>
+						<?php endif; ?>
+					<?php else : ?>
+			<td class="cost cost-only_self"><?php echo $vCost->COST_TOTAL; ?></td>
+					<?php endif; ?>
+				<?php else : ?>
+					<td style="min-width:30px">&nbsp;</td>
+				<?php endif; ?>
+			<?php endforeach; ?>
+		</tr>
+	<?php endforeach; ?>
+	</tbody>
+	</table>
+</div>
+<script>
+	jQuery(document).ready(function(){
+		jQuery('.ttip').tooltip();
+	});
+
+	function selectProject(n) {
+		var $n = jQuery(n);
+		var $p = $n.parent().parent();
+		if (n.checked) {
+			$p.addClass('row-selected');
+		} else {
+			$p.removeClass('row-selected');
+		}
+		markSubProjects($p, $p.data('path'), n.checked);
+
+		function markSubProjects($p, path, checked) {
+			var $nextRow = $p.next('tr'),
+					nextPath = $nextRow.data('path'),
+					nextCheckbox = $nextRow.find('input[type="checkbox"]').get(0);
+			if (0 !== nextPath.indexOf(path)) {
+				return;
+			}
+			if (checked) {
+				$nextRow.addClass('row-selected');
+			} else {
+				$nextRow.removeClass('row-selected');
+			}
+			nextCheckbox.checked = checked;
+			markSubProjects($nextRow, path, checked);
+		}
+	}
+
+	function showHideAll(n) {
+		if (n.checked) {
+			jQuery('#zestawienie-kosztow-projektow').find('tbody').addClass('showOnlySelected');
+		} else {
+			jQuery('#zestawienie-kosztow-projektow').find('tbody').removeClass('showOnlySelected');
+		}
+	}
+
+</script>
+<?php
+	}
+
+	public function getCostsByYear($year) {
+		$db = DB::getDB();
+		$costs = array();
+		$sql = "
+			select
+				t.`ID_PROJECT`
+				, t.`M_DIST_DESC`
+				, t.`P_ID`
+				, t.`path`
+				, t.`MONTH`
+				, t.`COST_SELF`
+				, t.`COST_CHILD`
+				, t.`COST_TOTAL`
+				, t.`INCOME_SELF`
+				, t.`INCOME_CHILD`
+				, t.`INCOME_TOTAL`
+			from `test_budget_project_synthetics_view` as t
+			where 1=1
+				and t.`MONTH` like '{$year}-%'
+		";
+		$res = $db->query($sql);
+		while ($r = $db->fetch($res)) {
+			if (!array_key_exists($r->ID_PROJECT, $costs)) {
+				$projectInfo = new stdClass();
+				$projectInfo->ID_PROJECT = $r->ID_PROJECT;
+				$projectInfo->M_DIST_DESC = $r->M_DIST_DESC;
+				$projectInfo->path = $r->path;
+				$projectInfo->costsByMonth = array();
+				$costs[$r->ID_PROJECT] = $projectInfo;
+			}
+			$cost = new stdClass();
+			$cost->MONTH = $r->MONTH;
+			$cost->COST_SELF = $r->COST_SELF;
+			$cost->COST_CHILD = $r->COST_CHILD;
+			$cost->COST_TOTAL = $r->COST_TOTAL;
+			$cost->INCOME_SELF = $r->INCOME_SELF;
+			$cost->INCOME_CHILD = $r->INCOME_CHILD;
+			$cost->INCOME_TOTAL = $r->INCOME_TOTAL;
+			$monthNum = intval(substr($r->MONTH, 5, 2));
+			$costs[$r->ID_PROJECT]->costsByMonth[$monthNum] = $cost;
+		}
+		return $costs;
+	}
+
+	public function buildProjectTree($costs) {
+		$projPaths = array();
+		foreach ($costs as $idProject => $projectInfo) {
+			$projPaths[$projectInfo->path] = $projectInfo->ID_PROJECT;
+		}
+		//echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;">projPaths: ';print_r($projPaths);echo'</pre>';
+		uksort($projPaths, array($this, 'sortPathsCallback'));
+		//echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;">projPaths sorted: ';print_r($projPaths);echo'</pre>';
+		return $projPaths;
+	}
+
+	public function sortPathsCallback($a, $b) {
+		$ea = explode('-', $a);
+		$eb = explode('-', $b);
+		$la = count($ea);
+		$lb = count($eb);
+		$lmin = min($la, $lb);
+		for ($i = 0; $i < $lmin; $i++) {
+			if ($ea[$i] < $eb[$i]) {
+				return -1;
+			} else if ($ea[$i] > $eb[$i]) {
+				return 1;
+			}
+		}
+		return $la - $lb;
+	}
+
+	public function installView() {
+		$sql = "
+			CREATE VIEW `test_budget_project_analytics_view` AS
+			select `IN7_DZIENNIK_KORESP`.`ID_PROJECT` AS `ID_PROJECT`
+				, date_format(`IN7_DZIENNIK_KORESP`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `MONTH`
+				, sum(`IN7_DZIENNIK_KORESP`.`COST_VALUE`) AS `COST`
+				, sum(`IN7_DZIENNIK_KORESP`.`INCOME_VALUE`) AS `INCOME`
+				, 'SELF' AS `TYPE`
+			from `IN7_DZIENNIK_KORESP`
+			where ((`IN7_DZIENNIK_KORESP`.`COST_VALUE` > 0) or (`IN7_DZIENNIK_KORESP`.`INCOME_VALUE` > 0))
+			group by `IN7_DZIENNIK_KORESP`.`ID_PROJECT`
+				, date_format(`IN7_DZIENNIK_KORESP`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m')
+		union
+			select `p`.`ID` AS `ID_PROJECT`
+				, date_format(`k`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `MONTH`
+				, sum(`k`.`COST_VALUE`) AS `COST`,sum(`k`.`INCOME_VALUE`) AS `INCOME`
+				, 'CHILD' AS `TYPE`
+			from (`IN7_MK_BAZA_DYSTRYBUCJI` `p`
+				join `IN7_DZIENNIK_KORESP` `k` on((((`k`.`COST_VALUE` > 0) or (`k`.`INCOME_VALUE` > 0)) and (`k`.`path` like concat('%-',`p`.`ID`,'-%')))))
+			group by `p`.`ID`, date_format(`k`.`K_DATA_OTRZYMANEJ_KORESP`, '%Y-%m')
+		";
+		$sql = "
+			CREATE VIEW `test_budget_project_synthetics_view` AS
+			select `t1`.`ID_PROJECT` AS `ID_PROJECT`
+				,	`p`.`M_DIST_DESC` AS `M_DIST_DESC`
+				,	`p`.`P_ID` AS `P_ID`
+				,	`p`.`path` AS `path`
+				,	`t1`.`MONTH` AS `MONTH`
+				,	cast(sum(if((`t1`.`TYPE` = 'SELF'),`t1`.`COST`,'0')) as decimal(10,2)) AS `COST_SELF`
+				, cast(sum(if((`t1`.`TYPE` = 'CHILD'),`t1`.`COST`,'0')) as decimal(10,2)) AS `COST_CHILD`
+				, sum(`t1`.`COST`) AS `COST_TOTAL`
+				, cast(sum(if((`t1`.`TYPE` = 'SELF'),`t1`.`INCOME`,'0')) as decimal(10,2)) AS `INCOME_SELF`
+				, cast(sum(if((`t1`.`TYPE` = 'CHILD'),`t1`.`INCOME`,'0')) as decimal(10,2)) AS `INCOME_CHILD`
+				, sum(`t1`.`INCOME`) AS `INCOME_TOTAL`
+			from (`test_budget_project_analytics_view` `t1`
+				join `IN7_MK_BAZA_DYSTRYBUCJI` `p` on((`t1`.`ID_PROJECT` = `p`.`ID`))
+			)
+			group by `t1`.`ID_PROJECT`, `t1`.`MONTH`
+		";
+	}
+}

+ 8 - 0
SE/superedit-DB_PROCEDURES_CREATE.php

@@ -46,6 +46,14 @@ DEBUG_S(-3,"Deklaruje zmienna SQL do wykonania instalacji procedur",null,__FILE_
 
 $sql['turn_off_database_locking']="SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;";
 
+
+
+
+$sql['KONTAKTY_view']="
+CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `KONTAKTY_view` AS select `u`.`ID` AS `ID`,`u`.`ADM_ACCOUNT` AS `ADM_ACCOUNT`,`u`.`ADM_NAME` AS `ADM_NAME`,`u`.`EMPLOYEE_TYPE` AS `EMPLOYEE_TYPE`,`u`.`ADM_PHONE` AS `ADM_PHONE`,`u`.`EMAIL` AS `EMAIL`,`u`.`A_STATUS` AS `A_STATUS`,`u`.`A_CLASSIFIED` AS `A_CLASSIFIED`,`u`.`A_ADM_COMPANY` AS `A_ADM_COMPANY`,group_concat(`ua`.`ID_ZASOB` separator ',') AS `ID_ZASOB_CSV_NUM` from (`ADMIN_USERS` `u` left join `CRM_AUTH_PROFILE` `ua` on(((`ua`.`REMOTE_ID` = `u`.`ID`) and (`ua`.`REMOTE_TABLE` = 'ADMIN_USERS')))) where (`u`.`A_STATUS` in ('WAITING','NORMAL','MONITOR','WARNING')) group by `u`.`ID`;
+";
+
+
 //! CRM_ZASOBY_BEGIN
 $sql['drop_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="drop function if exists CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path";
 $sql['create_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2

+ 8 - 1
SE/superedit-INSTALL_SES_PROCESY_A.php

@@ -1064,6 +1064,9 @@ return $cmd;
 function INSTALL_GETCOMMANDS_SE($ADMIN_USERNAME,$SERVER_ADDRESS_IP,$ADMIN_USERNAME_PASSWD,$SERVER_MOUNT_POINT_ROOT,$SERVER_ADDRESS,$SERVER_ADDRESS_LDAP_DC,$SERVER_ADDRESS_SHORT,$INSTALL_ROOT,$REMOTE_FOLDER_ROOT,$ADMIN_USERNAME_L1,$ADMIN_USERNAME_L1_PASS,$ADMIN_USERNAME_DIRECTORY,$ADMIN_USERNAME_INITIAL_PASSWD,$BACKUP_USB_DEVICE,$SERVER_VERSION,$OPTIONS) {
 //@2014-09 sqix: po co kasowac - to niebezpieczne?! $cmd[]['rsh']='test -d /Library/Server/Web/Data/Sites/Default/SE/ && rm -R /Library/Server/Web/Data/Sites/Default/SE || echo PASSED';
  //!!! Instalacja i generowanie konfiga - kopiowanie
+ 
+ 
+ 
   $cmd[]['rsh']=' mkdir -p /Library/Server/Web/Data/Sites/Default/SE || echo PASSED '; //zalozenie katalogow
   $cmd[]['rsh']=' mkdir -p /Library/Server/Web/Data/Sites/Default/'.$REMOTE_FOLDER_ROOT.' || echo PASSED '; //zalozenie katalogow
 
@@ -1089,7 +1092,10 @@ function INSTALL_GETCOMMANDS_SE($ADMIN_USERNAME,$SERVER_ADDRESS_IP,$ADMIN_USERNA
   $cmd[]['scp_root']=array($INSTALL_ROOT.'/webdav','/Library/Server/Web/Data/Sites/Default/SE/');  
   $cmd[]['rsh']='mkdir -p /Library/Server/Web/Data/Sites/Default/SE/config';
   $cmd[]['rsh']='rm -R /Library/Server/Web/Data/Sites/Default/SE/config/.config_base_structure* || echo PASSED'; 
-  $cmd[]['scp_root']=array(''.$INSTALL_ROOT.'/.config_base_structure*','/Library/Server/Web/Data/Sites/Default/SE/config/');   //todo do przeniesienia wyzej - struktura musi byc wygenerowana
+  
+  
+  
+  $cmd[]['scp_root']=array(''.$INSTALL_ROOT.'/config/.config_base_structure*','/Library/Server/Web/Data/Sites/Default/SE/config/');   //todo do przeniesienia wyzej - struktura musi byc wygenerowana
 
 
   $cmd[]['scp_root']=array($INSTALL_ROOT.'/config/.cnf--column_init*','/Library/Server/Web/Data/Sites/Default/SE/config/');  
@@ -1165,6 +1171,7 @@ return $cmd;
 }
 
 function INSTALL_GETCOMMANDS_SE_DB_DOMAIN($ADMIN_USERNAME,$SERVER_ADDRESS_IP,$ADMIN_USERNAME_PASSWD,$SERVER_MOUNT_POINT_ROOT,$SERVER_ADDRESS,$SERVER_ADDRESS_LDAP_DC,$SERVER_ADDRESS_SHORT,$INSTALL_ROOT,$REMOTE_FOLDER_ROOT,$ADMIN_USERNAME_L1,$ADMIN_USERNAME_L1_PASS,$ADMIN_USERNAME_DIRECTORY,$ADMIN_USERNAME_INITIAL_PASSWD,$BACKUP_USB_DEVICE,$SERVER_VERSION,$OPTIONS) {
+
 //after always should be run INSTALL_GETCOMMANDS_SE
   $cmd[]['rsh']=' mkdir -p /Library/Server/Web/Data/Sites/Default/SE || echo PASSED '; //zalozenie katalogow
   //! .cnf--default_db

+ 21 - 6
SE/superedit-SQIX_STRUCTURE_DB_SYNC.php

@@ -288,7 +288,7 @@ $config_base_structure=".config_base_structure.php";
 						 
 
 //! set tables used to generate main structure
-$TABLES_STRUCTURE=array('DEVICES_GROUP','GRAFIK_PRACY','GRAFIK_PRACY_HIST','GRAFIK_PRACY_view','SALES_PLAN','SALES_PLAN_HIST','ITEM_LINK_TYPES','ITEM_LINK_TYPES_HIST','ITEM_LINKS','ITEM_LINKS_HIST','TEST_PERMS','TEST_PERMS_HIST','DEVICES','_CRM_PROCES_INIT_STATS','_CRM_PROCES_USER_STATS_wiev','BUILDINGS','BUILDINGS_HIST','SES_VOIP_A','SES_VOIP_A_HIST','SES_TV_A','SES_TV_A_HIST','USERS2_DEALS','USERS2_DEALS_HIST','DEALS_TABLE','DEALS_TABLE_HIST','USERS2_MARKETING','USERS2_MARKETING_HIST','IN7_MK_BAZA_DYSTRYBUCJI','IN7_MK_BAZA_DYSTRYBUCJI_HIST','TELBOXES','TELBOXES_HIST','NETWORKS_SERVERS','NETWORKS_SERVERS_HIST','ADMIN_USERS','ADMIN_USERS_HIST','CRM_IMPORT_TRANSLATE','IN7_PRODUKTY_CECHY','IN7_CECHY','CRM_AUTH_PROFILE','CRM_AUTH_PROFILE_HIST','CRM_CZYNNOSCI','CRM_CZYNNOSCI_HIST','CRM_IMAGE','CRM_LISTA_ZASOBOW','CRM_LISTA_ZASOBOW_HIST','CRM_PROCES','CRM_PROCES_HIST','CRM_PROCES_LOG','CRM_PROCES_LOG_HIST','CRM_PRZYPADEK','CRM_TESTY','CRM_TESTY_HIST','CRM_TESTY_ODPOWIEDZI','CRM_TESTY_ODPOWIEDZI_HIST','CRM_TESTY_PYTANIA','CRM_TESTY_PYTANIA_HIST','CRM_TESTY_WYNIKI','CRM_TESTY_WYNIKI_HIST','CRM_WSKAZNIK','CRM_WSKAZNIK_HIST','DEVICES_HIST','IN7_DZIENNIK_KORESP','IN7_DZIENNIK_KORESP_HIST','USERS2_OFFERS','USERS2_OFFERS_HIST','USERS2_OFFERS_GROUPS','USERS2_OFFERS_GROUPS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','SERVICES','SES_USERS2_A','USERS2','KIKE_AUTH_PROFILE','LDAP_GROUPS','CRM_TESTY_PYTANIA_TO_IMPORT','CRM_TESTY_PYTANIA_TO_IMPORT_HIST','PROBLEMS','PROBLEMS_HIST','COMPANIES','COMPANIES_HIST','_CRM_PROCES_STATS_proc_wiev','_CRM_PROCES_STATS','CRM_PROCES_USER_OCENA_OKRES','CRM_PROCES_USER_OCENA_OKRES_HIST','_CRM_PROCES_USER_STATS_wiev_to_group','projects_budget_year_month','projects_budget_year_month_HIST','in7_dziennik_koresp_budget_view','in7_dziennik_koresp_budget_main_view','budget_project_to_realization_view','budget_project_to_realization_main_view');
+$TABLES_STRUCTURE=array('_ANALIZA_HISTORII_ALL','DEVICES_GROUP','GRAFIK_PRACY','GRAFIK_PRACY_HIST','GRAFIK_PRACY_view','SALES_PLAN','SALES_PLAN_HIST','ITEM_LINK_TYPES','ITEM_LINK_TYPES_HIST','ITEM_LINKS','ITEM_LINKS_HIST','TEST_PERMS','TEST_PERMS_HIST','DEVICES','_CRM_PROCES_INIT_STATS','_CRM_PROCES_USER_STATS_wiev','BUILDINGS','BUILDINGS_HIST','SES_VOIP_A','SES_VOIP_A_HIST','SES_TV_A','SES_TV_A_HIST','USERS2_DEALS','USERS2_DEALS_HIST','DEALS_TABLE','DEALS_TABLE_HIST','USERS2_MARKETING','USERS2_MARKETING_HIST','IN7_MK_BAZA_DYSTRYBUCJI','IN7_MK_BAZA_DYSTRYBUCJI_HIST','TELBOXES','TELBOXES_HIST','NETWORKS_SERVERS','NETWORKS_SERVERS_HIST','ADMIN_USERS','ADMIN_USERS_HIST','CRM_IMPORT_TRANSLATE','IN7_PRODUKTY_CECHY','IN7_CECHY','CRM_AUTH_PROFILE','CRM_AUTH_PROFILE_HIST','CRM_CZYNNOSCI','CRM_CZYNNOSCI_HIST','CRM_IMAGE','CRM_LISTA_ZASOBOW','CRM_LISTA_ZASOBOW_HIST','CRM_PROCES','CRM_PROCES_HIST','CRM_PROCES_LOG','CRM_PROCES_LOG_HIST','CRM_PRZYPADEK','CRM_TESTY','CRM_TESTY_HIST','CRM_TESTY_ODPOWIEDZI','CRM_TESTY_ODPOWIEDZI_HIST','CRM_TESTY_PYTANIA','CRM_TESTY_PYTANIA_HIST','CRM_TESTY_WYNIKI','CRM_TESTY_WYNIKI_HIST','CRM_WSKAZNIK','CRM_WSKAZNIK_HIST','DEVICES_HIST','IN7_DZIENNIK_KORESP','IN7_DZIENNIK_KORESP_HIST','USERS2_OFFERS','USERS2_OFFERS_HIST','USERS2_OFFERS_GROUPS','USERS2_OFFERS_GROUPS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','SERVICES','SES_USERS2_A','USERS2','KIKE_AUTH_PROFILE','LDAP_GROUPS','CRM_TESTY_PYTANIA_TO_IMPORT','CRM_TESTY_PYTANIA_TO_IMPORT_HIST','PROBLEMS','PROBLEMS_HIST','COMPANIES','COMPANIES_HIST','_CRM_PROCES_STATS_proc_wiev','_CRM_PROCES_STATS','CRM_PROCES_USER_OCENA_OKRES','CRM_PROCES_USER_OCENA_OKRES_HIST','KONTAKTY_view','_CRM_PROCES_USER_STATS_wiev_to_group','projects_budget_year_month','projects_budget_year_month_HIST','in7_dziennik_koresp_budget_main_view','in7_dziennik_koresp_budget_view','budget_project_to_realization_view','budget_project_to_realization_main_view');
 $TABLES_STRUCTURE_DATA=array('CRM_PRZYPADEK');
 
 DEBUG_S(-3,'Lacze z bazami param: REMOTE_DB_ZASOB_ID',array($REMOTE_DB_ZASOB_ID,$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['INTERFACE_ADDR'],$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_USER'],$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_DATABASE']),__FILE__,__FUNCTION__,__LINE__ );
@@ -705,17 +705,32 @@ $CONNLOCAL->query('set global max_allowed_packet=1000000000');
 							
 							$zas_id_param_out_repl=explode('&ZASOB_ID=', $h->DESC);
 							$zas_id_param_out_repl=explode('#', $zas_id_param_out_repl[1]);
+							$id_zas_oryg_h_DESC=$h->DESC; //oryginalna wartosc opisu
+							
+							
+							$zas_id_param_out_repl_2=explode('&ZASOB_ID=', $h->DESC);
+							$zas_id_param_out_repl_2=explode('&', $zas_id_param_out_repl_2[1]);
 							
 							$sql_to_find_parent="select DST_TABLE_ID from CRM_IMPORT_TRANSLATE where REM_TABLE='CRM_LISTA_ZASOBOW' and SRC_TABLE_ID='".$zas_id_param_out_repl[0]."' ;" ;
 							$res_to_find_parent_param=$CONNREMOTE->query($sql_to_find_parent) or DEBUG_S(-3,'Problem ze sql ',$sql_to_find_parent,__FILE__, __FUNCTION__, __LINE__) or die1(''); 
+							//proba 1 dla warunku ID_ZASOB=xxx#
 							while($h_res_to_find_TS=mysql_fetch_object($res_to_find_parent_param)) {
-
-								$h->DESC=preg_replace('/&ZASOB_ID='.$zas_id_param_out_repl[0].'#/', '&ZASOB_ID='.$h_res_to_find_TS->DST_TABLE_ID.'#', $h->DESC);
-								$sql_upd="update CRM_LISTA_ZASOBOW set `DESC`='".$CONNREMOTE->_($h->DESC)."' where ID=".$h->ID." ; ";
+								$h->DESC=preg_replace('/&ZASOB_ID='.$zas_id_param_out_repl[0].'#/', '&ZASOB_ID='.$h_res_to_find_TS->DST_TABLE_ID.'#', $id_zas_oryg_h_DESC);
+								if(strlen($h->DESC)>0) { $sql_upd="update CRM_LISTA_ZASOBOW set `DESC`='".$CONNREMOTE->_($h->DESC)."' where ID=".$h->ID." ; ";
 								$CONNREMOTE->query($sql_upd) or die('Error with upd TYPESPECIAL PARAM_OUT line: 709 ');
-								DEBUG_S(-3,'Nadpisuje TYPESPECIAL PARAM_OUT, ktory ma uzyty URL z ID_ZASOB',$sql_upd,__FILE__,__FUNCTION__,__LINE__);
+								DEBUG_S(-3,'Nadpisuje TYPESPECIAL PARAM_OUT, ktory ma uzyty URL z ID_ZASOB',$sql_upd,__FILE__,__FUNCTION__,__LINE__);	
+								}							
 							}
-							
+							//proba 2 dla warunku ID_ZASOB=xxx&
+							$res_to_find_parent_param=$CONNREMOTE->query($sql_to_find_parent) or DEBUG_S(-3,'Problem ze sql ',$sql_to_find_parent,__FILE__, __FUNCTION__, __LINE__) or die1(''); 
+							//proba 1 dla warunku ID_ZASOB=xxx#
+							while($h_res_to_find_TS=mysql_fetch_object($res_to_find_parent_param)) {
+								$h->DESC=preg_replace('/&ZASOB_ID='.$zas_id_param_out_repl_2[0].'&/', '&ZASOB_ID='.$h_res_to_find_TS->DST_TABLE_ID.'&', $id_zas_oryg_h_DESC);
+								if(strlen($h->DESC)>0) { $sql_upd="update CRM_LISTA_ZASOBOW set `DESC`='".$CONNREMOTE->_($h->DESC)."' where ID=".$h->ID." ; ";
+								$CONNREMOTE->query($sql_upd) or die('Error with upd TYPESPECIAL PARAM_OUT line: 709 ');
+								DEBUG_S(-3,'Nadpisuje TYPESPECIAL PARAM_OUT, ktory ma uzyty URL z ID_ZASOB',$sql_upd,__FILE__,__FUNCTION__,__LINE__);
+								}								
+							}							
 							
 						}
 					

+ 163 - 24
SE/superedit-USERS2_WINDYKACJA_STATUS.php

@@ -585,6 +585,9 @@ class WindykacjaView {
 			}
 		}
 
+		$company = WindykacjaStatsModel::get_company($user);
+		$nr_konta = FunkcjeL1::bankowy_formatuj_nrach(FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0));
+
 		echo'<h3>';
 			echo' <a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&_p=".V::get('_p', '', $_REQUEST)."&_f=".V::get('_f', '', $_REQUEST)."&_oby=".V::get('_oby', '', $_REQUEST)."&_odir=".V::get('_odir', '', $_REQUEST).'">'."Klienci".'</a>';
 			echo ' &raquo; <code style="font-size:normal;color:green;">'."[".$user->id_users."]".'</code>';
@@ -634,6 +637,14 @@ class WindykacjaView {
 				echo "ul. ".$user->P_ADDRESS_STREET." ".$user->P_ADDRESS_HOUSE."/".$user->P_ADDRESS_HOME.", ".$user->P_ADDRESS_POST_CODE." ".$user->P_ADDRESS_CITY;
 			echo'</td>';
 		echo'</tr>';
+		?>
+		<?php if ($user->P_ADRESS_KORESP_1282) : ?>
+			<tr>
+				<th title="Adres do korespondencji">Adres koresp.</th>
+				<td><?php echo $user->P_ADRESS_KORESP_1282; ?></td>
+			</tr>
+		<?php endif; ?>
+		<?php
 		echo'<tr>';
 			echo'<th>' . "Pesel:" . '</th>';
 			echo'<td>';
@@ -699,6 +710,12 @@ class WindykacjaView {
 				}
 			echo'</td>';
 		echo'</tr>';
+		?>
+		<tr>
+			<th>Nr konta:</th>
+			<td><?php echo $nr_konta; ?></td>
+		</tr>
+		<?php
 		echo '</table>';
 
 		echo '</td><td>' . "&nbsp;" . '</td><td style="vertical-align:top">';
@@ -1365,11 +1382,14 @@ function frm_kontakt_add_id_koresp(frm){
 		$cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
 		$cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
 		$cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
+		$cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
 		$cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
 		$cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
 		$cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
 		$cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
 		$cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
+		$cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
+		$cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
 		$cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
 		$cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności<br> pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
 		$cols['PAY_DATE'] = array('label'=>'data wymagalności<br> ostatniej faktury', 'title'=>'PAY_DATE');
@@ -1445,6 +1465,15 @@ function frm_kontakt_add_id_koresp(frm){
 					$cell_out = "ul. " . $user->P_ADDRESS_STREET . " " . $user->P_ADDRESS_HOUSE . "/" . $user->P_ADDRESS_HOME . ", " . $user->P_ADDRESS_POST_CODE . " " . $user->P_ADDRESS_CITY;
 					echo '<i title="' . (($user->BAD_ADDRESS)? "błędny adres zameldowania: " : '') . $cell_out . '">' . ((strlen($cell_out) > 30)? mb_substr($cell_out, 0, 30, "UTF-8") . ' ...' : $cell_out) . '</i>';
 				echo'</td>';
+				?>
+				<?php if ($user->P_ADRESS_KORESP_1282) : ?>
+					<td title="Adres do korespondencji: <?php echo $user->P_ADRESS_KORESP_1282; ?>">
+						<?php echo $user->P_ADRESS_KORESP_1282; ?>
+					</td>
+				<?php else: ?>
+					<td></td>
+				<?php endif; ?>
+				<?php
 				echo '<td>' . $user->P_PHONE . '</td>';
 				echo '<td>' . $user->user_mail_contact . '</td>';
 				echo'<td>';
@@ -1475,6 +1504,26 @@ function frm_kontakt_add_id_koresp(frm){
 					}
 					echo '</nobr>';
 				echo'</td>';
+				echo'<td>';
+					echo '<nobr>';
+					if ($user->PAY_SALDO_30_DNI != 0) {
+						$col = ($user->PAY_SALDO_30_DNI > 0)? '#333' : '#f00';
+						echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_30_DNI} zł" . '</span>';
+					} else {
+						echo'<span style="color:#666">' . "0" . '</span>';
+					}
+					echo '</nobr>';
+				echo'</td>';
+				echo'<td>';
+					echo '<nobr>';
+					if ($user->PAY_SALDO_ISSUED != 0) {
+						$col = ($user->PAY_SALDO_ISSUED > 0)? '#333' : '#f00';
+						echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_ISSUED} zł" . '</span>';
+					} else {
+						echo'<span style="color:#666">' . "0" . '</span>';
+					}
+					echo '</nobr>';
+				echo'</td>';
 				echo'<td>';
 					if ($user->PAY_FVAT > 0) {
 						$st = ($user->PAY_FVAT > 1)? ' style="color:#f00"' : '';
@@ -1540,12 +1589,15 @@ function frm_kontakt_add_id_koresp(frm){
 		$cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
 		$cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
 		$cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
+		$cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
 		$cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
 		$cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
 		$cols['P_PESEL'] = array('label'=>'pesel', 'title'=>'P_PESEL');
 		$cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
 		$cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
 		$cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
+		$cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
+		$cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
 		$cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
 		$cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
 		$cols['PAY_DATE'] = array('label'=>'data wymagalności ostatniej faktury', 'title'=>'PAY_DATE');
@@ -1553,6 +1605,7 @@ function frm_kontakt_add_id_koresp(frm){
 		$cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
 		$cols['LAST_PAY_VALUE'] = array('label'=>'kwota ostatniej wpłaty', 'title'=>'LAST_PAY_VALUE');
 		$cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
+		$cols['ACCOUNT_NUMBER'] = array('label'=>'nr konta', 'title'=>'ACCOUNT_NUMBER');
 
 		$out_cols = array();
 		foreach ($cols as $k_field => $v_params) {
@@ -1573,12 +1626,19 @@ function frm_kontakt_add_id_koresp(frm){
 			$out_cols[] = '"' . (($user->STATUS == 9)? "Z" : "0") . '"';
 			$out_cols[] = '"' . $user->P_NAME.' '.$user->P_NAME_SECOND . '"';
 			$out_cols[] = '"' . "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}" . '"';
+			if ($user->P_ADRESS_KORESP_1282) {
+				$out_cols[] = '"' . $user->P_ADRESS_KORESP_1282 . '"';
+			} else {
+				$out_cols[] = '""';
+			}
 			$out_cols[] = '"' . $user->P_PHONE . '"';
 			$out_cols[] = '"' . $user->user_mail_contact . '"';
 			$out_cols[] = '"' . $user->P_PESEL . '"';
 			$out_cols[] = '"' . $user->A_STATUS . '"';
 			$out_cols[] = '"' . $user->A_STATUS_UPDATE_DATE . '"';
 			$out_cols[] = '"' . (($user->PAY_SALDO != 0)? "{$user->PAY_SALDO} zł" : "0") . '"';
+			$out_cols[] = '"' . (($user->PAY_SALDO_30_DNI != 0)? "{$user->PAY_SALDO_30_DNI} zł" : "0") . '"';
+			$out_cols[] = '"' . (($user->PAY_SALDO_ISSUED != 0)? "{$user->PAY_SALDO_ISSUED} zł" : "0") . '"';
 			$out_cols[] = '"' . $user->PAY_FVAT . '"';
 			$out_cols[] = '"' . (($user->PAY_DATE_FIRST_FVAT != '0000-00-00')? $user->PAY_DATE_FIRST_FVAT : '') . '"';
 			$out_cols[] = '"' . (($user->PAY_DATE != '0000-00-00')? $user->PAY_DATE : '') . '"';
@@ -1586,6 +1646,7 @@ function frm_kontakt_add_id_koresp(frm){
 			$out_cols[] = '"' . (($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00')? $user->LAST_PAY_DATE : '---') . '"';
 			$out_cols[] = '"' . $user->LAST_PAY_VALUE . '"';
 			$out_cols[] = '"' . (($user->PAY_TERM != '0000-00-00')? $user->PAY_TERM : '') . '"';
+			$out_cols[] = '"' . $user->ACCOUNT_NUMBER . '"';
 			echo implode(";", $out_cols) . "\n";
 		}
 	}
@@ -3183,6 +3244,54 @@ class BillingDocs {
 		return round($this->_saldo, 2);
 	}
 
+	public function get_saldo_30_dni() {
+		// `PAY_SALDO_30_DNI` bez fv z terminem płatności < 30 dni
+		$saldo_30_dni = 0;
+		$dateMinus30dni = date('Y-m-d', mktime(0,0,0, date('n'), date('j') - 30, date('Y')));
+		foreach ($this->_docs as $kData => $vDocs) {
+			foreach ($vDocs as $vDoc) {
+				if ($vDoc instanceof BillingDoc) {
+					if ('FVAT' == $vDoc->get_type()) {// TODO: if FVAT then use only date PAYMENT_TERM >= 30 dni
+						if ($vDoc->get('PAYMENT_TERM') > $dateMinus30dni) {
+							//echo'<pre>POMIŃ! $vDoc pay_term('.$vDoc->get('PAYMENT_TERM').') ';print_r($vDoc);echo'</pre>';
+						} else {
+							//echo'<pre>$vDoc pay_term('.$vDoc->get('PAYMENT_TERM').'/'.($vDoc->get('PAYMENT_TERM') > $dateMinus30dni).') ';print_r($vDoc);echo'</pre>';
+							$saldo_30_dni += $vDoc->get_saldo();
+						}
+					} else {
+						$saldo_30_dni += $vDoc->get_saldo();
+					}
+				}
+			}
+		}
+		$saldo_30_dni = round($saldo_30_dni, 2);
+		if ($saldo_30_dni === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
+			$saldo_30_dni = 0.0;
+		}
+		return $saldo_30_dni;
+	}
+
+	public function get_saldo_issued() {
+		// `PAY_SALDO_ISSUED` fv wg daty wystawienia
+		$saldo_issued = 0;
+		foreach ($this->_docs as $kData => $vDocs) {
+			foreach ($vDocs as $vDoc) {
+				if ($vDoc instanceof BillingDoc) {
+					if (1) {// TODO: if FVAT then use SELL_DATE instead of PAYMENT_TERM
+						$saldo_issued += $vDoc->get_saldo();
+					} else {
+						$saldo_issued += $vDoc->get_saldo();
+					}
+				}
+			}
+		}
+		$saldo_issued = round($saldo_issued, 2);
+		if ($saldo_issued === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
+			$saldo_issued = 0.0;
+		}
+		return $saldo_issued;
+	}
+
 	public function get_docs() {
 		return $this->_docs;
 	}
@@ -3465,9 +3574,13 @@ class WindykacjaStatsHelper {
 
 		$saldo = $billing_docs->get_saldo();
 		$data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");
-
 		$data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
 		$data_arr["A_RECORD_UPDATE_AUTHOR"] = "stat-update";
+
+		$company = WindykacjaStatsModel::get_company($user);
+		$nr_konta = FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0);
+		$data_arr["ACCOUNT_NUMBER"] = $nr_konta;
+		$data_arr["SERVICES_STREETS"] = WindykacjaStatsModel::getAllServicesStreetsCSV($user);
 		// set default values
 		//$data_arr["A_STATUS"] = "WAITING";
 		//$data_arr["PAY_FVAT"] = 0;
@@ -3482,6 +3595,8 @@ class WindykacjaStatsHelper {
 			}
 		}
 		$data_arr["PAY_SALDO"] = $saldo;
+		$data_arr["PAY_SALDO_30_DNI"] = $billing_docs->get_saldo_30_dni();
+		$data_arr["PAY_SALDO_ISSUED"] = $billing_docs->get_saldo_issued();
 		$data_arr["PAY_FVAT"] = 0;
 		$data_arr["PAY_DATE_FIRST_FVAT"] = '0000-00-00';
 		$lastFvatDoc = $billing_docs->get_last_fvat_doc();
@@ -3581,6 +3696,7 @@ class WindykacjaStatsHelper {
 				//$data_arr["PAY_DATE"] = '0000-00-00';// TODO: ?
 			}
 		}
+		if(V::get('DBG_LAST_FVAT_PAY_TERM', '', $_GET)){echo'<pre>data_arr: ';print_r($data_arr);echo'</pre>';}
 
 		$sql_arr = array();
 		foreach ($data_arr as $k => $v) {
@@ -4625,6 +4741,7 @@ class WindykacjaStatsModel {
 				, a.`P_OTHER_DOC`
 				, a.`user_mail_contact`
 				, a.`is_firma`
+				, a.`P_ADRESS_KORESP_1282`
 				, w.`ID` as WINDYKACJA_ID
 				, w.`ID_BILLING_USERS`
 				, w.`A_STATUS`
@@ -4646,6 +4763,8 @@ class WindykacjaStatsModel {
 				, w.`LAST_PAY_VALUE`
 				, w.`LAST_FVAT_PAY_TERM`
 				, w.`LAST_FVAT_VALUE`
+				, w.`PAY_SALDO_30_DNI`
+				, w.`PAY_SALDO_ISSUED`
 				, w.`BAD_ADDRESS`
 				-- , (select bu.`BILLING_OWNER` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as BILLING_OWNER
 				-- , (select bu.`STATUS` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as STATUS
@@ -4654,6 +4773,7 @@ class WindykacjaStatsModel {
 				, w.`NR_SPRAWY_KRD`
 				, w.`NR_SPRAWY_SAD`
 				, w.`NR_SPRAWY_KOMORNIK`
+				, w.`ACCOUNT_NUMBER`
 		";
 		return $sql_select;
 	}
@@ -4856,7 +4976,28 @@ class WindykacjaStatsModel {
 		return $_cache[$cache_key];
 	}
 
-	public static function get_umowy_from_l2(&$user) {
+	public static function getAllServicesStreetsCSV($user) {
+		$streets = array();
+		$db = DB::getDB();
+		$sql = "
+			select s.`S_ADDRESS_STREET`
+			from `COMPANIES` c
+				join `DEALS_TABLE` d on(d.`ID_BILLING_USERS`=c.`ID`)
+				join `SERVICES` s on(s.`ID_BILLING_USERS`=c.`ID` and s.`ID_DEALS_TABLE`=d.`ID`)
+			where c.`ID`='{$user->ID}'
+		--		and c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
+				and s.`NAME_LIST_SERVICES` in ('TV','USERS2','VOIP')
+				and s.`A_STATUS` not in ('DELETED')
+		";
+		$res = $db->query($sql);
+		while ($r = $db->fetch($res)) {
+			$streets[$r->S_ADDRESS_STREET] = true;
+		}
+		$streets = (!empty($streets))? implode(',', array_keys($streets)) : '';
+		return $streets;
+	}
+
+	public static function get_umowy_from_l2($user) {
 		$ret = array();
 		$db_webone = DB::getDB();
 		if (!$db_webone) {
@@ -4977,7 +5118,7 @@ class WindykacjaStatsModel {
 				BILLS_FVAT.*
 				, count(BILLS_FVAT_POS.ID) as ILOSC_POZYCJI
 				, BILLS_FVAT_POS.ID_BILLS_FVAT
-				, round(sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)), 2) as WARTOSC
+				, 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`
@@ -5558,27 +5699,25 @@ class Lay_Html_Toggle {
 
 class FunkcjeL1 {
 
-	public static function bankowy_make_nrach($NR_RACH_MASS_PAY,$ID_BILLING_USERS,$ID_BILLING_NUMBERS) {
+	public static function bankowy_make_nrach($NR_RACH_MASS_PAY, $ID_BILLING_USERS, $ID_BILLING_NUMBERS) {
 		//echo "TTUTAJ <hr> AASDADS f. bankowy_make_nrach($NR_RACH_MASS_PAY,$ID_BILLING_USERS,$ID_BILLING_NUMBERS) <br>";
-		$ID_BILLING_USERS=str_pad($ID_BILLING_USERS,10,0,STR_PAD_LEFT) ;
-		$ID_BILLING_NUMBERS=str_pad($ID_BILLING_NUMBERS,2,0,STR_PAD_LEFT) ; 
-		$ID_BILLING_NUMBERS=substr($ID_BILLING_NUMBERS,-2) ; 
-		$NN = self::bankowy_make($NR_RACH_MASS_PAY.$ID_BILLING_NUMBERS.$ID_BILLING_USERS) ;
-		if($NN) return $NN.$NR_RACH_MASS_PAY.$ID_BILLING_NUMBERS.$ID_BILLING_USERS ;
+		$ID_BILLING_USERS = str_pad($ID_BILLING_USERS, 10, 0, STR_PAD_LEFT);
+		$ID_BILLING_NUMBERS = str_pad($ID_BILLING_NUMBERS, 2, 0, STR_PAD_LEFT);
+		$ID_BILLING_NUMBERS = substr($ID_BILLING_NUMBERS, -2);
+		$NN = self::bankowy_make($NR_RACH_MASS_PAY . $ID_BILLING_NUMBERS . $ID_BILLING_USERS);
+		if ($NN) return $NN . $NR_RACH_MASS_PAY . $ID_BILLING_NUMBERS . $ID_BILLING_USERS;
 	}
 
 	public static function bankowy_make($nrb) {
-			$nrb=preg_replace("/[^0-9]/","",$nrb);
-			if (strlen($nrb)<>24) return 0;
-		$nrb .="252100";
-					$modulo=self::my_bcmod($nrb,97) ;
-					$modulo= 98 - $modulo ;
-		if(strlen($modulo)==1) $modulo="0".$modulo ;
-		return $modulo ;
-		if ($nrb[0]==$liczba[0] and $nrb[1]==$liczba[1]){
-				return 1;
-		}
-		return 0;
+		$nrb = preg_replace("/[^0-9]/", "", $nrb);
+		if (strlen($nrb) <> 24) return 0;
+		$nrb .= "252100";
+		$modulo = self::my_bcmod($nrb, 97);
+		$modulo = 98 - $modulo;
+		if (strlen($modulo) == 1) {
+			$modulo = "0" . $modulo;
+		}
+		return $modulo;
 	}
 
 	public static function my_bcmod($x, $y) {
@@ -5596,12 +5735,12 @@ class FunkcjeL1 {
 	public static function bankowy_formatuj_nrach($NR_RACH_MASS_PAY) {
 		$NR_RACH_MASS_PAY_FORMATTED = '';
 		if ($NR_RACH_MASS_PAY) {
-			for ($i=4; $i<(strlen($NR_RACH_MASS_PAY)); $i=$i+4) {
-				$NR_RACH_MASS_PAY_FORMATTED = " ".substr($NR_RACH_MASS_PAY,-$i,4).$NR_RACH_MASS_PAY_FORMATTED;
+			for ($i = 4; $i < strlen($NR_RACH_MASS_PAY); $i += 4) {
+				$NR_RACH_MASS_PAY_FORMATTED = " " . substr($NR_RACH_MASS_PAY, -$i, 4) . $NR_RACH_MASS_PAY_FORMATTED;
 			}
-			$NR_RACH_MASS_PAY_FORMATTED = substr($NR_RACH_MASS_PAY,0,$i-strlen($NR_RACH_MASS_PAY))." ".$NR_RACH_MASS_PAY_FORMATTED;
+			$NR_RACH_MASS_PAY_FORMATTED = substr($NR_RACH_MASS_PAY, 0, $i - strlen($NR_RACH_MASS_PAY)) . " " . $NR_RACH_MASS_PAY_FORMATTED;
 		}
-		return $NR_RACH_MASS_PAY_FORMATTED ;
+		return $NR_RACH_MASS_PAY_FORMATTED;
 	}
 
 	public static function policz($l,$t1,$t2,$t3) {

+ 14 - 22
SE/superedit-bm_make_faktura.php

@@ -1,25 +1,17 @@
 <?php
 
-		Lib::loadClass('TableAcl');
-		Lib::loadClass('UserAcl');
-		Lib::loadClass('Billing_html');
-		$billing=new Billing_html('931');
-
-
-		$billing->set_client_filter=$_REQUEST['ARG1_VAL'];
-		$billing->lista_faktur(); 	
-
-		DEBUG_S(-3,'Billing',$billing,__FILE__,__FUNCTION__,__LINE__);
-	
-
-	
-	
-	
-//	$db=DB::getDb();
-//	DEBUG_S(-3,'db',$_SESSION,__FILE__,__FUNCTION__,__LINE__);
-function bm_make_faktura() {	
+function bm_make_faktura() {
+	Lib::loadClass('TableAcl');
+	Lib::loadClass('UserAcl');
+	Lib::loadClass('Billing_html');
+
+	$idKlient = V::get('ARG1_VAL', 0, $_REQUEST, 'int');
+	if ($idKlient <= 0) {
+		echo '<div class="alert alert-danger">Błędny numer klienta!</div>';
+		return;
+	}
+
+	$billing = new Billing_html('931');
+	$billing->set_client_filter = $idKlient;
+	$billing->showListaFaktur();
 }
-
-
-
-?>

+ 14 - 23
SE/superedit-bm_show_document.php

@@ -1,26 +1,17 @@
 <?php
 
-		Lib::loadClass('TableAcl');
-		Lib::loadClass('UserAcl');
-		Lib::loadClass('Billing_html');
-		$billing=new Billing_html('931');
-
-
-		//$billing->set_client_filter=$_REQUEST['ARG1_VAL'];
-		$billing->bm_show_document($_REQUEST['ARG1_VAL']); 	
-
-		DEBUG_S(3,'Billing',$billing,__FILE__,__FUNCTION__,__LINE__);
-	
-
-	
-	
-	
-//	$db=DB::getDb();
-//	DEBUG_S(-3,'db',$_SESSION,__FILE__,__FUNCTION__,__LINE__);
-function bm_show_document() {	
-	die('--'); //TODO disable dol
+function bm_show_document() {
+	Lib::loadClass('TableAcl');
+	Lib::loadClass('UserAcl');
+	Lib::loadClass('Billing_html');
+
+	$idDocument = V::get('ARG1_VAL', 0, $_REQUEST, 'int');
+	if ($idDocument <= 0) {
+		echo '<div class="alert alert-danger">Błędny numer dokumentu!</div>';
+		exit;
+	}
+
+	$billing = new Billing_html('931');
+	$billing->bm_show_document($idDocument);
+	exit;
 }
-
-
-
-?>

Некоторые файлы не были показаны из-за большого количества измененных файлов