Kaynağa Gözat

+ pozostałe OD i DO

Piotr Labudda 6 yıl önce
ebeveyn
işleme
f99aa982bb
3 değiştirilmiş dosya ile 474 ekleme ve 74 silme
  1. 108 31
      tools/Bocian.php
  2. 167 35
      tools/Bocian.php.addItemToRaport.js
  3. 199 8
      tools/Bocian.php.view.js

+ 108 - 31
tools/Bocian.php

@@ -148,11 +148,13 @@ public static $helpEmailTo = 'biuro@bialnet.com.pl'; // todo:email na który zos
 		echo UI::h('link', ['rel'=>"stylesheet", 'type'=>"text/css", 'href'=>"static/sweetalert2.min.css"]);
 		Theme::top();
 		//echo '<div id="smad-wrapper">'; // todo: sprawdzi  czy można usunać
-		echo '<div class="container-bi_audit_form_pracownicy_raport" style="display: none;"></div>';
-		echo '<div class="container-bi_audit_form_kontrahenci_raport" style="display: none;"></div>';
-		echo '<div class="container-bi-audit_form_operacyjna_baza_zgloszen" style="display:none;"></div>';
-	//	echo '<div class="container-bi_audit_form_raport_data" style="display: none;"></div>';
+		echo '<div id="bi_audit_header"></div>' . "\n";
+		echo '<div class="container-bi_audit_form_pracownicy_raport" style="display: none;"></div>' . "\n";
+		echo '<div class="container-bi_audit_form_kontrahenci_raport" style="display: none;"></div>' . "\n";
+		echo '<div class="container-bi-audit_form_operacyjna_baza_zgloszen" style="display:none;"></div>' . "\n";
+		//	echo '<div class="container-bi_audit_form_raport_data" style="display: none;"></div>';
 
+		echo UI::h('script', ['src'=>"static/vendor.js?v=71baa97d", 'type'=>"text/javascript"]);
 		UI::inlineJS(__FILE__ . '.view.js', [
 			'BASE_URLS' => Request::getPathUri(),
 			'URL_FETCH_KONTRAHENCI_POWIAZANIA' => $this->getLink('fetchEnergaRumKontrahenciPowiazaniaAjax'),
@@ -195,20 +197,27 @@ public static $helpEmailTo = 'biuro@bialnet.com.pl'; // todo:email na który zos
 				return "f_{$fieldName}";
 			}, self::$FIELD_LIST_KONTRAHENCI),
 			'CURRENT_DATE' => date("j.n.Y"),
-		]);
-		echo UI::h('script', ['src'=>"static/vendor.js?v=71baa97d", 'type'=>"text/javascript"]);
-		UI::inlineJS(__FILE__ . '.addItemToRaport.js', [
-			'URL_FETCH_FROM_BAZA' => $this->getLink('fetchFromBazaAjax'),
-			'URL_SAVE_TO_DB' => $this->getLink('saveToPracownicyAjax'),
-			'DBG' => V::get('DBG', 0, $_GET),
-			'FUNCTION_NAME' => "createPracownikAjax",
+			'STORE_NAME' => "bocianRaportStore",
 		]);
 		UI::inlineJS(__FILE__ . '.addItemToRaport.js', [
 			'URL_FETCH_FROM_BAZA' => $this->getLink('fetchFromBazaAjax'),
-			'URL_SAVE_TO_DB' =>$this->getLink('saveToKontrahenciAjax'),
+			// 'URL_SAVE_TO_DB' => $this->getLink('saveToPozostaleOdDoAjax'),
 			'DBG' => V::get('DBG', 0, $_GET),
-			'FUNCTION_NAME' => "createKontrahentAjax",
+			'FUNCTION_NAME' => "addPozostaleOdDo",
+			'STORE_NAME' => "bocianRaportStore",
 		]);
+		// UI::inlineJS(__FILE__ . '.addItemToRaport.js', [
+		// 	'URL_FETCH_FROM_BAZA' => $this->getLink('fetchFromBazaAjax'),
+		// 	'URL_SAVE_TO_DB' => $this->getLink('saveToPozostaleOdDoAjax'),
+		// 	'DBG' => V::get('DBG', 0, $_GET),
+		// 	'FUNCTION_NAME' => "createPracownikAjax",
+		// ]);
+		// UI::inlineJS(__FILE__ . '.addItemToRaport.js', [
+		// 	'URL_FETCH_FROM_BAZA' => $this->getLink('fetchFromBazaAjax'),
+		// 	'URL_SAVE_TO_DB' => $this->getLink('saveToPozostaleOdDoAjax'),
+		// 	'DBG' => V::get('DBG', 0, $_GET),
+		// 	'FUNCTION_NAME' => "createKontrahentAjax",
+		// ]);
 		UI::inlineJS(__FILE__ . '.graphShowHide.js', [
 			'DBG' => V::get('DBG', 0, $_GET),
 			'FIELD_LIST_PRACOWNICY' => array_merge(
@@ -229,6 +238,27 @@ public static $helpEmailTo = 'biuro@bialnet.com.pl'; // todo:email na który zos
 	}
 
 
+	public function saveToPozostaleOdDoAjaxAction() {
+		 Response::sendTryCatchJson(array($this, 'saveToPozostaleOdDoAjax'), $args = 'JSON_FROM_REQUEST_BODY');
+	}
+	public function saveToPozostaleOdDoAjax($args) {
+		DBG::log($args, 'array', "saveToPozostaleOdDoAjax args");
+		$baza = V::get('baza', '', $args); // namespace
+		$item = V::get('item', [], $args); // [ '@primaryKey' => int, ... ]
+		$from = V::get('from', [], $args); // OD | DO
+		if (empty($item)) throw new Exception("Brak danych do zapisania");
+		switch ($baza) {
+			case 'default_db/BI_audit_KRS/BI_audit_KRS':
+			case 'default_db/BI_audit_KRS_person/BI_audit_KRS_person':
+			case 'default_db/BI_audit_MSIG/BI_audit_MSIG':
+			case 'default_db/BI_audit_MSIG_person/BI_audit_MSIG_person':
+			case 'default_db/BI_audit_CEIDG/BI_audit_CEIDG':
+			default: throw new Exception("Not implemented ");
+		}
+
+		die("TODO: 500! baza({$baza}) pk({$item['@primaryKey']})");
+	}
+
 	public function saveToPracownicyAjaxAction() {
 		 Response::sendTryCatchJson(array($this, 'saveToPracownicyAjax'), $args = 'JSON_FROM_REQUEST_BODY');
 	}
@@ -246,25 +276,8 @@ public static $helpEmailTo = 'biuro@bialnet.com.pl'; // todo:email na który zos
 			case 'default_db/BI_audit_MSIG/BI_audit_MSIG': return $this->saveMSIGToPracownicyAjax($item);
 			case 'default_db/BI_audit_MSIG_person/BI_audit_MSIG_person': return $this->saveMSIGPersonToPracownicyAjax($item);
 			case 'default_db/BI_audit_CEIDG/BI_audit_CEIDG': return $this->saveCEIDGToPracownicyAjax($item);
-
 		}
 	}
-	//   "@primaryKey": "161323",
-  //   "A_kod": "80-299",
-  //   "A_kraj": "POLSKA",
-  //   "A_miejscowosc": "GDAŃSK",
-  //   "A_nrDomu": "54C",
-  //   "A_nrLokalu": null,
-  //   "A_poczta": "GDAŃSK",
-  //   "A_ulica": "BARNIEWICKA",
-  //   "ID": "161323",
-  //   "S_kraj": "POLSKA",
-  //   "S_miejscowosc": "GDAŃSK",
-  //   "S_wojewodztwo": "POMORSKIE",
-  //   "krs": "0000223476",
-  //   "nazwa": "BIALL Sp. z o.o.",
-  //   "nip": "6040018535",
-  //   "regon": "193106935",
 	function saveKRSToPracownicyAjax($item) {
 		$companyName = V::get('nazwa', '', $item);
 		$companyNip = V::get('nip', '', $item);
@@ -539,6 +552,7 @@ public static $helpEmailTo = 'biuro@bialnet.com.pl'; // todo:email na który zos
 	}
 	public function saveToKontrahenciAjax($args) {
 		DBG::log($args, 'array', "saveToKontrahenciAjaxActionAjax args");
+		// $baza + $item['@primaryKey']
 		$baza = V::get('baza', '', $args);
 		$item = V::get('item', [], $args);
 		if (empty($item)) throw new Exception("Brak danych do zapisania");
@@ -2769,6 +2783,17 @@ public function showPowiazaniaEnergaRumKontrahenciPowiazania($items) {
 	}
 
 
+	function mapShortNs($shortNs) {
+		switch ($shortNs) {
+			case 'KRS': return 'default_db/BI_audit_KRS/BI_audit_KRS';
+			case 'KRS/p': return 'default_db/BI_audit_KRS_person/BI_audit_KRS_person';
+			case 'MSIG': return 'default_db/BI_audit_MSIG/BI_audit_MSIG';
+			case 'MSIG/p': return 'default_db/BI_audit_MSIG_person/BI_audit_MSIG_person';
+			case 'CEIDG': return 'default_db/BI_audit_CEIDG/BI_audit_CEIDG';
+			default: throw new Exception("Not implemented short Ns '{$shortNs}'");
+		}
+	}
+
 	public function generateBiAuditRaportAjax($args) {
 
 		// głebokość powiazan
@@ -2792,11 +2817,15 @@ public function showPowiazaniaEnergaRumKontrahenciPowiazania($items) {
 		$pracownicyIds = V::get('pracownicyIds', [], $args, 'uint_array'); // array of int > 0
 		$kontrahenciIds = V::get('kontrahenciIds', [], $args, 'uint_array'); // array of int > 0
 
+		$pozostaleOd = V::get('pozostaleOd', [], $args, 'array');
+		$pozostaleDo = V::get('pozostaleDo', [], $args, 'array');
+
 		// walidacja listy kontrahentów i pracowników
-		if ( empty($kontrahenciIds) && empty($pracownicyIds) ) {
+		if ( empty($kontrahenciIds) && empty($pozostaleDo) && empty($pracownicyIds) && empty($pozostaleOd) ) {
 			throw new Exception("Nie wybrano pozycji do analizy. Wybierz pracowników/kontrahentów.");
 		}
 
+
 		// Tworzenie rekrodu w bazie - Raport -
 		$idRaport = DB::getPDO()->insert('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', [
 			'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
@@ -2862,6 +2891,54 @@ public function showPowiazaniaEnergaRumKontrahenciPowiazania($items) {
 			");
 		}
 
+		if (!empty($pozostaleOd)) {
+			foreach ($pozostaleOd as $featureKey) {
+				$idOd = DB::getPDO()->insert('BI_audit_POWIAZANIA_OD', [
+					'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+					'A_RECORD_CREATE_DATE' => 'NOW()',
+				]);
+				// TODO: ? add OD_HIST
+				ACL::addRef(
+					$rootObjectNamespace = 'default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
+					$fieldTypeName = 'default_db__x3A__BI_audit_POWIAZANIA_OD:BI_audit_POWIAZANIA_OD',
+					$refPrimaryKey = $idRaport,
+					$refRemotePrimaryKey = $idOd
+				);
+				list($shortNs, $featurePk) = explode('.', $featureKey);
+				$featureNs = $this->mapShortNs($shortNs);
+				ACL::addRef(
+					$rootObjectNamespace = 'default_db/BI_audit_POWIAZANIA_OD/BI_audit_POWIAZANIA_OD',
+					$fieldTypeName = Api_WfsNs::typeName($featureNs),
+					$refPrimaryKey = $idOd,
+					$refRemotePrimaryKey = $featurePk
+				);
+			}
+		}
+
+		if (!empty($pozostaleDo)) {
+			foreach ($pozostaleDo as $featureKey) {
+				$idDo = DB::getPDO()->insert('BI_audit_POWIAZANIA_DO', [
+					'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+					'A_RECORD_CREATE_DATE' => 'NOW()',
+				]);
+				// TODO: ? add DO_HIST
+				ACL::addRef(
+					$rootObjectNamespace = 'default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
+					$fieldTypeName = 'default_db__x3A__BI_audit_POWIAZANIA_DO:BI_audit_POWIAZANIA_DO',
+					$refPrimaryKey = $idRaport,
+					$refRemotePrimaryKey = $idDo
+				);
+				list($shortNs, $featurePk) = explode('.', $featureKey);
+				$featureNs = $this->mapShortNs($shortNs);
+				ACL::addRef(
+					$rootObjectNamespace = 'default_db/BI_audit_POWIAZANIA_DO/BI_audit_POWIAZANIA_DO',
+					$fieldTypeName = Api_WfsNs::typeName($featureNs),
+					$refPrimaryKey = $idDo,
+					$refRemotePrimaryKey = $featurePk
+				);
+			}
+		}
+
 		return [
 			'msg' => "Zadanie do wygnerowania raportu zostało zapisane.",
 			'type' => "success",

+ 167 - 35
tools/Bocian.php.addItemToRaport.js

@@ -3,7 +3,46 @@ var h = window.p5VendorJs.React.createElement;
 var ReactDOM = window.p5VendorJs.ReactDOM;
 var AsyncTypeahead = window.p5VendorJs.AsyncTypeahead;
 var swal = window.swal;
+var STORE_NAME = STORE_NAME || '_bocianRaportStore';
 var DBG = DBG || false;
+var DBG1 = true;
+
+
+function bocianFeatureKey(ns, pk) {
+  switch (ns) {
+    case 'default_db/BI_audit_KRS/BI_audit_KRS': return 'KRS.' + pk;
+    case 'default_db/BI_audit_KRS_person/BI_audit_KRS_person': return 'KRS/p.' + pk;
+    case 'default_db/BI_audit_MSIG/BI_audit_MSIG': return 'MSIG.' + pk;
+    case 'default_db/BI_audit_MSIG_person/BI_audit_MSIG_person': return 'MSIG/p.' + pk;
+    case 'default_db/BI_audit_CEIDG/BI_audit_CEIDG': return 'CEIDG.' + pk;
+    default: throw "Not implemented feature key for ns '" + ns + "'";
+  }
+}
+
+function getSelectedListLocalStorageKey(from) { // from: ( OD | DO )
+  switch (from) {
+    case 'OD': return 'Bocian.biAuditForm.odFeatureKeys';
+    case 'DO': return 'Bocian.biAuditForm.doFeatureKeys';
+    default: throw "Not implemented from selected list '" + from + "' - expected 'OD' or 'DO'";
+  }
+}
+function getSelectedListFromLocalStorage(from) {
+  return JSON.parse( localStorage.getItem(getSelectedListLocalStorageKey(from)) || '[]' );
+}
+function saveToSelectedListInLocalStorage(from, featureKey) {
+  DBG && console.log("DBG::saveToSelectedListInLocalStorage(from, featureKey)", {from, featureKey}, {added: getSelectedListFromLocalStorage(from).concat(featureKey)});
+  localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
+    getSelectedListFromLocalStorage(from).concat(featureKey)
+  ))
+}
+function removeFromSelectedListInLocalStorage(from, featureKey) {
+  DBG && console.log("DBG::removeFromSelectedListInLocalStorage(from, featureKey)", {from, featureKey});
+  localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
+    getSelectedListFromLocalStorage(from).filter(function (item) {
+      return ( item !== featureKey );
+    })
+  ))
+}
 
 
 function convertXlinkToObjects(items) {
@@ -101,17 +140,21 @@ var P5UI_AddItemToReport_SelectKrsPerson = createReactClass({
     var krsPresons = (this.props.krs && this.props.krs['default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person'])
     ? this.props.krs['default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person']
     : [];
-    var _selectPerson = this.props.selectPerson.bind(this)
+    // var _selectPerson = this.props.selectPerson.bind(this)
+    var selectedBaza = 'default_db/BI_audit_KRS_person/BI_audit_KRS_person';
 
     return (krsPresons.length > 0)
     ? h('ol', { style: { margin: '22px', textAlign: 'left' } }, krsPresons.map(function (person) {
+      var label = (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || '');
       return h('li', {}, [
-        (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || ''),
-        h('button', {
-          className: "btn btn-primary",
-          style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" },
-          onClick: function () { _selectPerson(person) }
-        }, "Dodaj osobę")
+        h(P5UI_AddItemToReport_Checkbox, { from: 'OD', selectedBaza: selectedBaza, selectedItem: person }),
+        h(P5UI_AddItemToReport_Checkbox, { from: 'DO', selectedBaza: selectedBaza, selectedItem: person }),
+        h('span', { style: { 'margin-left': "6px" } }, label),
+        // h('button', {
+        //   className: "btn btn-primary",
+        //   style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" },
+        //   onClick: function () { _selectPerson(person) }
+        // }, "Dodaj osobę")
       ]);
     }))
     : null;
@@ -124,16 +167,20 @@ var P5UI_AddItemToReport_SelectMSIGPerson = createReactClass({
     ? this.props.msig['default_db__x3A__BI_audit_MSIG_person:BI_audit_MSIG_person']
     : [];
     var _selectPerson = this.props.selectPerson.bind(this)
+    var selectedBaza = 'default_db/BI_audit_MSIG_person/BI_audit_MSIG_person';
 
     return (msigPresons.length > 0)
     ? h('ol', { style: { margin: '22px', textAlign: 'left' } }, msigPresons.map(function (person) {
+      var label = (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || '');
       return h('li', {}, [
-        (person.imiona || '') + ' ' + (person.nazwisko || '') + ', ' + (person.pesel || ''),
-        h('button', {
-          className: "btn btn-primary",
-          style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" },
-          onClick: function () { _selectPerson(person) }
-        }, "Dodaj osobę")
+        h(P5UI_AddItemToReport_Checkbox, { from: 'OD', selectedBaza: selectedBaza, selectedItem: person }),
+        h(P5UI_AddItemToReport_Checkbox, { from: 'DO', selectedBaza: selectedBaza, selectedItem: person }),
+        h('span', { style: { 'margin-left': "6px" } }, label),
+        // h('button', {
+        //   className: "btn btn-primary",
+        //   style: { marginLeft: "8px", padding: "4px 8px", fontSize: "small" },
+        //   onClick: function () { _selectPerson(person) }
+        // }, "Dodaj osobę")
       ]);
     }))
     : null;
@@ -147,8 +194,81 @@ var P5UI_AddItemToReport_BazaMenuItem = createReactClass({
     }
 });
 
+var P5UI_AddItemToReport_Checkbox = createReactClass({
+  _getStore: function () {
+    DBG && console.warn('DBG:: window[STORE_NAME]', { store: window[STORE_NAME], STORE_NAME: STORE_NAME})
+    return window[STORE_NAME] || null;
+  },
+  getStateFromStore: function () {
+    var featureKey = bocianFeatureKey(this.props.selectedBaza, this.props.selectedItem['@primaryKey']);
+    var storeState = this._getStore().getState();
+    return {
+      featureKey: featureKey,
+      isSelected: (-1 !== this.getStoreList(this.props.from).indexOf(featureKey)),
+      // totalOdPracownicy: storeState.totalOdPracownicy,
+      // totalOdPozostale: storeState.totalOdPozostale,
+      // totalDoKontrahenci: storeState.totalDoKontrahenci,
+      // totalDoPozostale: storeState.totalDoPozostale,
+    };
+  },
+  getStoreList: function (from) {
+    var storeState = this._getStore().getState();
+    switch (from) {
+      case 'OD': return storeState.pozostaleOd;
+      case 'DO': return storeState.pozostaleDo;
+      default: throw "Not imeplemented store list from = '" + from + "'";
+    }
+  },
+  getInitialState: function () {
+    return this.getStateFromStore();
+  },
+  componentDidMount: function () {
+    var store = this._getStore()
+    this._unsubscribe = store ? store.subscribe(this.storeUpdated) : function () {};
+  },
+  componentWillUnmount: function () {
+    this._unsubscribe();
+  },
+  storeUpdated: function () {
+		DBG && console.log('DBG::P5UI__BocianHeader::storeUpdated ', this.getStateFromStore());
+		this.setState(this.getStateFromStore())
+	},
+  _handleClick: function () {
+    this.state.isSelected ? this.removeItem() : this.saveItem();
+    // _onSelect(from, selectedBaza, selectedItem);
+  },
+  removeItem: function () {
+    this._getStore().dispatch({ type: 'RM_' + this.props.from, featureKey: this.state.featureKey })
+    // removeFromSelectedListInLocalStorage(this.props.from, this.state.featureKey);
+    // this.setState({ isSelected: false });
+  },
+  saveItem: function () {
+    this._getStore().dispatch({ type: 'ADD_' + this.props.from, featureKey: this.state.featureKey })
+    // saveToSelectedListInLocalStorage(this.props.from, this.state.featureKey);
+    // this.setState({ isSelected: true });
+  },
+  render: function () {
+    var handleClick = this._handleClick.bind(this);
+    // var _onSelect = this.props.onSelect;
+    var isSelected = this.state.isSelected;
+    return h('div', { className: "checkbox", style: { display: "inline-block", 'margin-left': "6px" } }, [
+      h('label', { style: { border: "1px solid " + ( isSelected ? "red" : "#ccc" ), 'border-radius': "4px", padding: "2px 6px 0 6px", 'font-size': "12px" } }, [
+        h('input', {
+          style: { margin: "0 6px 0 0", position: "relative" },
+          type: "checkbox",
+          checked: isSelected,
+          onClick: handleClick,
+        }),
+        h('span', { style: { 'line-height': "20px" } }, this.props.from),
+      ])
+    ]);
+  }
+});
+
 var P5UI_AddItemToReport = createReactClass({
     getInitialState: function () {
+        // var listOd = getSelectedListFromLocalStorage('OD');
+        // var listDo = getSelectedListFromLocalStorage('DO');
         return {
             baza: null,
             newItemBaza: null,
@@ -213,6 +333,32 @@ var P5UI_AddItemToReport = createReactClass({
     componentWillUnmount: function () {
         DBG && console.log("DBG: conponentDidUnmount...");
     },
+    renderItemSave__OLD(selectedBaza, selectedItem) {
+      var _onSelect = this.props.onSelect;
+      return h('div', { style: { margin: '22px' } }, [
+          h('button', {
+              className: "btn btn-primary",
+              onClick: function () {
+                  _onSelect(selectedBaza, selectedItem);
+                  // ReactDOM.unmountComponentAtNode(document.getElementById(FUNCTION_NAME + '__searchBaza'));
+                  // swal.close()
+              }
+          }, "XXX Dodaj " + (
+            ( ('default_db/BI_audit_KRS_person/BI_audit_KRS_person' === selectedBaza)
+              || ('default_db/BI_audit_MSIG_person/BI_audit_MSIG_person' === selectedBaza)
+            )
+            ? "osobę"
+            : "firmę"
+          )) // TODO:  |> KRS -> firmę, |> KRS Person -> osobę, ....
+      ]);
+    },
+    renderItemSave(selectedBaza, selectedItem) {
+      return h('div', { style: { margin: '22px', 'font-size': "16px" } }, [
+          "Dodaj jako: ",
+          h(P5UI_AddItemToReport_Checkbox, { from: 'OD', selectedBaza: selectedBaza, selectedItem: selectedItem }),
+          h(P5UI_AddItemToReport_Checkbox, { from: 'DO', selectedBaza: selectedBaza, selectedItem: selectedItem }),
+      ]);
+    },
     render: function () {
         var bazaBtns = [];
         bazaBtns.push({ baza: "default_db/BI_audit_KRS/BI_audit_KRS", title: "KRS - Firmy", label: "KRS" });
@@ -223,8 +369,8 @@ var P5UI_AddItemToReport = createReactClass({
         bazaBtns.push({ baza: "default_db/BI_audit_CEIDG/BI_audit_CEIDG", title: "CEIDG", label: "CEIDG" });
 
         var newItemBtns = [];
-        newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY", title: "Nowa osoba", label: "Nowa osoba" });
-        newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI", title: "Nowy podmiot", label: "Nowy podmiot" });
+        // newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY", title: "Nowa osoba", label: "Nowa osoba" });
+        // newItemBtns.push({ baza: "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI", title: "Nowy podmiot", label: "Nowy podmiot" });
 
         function generateBazaBtn(btn, opts) {
             return h('button', {
@@ -416,7 +562,7 @@ var P5UI_AddItemToReport = createReactClass({
                     return h(P5UI_AddItemToReport_BazaMenuItem, { key: option.ID, baza: selectedBaza, data: option });
                 }
             }),
-            (selectedNewItemBaza === "default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY") && h('div', { className: 'form-group' }, [
+            ("default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY" === selectedNewItemBaza) && h('div', { className: 'form-group' }, [
               h('input',{
                 className:'form-control required',
                 id:'personName',
@@ -447,7 +593,7 @@ var P5UI_AddItemToReport = createReactClass({
                 swal.close();
               }.bind(this) }, "Dodaj osobę")
             ]),
-            (selectedNewItemBaza === "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI") && h('div', { className: 'form-group' }, [
+            ("default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI" === selectedNewItemBaza) && h('div', { className: 'form-group' }, [
               h('input',{
                 className:'form-control required',
                 id:'companyName',
@@ -514,22 +660,7 @@ var P5UI_AddItemToReport = createReactClass({
                 swal.close();
               }.bind(this) }, "Dodaj podmiot")
             ]),
-            (selectedBaza && selectedItem) && h('div', { style: { margin: '22px' } }, [
-                h('button', {
-                    className: "btn btn-primary",
-                    onClick: function () {
-                        _onSelect(selectedBaza, selectedItem);
-                        // ReactDOM.unmountComponentAtNode(document.getElementById(FUNCTION_NAME + '__searchBaza'));
-                        // swal.close()
-                    }
-                }, "Dodaj " + (
-                  ( ('default_db/BI_audit_KRS_person/BI_audit_KRS_person' === selectedBaza)
-                    || ('default_db/BI_audit_MSIG_person/BI_audit_MSIG_person' === selectedBaza)
-                  )
-                  ? "osobę"
-                  : "firmę"
-                )) // TODO:  |> KRS -> firmę, |> KRS Person -> osobę, ....
-            ]),
+            (selectedBaza && selectedItem) && this.renderItemSave(selectedBaza, selectedItem),
             ('default_db/BI_audit_KRS/BI_audit_KRS' === selectedBaza && selectedItem) && h(P5UI_AddItemToReport_SelectKrsPerson, {
               krs: selectedItem,
               selectPerson: function (person) {
@@ -581,13 +712,14 @@ function addItemToRaport(event) {
         onOpen: function () {
             ReactDOM.render(
                 h(P5UI_AddItemToReport, {
-                    onSelect: function (baza, selected) {
-                        DBG && console.log('TODO: selected ', { baza, selected });
+                    onSelect: function (from, baza, selected) {
+                        DBG && console.log('TODO: selected ', { from, baza, selected });
                         global.fetch(URL_SAVE_TO_DB, {
                           method: 'POST',
                           credentials: 'same-origin',
                           headers: { 'Content-Type': 'application/json' },
                           body: JSON.stringify({
+                            from: from,
                             baza: baza,
                             item: selected
                           })

+ 199 - 8
tools/Bocian.php.view.js

@@ -1,5 +1,7 @@
 var DBG = DBG || 0;
+var DBG1 = true;
 var CURRENT_DATE = CURRENT_DATE || '';
+var STORE_NAME = STORE_NAME || '_bocianRaportStore';
 
 if (!URL_TABLE_POWIAZANIA) throw "Brak URL_TABLE_POWIAZANIA";
 if (!BASE_URLS) throw "Brak BASE_URLS"
@@ -8,6 +10,171 @@ var RECORD_MORE_FUNCTIONS_OPENED_NODE = null;
 if (!FIELD_LIST_PRACOWNICY) throw "Brak FIELD_LIST_PRACOWNICY"
 if (!FIELD_LIST_KONTRAHENCI) throw "Brak FIELD_LIST_KONTRAHENCI"
 
+var createReactClass = global.p5VendorJs.createReactClass;
+var h = global.p5VendorJs.React.createElement;
+var ReactDOM = global.p5VendorJs.ReactDOM;
+var Redux = global.p5VendorJs.Redux;
+var ReduxThunk = global.p5VendorJs.ReduxThunk;
+var createStoreWithThunkMiddleware = Redux.applyMiddleware(ReduxThunk)(Redux.createStore); // TODO: to vendor.js
+var swal = window.swal;
+var globalGraphStore; // global store with Raport cunters
+
+var P5UI__BocianHeader = createReactClass({
+	getStateFromStore: function () {
+		var storeState = this.props.store.getState();
+		return {
+			totalOdPracownicy: storeState.totalOdPracownicy,
+			totalOdPozostale: storeState.totalOdPozostale,
+			totalDoKontrahenci: storeState.totalDoKontrahenci,
+			totalDoPozostale: storeState.totalDoPozostale,
+		};
+	},
+	getInitialState: function() {
+		return this.getStateFromStore();
+	},
+	componentDidMount: function () {
+		this.unsubscribe = this.props.store.subscribe(this.storeUpdated)
+	},
+	componentWillUnmount: function () {
+		this.unsubscribe()
+	},
+	storeUpdated: function () {
+		DBG && console.log('DBG::P5UI__BocianHeader::storeUpdated ', this.getStateFromStore());
+		this.setState(this.getStateFromStore())
+	},
+	addOdPozostale: function (event) {
+		// window['createPracownikAjax'](event)
+		window['addPozostaleOdDo'](event)
+	},
+	addDoPozostale: function (event) {
+		// window['createKontrahentAjax'](event)
+		window['addPozostaleOdDo'](event)
+	},
+	render: function () {
+		DBG && console.log('DBG::P5UI__BocianHeader::render ', { state: this.state });
+		var totalOd = this.state.totalOdPracownicy + this.state.totalOdPozostale;
+		var totalDo = this.state.totalDoKontrahenci + this.state.totalDoPozostale;
+		return h('div', { className: "container-fluid", style: { backgroundColor: "#efefef" } }, [
+			h('h3', {}, [
+				h('span', { style: { fontSize: "120%", color: "#d7142d" } }, "|"),
+				" Tworzenie nowego raportu ",
+			]),
+			h('div', { style: { fontSize: '16px', fontWeight: "normal", color: "#777" } }, [
+				"Wybrano:",
+				h('ul', {}, [
+					h('li', { style: { marginTop: "6px" } }, [
+						h('span', {
+							style: totalOd > 0 ? { color: "#d7142d" } : {}
+						}, "OD (" + totalOd + "): "),
+						h('a', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, href: "#PRACOWNICY" }, " pracownicy (" + this.state.totalOdPracownicy + ")"),
+						" + ",
+						h('button', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, onClick: this.addOdPozostale }, " pozostałe (" + this.state.totalOdPozostale + ")"),
+					]),
+					h('li', { style: { marginTop: "6px" } }, [
+						h('span', {
+							style: totalDo > 0 ? { color: "#d7142d" } : {}
+						}, "DO (" + totalDo + "): "),
+						h('a', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, href: "#KONTRAHENCI" }, " kontrahenci (" + this.state.totalDoKontrahenci + ")"),
+						" + ",
+						h('button', { className: "btn btn-link", style: { padding: 0, fontSize: "16px" }, onClick: this.addDoPozostale }, " pozostałe (" + this.state.totalDoPozostale + ")"),
+					])
+				])
+			])
+		])
+	}
+})
+
+function getSelectedListLocalStorageKey(from) { // from: ( OD | DO )
+  switch (from) {
+    case 'OD': return 'Bocian.biAuditForm.odFeatureKeys';
+    case 'DO': return 'Bocian.biAuditForm.doFeatureKeys';
+    default: throw "Not implemented from selected list '" + from + "' - expected 'OD' or 'DO'";
+  }
+}
+function getListFromLocalStorage(key) {
+  return JSON.parse( localStorage.getItem(key) || '[]' );
+}
+// function saveToSelectedListInLocalStorage(from, featureKey) {
+//   DBG && console.log("DBG::saveToSelectedListInLocalStorage(from, featureKey)", {from, featureKey}, {added: getSelectedListFromLocalStorage(from).concat(featureKey)});
+//   localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
+//     getSelectedListFromLocalStorage(from).concat(featureKey)
+//   ))
+// }
+// function removeFromSelectedListInLocalStorage(from, featureKey) {
+//   DBG && console.log("DBG::removeFromSelectedListInLocalStorage(from, featureKey)", {from, featureKey});
+//   localStorage.setItem(getSelectedListLocalStorageKey(from), JSON.stringify(
+//     getSelectedListFromLocalStorage(from).filter(function (item) {
+//       return ( item !== featureKey );
+//     })
+//   ))
+// }
+
+function bocianRaportStore(state, action) {
+	var prevState = state;
+	if (!prevState) {
+		var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
+		var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
+		var pracownicyIds = getListFromLocalStorage('Bocian.biAuditForm.pracownicyIds');
+		var kontrahenciIds = getListFromLocalStorage('Bocian.biAuditForm.kontrahenciIds');
+		prevState = {
+			totalOdPracownicy: pracownicyIds.length,
+			totalOdPozostale: pozostaleOd.length,
+			totalDoKontrahenci: kontrahenciIds.length,
+			totalDoPozostale: pozostaleDo.length,
+			pozostaleOd: pozostaleOd,
+			pozostaleDo: pozostaleDo,
+		};
+		DBG && console.log('DBG: bocian store INIT', { prevState, action });
+	}
+	DBG && console.log('DBG: bocian store', { prevState, action });
+	switch (action.type) {
+		case 'UPDATE': return Object.assign(prevState, {
+			totalOdPracownicy: action.totalOdPracownicy,
+			totalDoKontrahenci: action.totalDoKontrahenci,
+		});
+		case 'ADD_OD': {
+			var listPozostaleOd = prevState.pozostaleOd.concat(action.featureKey);
+			localStorage.setItem(getSelectedListLocalStorageKey('OD'), JSON.stringify(listPozostaleOd))
+			return Object.assign(prevState, {
+				pozostaleOd: listPozostaleOd,
+				totalOdPozostale: listPozostaleOd.length,
+			})
+		}
+		case 'ADD_DO': {
+			var listPozostaleDo = prevState.pozostaleDo.concat(action.featureKey);
+			localStorage.setItem(getSelectedListLocalStorageKey('DO'), JSON.stringify(listPozostaleDo))
+			return Object.assign(prevState, {
+				pozostaleDo: listPozostaleDo,
+				totalDoPozostale: listPozostaleDo.length,
+			})
+		}
+		case 'RM_OD': {
+			var featureKey = action.featureKey;
+			var listPozostaleOd = prevState.pozostaleOd.filter(function (item) {
+				return ( item !== featureKey );
+			})
+			localStorage.setItem(getSelectedListLocalStorageKey('OD'), JSON.stringify(listPozostaleOd))
+			return Object.assign(prevState, {
+				pozostaleOd: listPozostaleOd,
+				totalOdPozostale: listPozostaleOd.length,
+			})
+		}
+		case 'RM_DO': {
+			var featureKey = action.featureKey;
+			var listPozostaleDo = prevState.pozostaleDo.filter(function (item) {
+				return ( item !== featureKey );
+			})
+			localStorage.setItem(getSelectedListLocalStorageKey('DO'), JSON.stringify(listPozostaleDo))
+			return Object.assign(prevState, {
+				pozostaleDo: listPozostaleDo,
+				totalDoPozostale: listPozostaleDo.length,
+			})
+		}
+		default: return prevState;
+	}
+}
+
+
 $(window).on('hashchange', function() {
 	initLocalStorage();
 	rootChangeForm();
@@ -352,6 +519,8 @@ function saveFormCsvFileAjaxAction(enumType) {
 function defaultBIAuditLocalStorage() {
 	localStorage.removeItem('Bocian.biAuditForm.pracownicyIds');
 	localStorage.removeItem('Bocian.biAuditForm.kontrahenciIds');
+	localStorage.removeItem(getSelectedListLocalStorageKey('OD'));
+	localStorage.removeItem(getSelectedListLocalStorageKey('DO'));
 	setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', 1);
 	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', 1);
 	setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', 0);
@@ -370,6 +539,9 @@ function generateBiAuditRaport(event) {
 		var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
 		var smadReaportTitle = getItemLocalStorage('Bocian.biAuditForm.smadReaportTitle');
 		var analizaOnlyTargets = getItemLocalStorage('Bocian.biAuditForm.analizaOnlyTargets');
+		var pozostaleOd = getListFromLocalStorage(getSelectedListLocalStorageKey('OD'));
+		var pozostaleDo = getListFromLocalStorage(getSelectedListLocalStorageKey('DO'));
+
 		// validate
 		if(!smadReaportTitle || smadReaportTitle == '') {
 			p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie podano tytułu raportu' });
@@ -409,11 +581,13 @@ function generateBiAuditRaport(event) {
 					  },
 						credentials: 'same-origin',
 					  body: JSON.stringify({
-					     pracownicyIds: pracownicyIdsArray,
-					     kontrahenciIds: kontrahenciIdsArray,
-					     depthValue: depthValue,
-							 smadReaportTitle: smadReaportTitle,
-							 analizaOnlyTargets: analizaOnlyTargets
+							pracownicyIds: pracownicyIdsArray,
+							kontrahenciIds: kontrahenciIdsArray,
+							pozostaleOd: pozostaleOd,
+							pozostaleDo: pozostaleDo,
+							depthValue: depthValue,
+							smadReaportTitle: smadReaportTitle,
+							analizaOnlyTargets: analizaOnlyTargets
 					  })
 					})
 					.then(function(response) {
@@ -1340,8 +1514,8 @@ function createGroupPracownicy(event) {
  */
 function rootChangeForm() {
 
-//todo: do przeniesienia
-urlFetchKontrahenciPowiazania();
+	//todo: do przeniesienia
+	urlFetchKontrahenciPowiazania();
 	var valueUrl = global.location.hash;
 
 	switch (valueUrl) {
@@ -2152,13 +2326,18 @@ function updateTopCounters() {
 	var totalPracownicy = (countPracownicy) ? Object.keys(countPracownicy).length : 0;
 	var totalKontrahenci = (countKontrahenci) ? Object.keys(countKontrahenci).length : 0;
 	var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
+	if (globalGraphStore) globalGraphStore.dispatch({
+		type: 'UPDATE',
+		totalOdPracownicy: totalPracownicy,
+		totalDoKontrahenci: totalKontrahenci,
+	})
+
 	if(DBG) console.warn({totalPracownicy: totalPracownicy, totalKontrahenci: totalKontrahenci})
 	$('.top--count-selected-item-pracownicy').text(totalPracownicy ? '('+totalPracownicy+')' : '');
 	$('.top--count-selected-item-kontrahenci').text(totalKontrahenci ? '('+totalKontrahenci+')' : '');
 	$('.bottom--count-selected-item-pracownicy').text(totalPracownicy ? "Wybrano: (" + totalPracownicy + ") osób" : '');
 	$('.bottom--count-selected-item-kontrahenci').text(totalKontrahenci ? "Wybrano: (" + totalKontrahenci + ") podmiotów/kontrahentaów" : '');
 
-
 // disable button generate reaport if not choise 'praconwicy' or 'kontrahenci'
 	if ( totalPracownicy === 0 && totalKontrahenci === 0 ) {
 		$('.smad-generate-reaport-button').addClass('disabled');
@@ -2828,6 +3007,18 @@ function addToReportByPreviousReport(event) {
 
 
 $(document).ready(function(){
+	globalGraphStore = createStoreWithThunkMiddleware(bocianRaportStore);
+
+	global[STORE_NAME] = globalGraphStore;
+	DBG && console.warn('DBG:: SET window[STORE_NAME]', { store: window[STORE_NAME], STORE_NAME: STORE_NAME, globalGraphStore })
+
+	ReactDOM.render(
+		h(P5UI__BocianHeader, {
+			store: globalGraphStore
+		}),
+		document.getElementById('bi_audit_header')
+	);
+
 	rootChangeForm();
 	updateTopCounters();
 });