api.cess.php 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554
  1. <?php
  2. /**
  3. * Creates new contrahent in database
  4. *
  5. * @param string $bankacc
  6. * @param string $bankname
  7. * @param string $bankcode
  8. * @param string $edrpo
  9. * @param string $ipn
  10. * @param string $licensenum
  11. * @param string $juraddr
  12. * @param string $phisaddr
  13. * @param string $phone
  14. * @param string $contrname
  15. * @param string $agnameabbr
  16. * @param string $agsignatory
  17. * @param string $agsignatory2
  18. * @param string $agbasis
  19. * @param string $agmail
  20. * @param string $siteurl
  21. *
  22. * @return void
  23. */
  24. function zb_ContrAhentAdd($bankacc, $bankname, $bankcode, $edrpo, $ipn, $licensenum, $juraddr, $phisaddr, $phone, $contrname, $agnameabbr, $agsignatory, $agsignatory2, $agbasis, $agmail, $siteurl) {
  25. $bankacc = ubRouting::filters($bankacc, 'mres');
  26. $bankname = ubRouting::filters($bankname, 'mres');
  27. $bankcode = ubRouting::filters($bankcode, 'mres');
  28. $edrpo = ubRouting::filters($edrpo, 'mres');
  29. $ipn = ubRouting::filters($ipn, 'mres');
  30. $licensenum = ubRouting::filters($licensenum, 'mres');
  31. $juraddr = ubRouting::filters($juraddr, 'mres');
  32. $phisaddr = ubRouting::filters($phisaddr, 'mres');
  33. $phone = ubRouting::filters($phone, 'mres');
  34. $contrnameF = ubRouting::filters($contrname, 'mres');
  35. $agnameabbr = ubRouting::filters($agnameabbr, 'mres');
  36. $agsignatory = ubRouting::filters($agsignatory, 'mres');
  37. $agsignatory2 = ubRouting::filters($agsignatory2, 'mres');
  38. $agbasis = ubRouting::filters($agbasis, 'mres');
  39. $agmail = ubRouting::filters($agmail, 'mres');
  40. $siteurl = ubRouting::filters($siteurl, 'mres');
  41. $agentsDb = new NyanORM('contrahens');
  42. $agentsDb->data('bankacc', $bankacc);
  43. $agentsDb->data('bankname', $bankname);
  44. $agentsDb->data('bankcode', $bankcode);
  45. $agentsDb->data('edrpo', $edrpo);
  46. $agentsDb->data('ipn', $ipn);
  47. $agentsDb->data('licensenum', $licensenum);
  48. $agentsDb->data('juraddr', $juraddr);
  49. $agentsDb->data('phisaddr', $phisaddr);
  50. $agentsDb->data('phone', $phone);
  51. $agentsDb->data('contrname', $contrnameF);
  52. $agentsDb->data('agnameabbr', $agnameabbr);
  53. $agentsDb->data('agsignatory', $agsignatory);
  54. $agentsDb->data('agsignatory2', $agsignatory2);
  55. $agentsDb->data('agbasis', $agbasis);
  56. $agentsDb->data('agmail', $agmail);
  57. $agentsDb->data('siteurl', $siteurl);
  58. $agentsDb->create();
  59. $newId = $agentsDb->getLastId();
  60. log_register('AGENT CREATE `' . $contrname . '` AS [' . $newId . ']');
  61. }
  62. /**
  63. * Changes existing contrahent record in database
  64. *
  65. * @param string $bankacc
  66. * @param string $bankname
  67. * @param string $bankcode
  68. * @param string $edrpo
  69. * @param string $ipn
  70. * @param string $licensenum
  71. * @param string $juraddr
  72. * @param string $phisaddr
  73. * @param string $phone
  74. * @param string $contrname
  75. * @param string $agnameabbr
  76. * @param string $agsignatory
  77. * @param string $agsignatory2
  78. * @param string $agbasis
  79. * @param string $agmail
  80. * @param string $siteurl
  81. *
  82. * @return void
  83. */
  84. function zb_ContrAhentChange($ahentid, $bankacc, $bankname, $bankcode, $edrpo, $ipn, $licensenum, $juraddr, $phisaddr, $phone, $contrname, $agnameabbr, $agsignatory, $agsignatory2, $agbasis, $agmail, $siteurl) {
  85. $ahentid = ubRouting::filters($ahentid, 'int');
  86. $bankacc = ubRouting::filters($bankacc, 'mres');
  87. $bankname = ubRouting::filters($bankname, 'mres');
  88. $bankcode = ubRouting::filters($bankcode, 'mres');
  89. $edrpo = ubRouting::filters($edrpo, 'mres');
  90. $ipn = ubRouting::filters($ipn, 'mres');
  91. $licensenum = ubRouting::filters($licensenum, 'mres');
  92. $juraddr = ubRouting::filters($juraddr, 'mres');
  93. $phisaddr = ubRouting::filters($phisaddr, 'mres');
  94. $phone = ubRouting::filters($phone, 'mres');
  95. $contrnameF = ubRouting::filters($contrname, 'mres');
  96. $agnameabbr = ubRouting::filters($agnameabbr, 'mres');
  97. $agsignatory = ubRouting::filters($agsignatory, 'mres');
  98. $agsignatory2 = ubRouting::filters($agsignatory2, 'mres');
  99. $agbasis = ubRouting::filters($agbasis, 'mres');
  100. $agmail = ubRouting::filters($agmail, 'mres');
  101. $siteurl = ubRouting::filters($siteurl, 'mres');
  102. $agentsDb = new NyanORM('contrahens');
  103. $agentsDb->data('bankacc', $bankacc);
  104. $agentsDb->data('bankname', $bankname);
  105. $agentsDb->data('bankcode', $bankcode);
  106. $agentsDb->data('edrpo', $edrpo);
  107. $agentsDb->data('ipn', $ipn);
  108. $agentsDb->data('licensenum', $licensenum);
  109. $agentsDb->data('juraddr', $juraddr);
  110. $agentsDb->data('phisaddr', $phisaddr);
  111. $agentsDb->data('phone', $phone);
  112. $agentsDb->data('contrname', $contrnameF);
  113. $agentsDb->data('agnameabbr', $agnameabbr);
  114. $agentsDb->data('agsignatory', $agsignatory);
  115. $agentsDb->data('agsignatory2', $agsignatory2);
  116. $agentsDb->data('agbasis', $agbasis);
  117. $agentsDb->data('agmail', $agmail);
  118. $agentsDb->data('siteurl', $siteurl);
  119. $agentsDb->where('id', '=', $ahentid);
  120. $agentsDb->save();
  121. log_register('AGENT CHANGE `' . $contrname . '` AS [' . $ahentid . ']');
  122. }
  123. /**
  124. * Deletes existing contrahent from database
  125. *
  126. * @param int $id
  127. *
  128. * @return void
  129. */
  130. function zb_ContrAhentDelete($id) {
  131. $id = ubRouting::filters($id, 'int');
  132. $agentsDb = new NyanORM('contrahens');
  133. $agentsDb->where('id', '=', $id);
  134. $agentsDb->delete();
  135. log_register('AGENT DELETE [' . $id . ']');
  136. }
  137. /**
  138. * Returns contrahent data as array
  139. *
  140. * @param int $id
  141. *
  142. * @return array
  143. */
  144. function zb_ContrAhentGetData($id) {
  145. $id = ubRouting::filters($id, 'int');
  146. $result = array();
  147. $agentsDb = new NyanORM('contrahens');
  148. $agentsDb->where('id', '=', $id);
  149. $raw = $agentsDb->getAll();
  150. if (!empty($raw)) {
  151. $result = $raw[0];
  152. }
  153. return ($result);
  154. }
  155. /**
  156. * Returns full contrahent data as raw array or assoc array
  157. *
  158. * @return array
  159. */
  160. function zb_ContrAhentGetAllData() {
  161. $agentsDb = new NyanORM('contrahens');
  162. $result = $agentsDb->getAll();
  163. return ($result);
  164. }
  165. /**
  166. * Returns full contrahent data array as id=>agentData
  167. *
  168. * @return array
  169. */
  170. function zb_ContrAhentGetAllDataAssoc() {
  171. $agentsDb = new NyanORM('contrahens');
  172. $result = $agentsDb->getAll('id');
  173. return ($result);
  174. }
  175. /**
  176. * Renders contrahents list with required controls
  177. *
  178. * @return string
  179. */
  180. function zb_ContrAhentShow() {
  181. global $ubillingConfig;
  182. $allcontr = zb_ContrAhentGetAllData();
  183. // construct needed editor
  184. $titles = array(
  185. 'ID',
  186. 'Bank account',
  187. 'Bank name',
  188. 'Bank code',
  189. 'EDRPOU',
  190. 'IPN',
  191. 'License number',
  192. 'Juridical address',
  193. 'Phisical address',
  194. 'Phone',
  195. 'Contrahent name',
  196. );
  197. $keys = array(
  198. 'id',
  199. 'bankacc',
  200. 'bankname',
  201. 'bankcode',
  202. 'edrpo',
  203. 'ipn',
  204. 'licensenum',
  205. 'juraddr',
  206. 'phisaddr',
  207. 'phone',
  208. 'contrname'
  209. );
  210. if ($ubillingConfig->getAlterParam('AGENTS_EXTINFO_ON')) {
  211. $extactbutton = wf_img('skins/icons/articlepost.png', __('Extended info'));
  212. $result = web_GridEditor($titles, $keys, $allcontr, 'contrahens', true, true, '', 'extinfo', $extactbutton, true);
  213. } else {
  214. $result = web_GridEditor($titles, $keys, $allcontr, 'contrahens', true, true, '', '', '', true);
  215. }
  216. return ($result);
  217. }
  218. /**
  219. * Renders contrahent creation form
  220. *
  221. * @return string
  222. */
  223. function zb_ContrAhentAddForm() {
  224. $sup = wf_tag('sup') . '*' . wf_tag('sup', true);
  225. $inputs = '';
  226. $inputs .= wf_TextInput('newcontrname', __('Contrahent name') . $sup, '', false, '', '', '', '', '', true);
  227. $inputs .= wf_TextInput('newbankacc', __('Bank account'), '', false, '40', '', '', '', '', true);
  228. $inputs .= wf_TextInput('newbankname', __('Bank name'), '', false, '', '', '', '', '', true);
  229. $inputs .= wf_TextInput('newbankcode', __('Bank code'), '', false, '', '', '', '', '', true);
  230. $inputs .= wf_TextInput('newedrpo', __('EDRPOU'), '', false, '', '', '', '', '', true);
  231. $inputs .= wf_TextInput('newipn', __('IPN'), '', false, '', '', '', '', '', true);
  232. $inputs .= wf_TextInput('newlicensenum', __('License number'), '', false, '', '', '', '', '', true);
  233. $inputs .= wf_TextInput('newjuraddr', __('Juridical address'), '', false, '', '', '', '', '', true);
  234. $inputs .= wf_TextInput('newphisaddr', __('Phisical address'), '', false, '', '', '', '', '', true);
  235. $inputs .= wf_TextInput('newphone', __('Phone'), '', false, '', '', '', '', '', true);
  236. $inputs .= wf_TextInput('newagnameabbr', __('Short name'), '', false, '', '', '', '', '', true);
  237. $inputs .= wf_TextInput('newagsignatory', __('Signatory'), '', false, '', '', '', '', '', true);
  238. $inputs .= wf_TextInput('newagsignatory2', __('Signatory') . ' 2', '', false, '', '', '', '', '', true);
  239. $inputs .= wf_TextInput('newagbasis', __('Basis'), '', false, '', '', '', '', '', true);
  240. $inputs .= wf_TextInput('newagmail', __('Mail'), '', false, '', '', '', '', '', true, 'email');
  241. $inputs .= wf_TextInput('newsiteurl', __('Site URL'), '', false, '', '', '', '', '', true, 'url');
  242. $inputs .= wf_SubmitClassed(true, 'ubButton', '', __('Create'));
  243. $result = wf_Form("", 'POST', $inputs, 'glamour form-grid-2cols form-grid-2cols-label-right labels-top');
  244. return ($result);
  245. }
  246. /**
  247. * Renders existing ahent editing form
  248. *
  249. * @param int $ahentid
  250. *
  251. * @return string
  252. */
  253. function zb_ContrAhentEditForm($ahentid) {
  254. $ahentid = vf($ahentid, 3);
  255. $cdata = zb_ContrAhentGetData($ahentid);
  256. $sup = wf_tag('sup') . '*' . wf_tag('sup', true);
  257. $inputs = '';
  258. $inputs .= wf_TextInput('changecontrname', __('Contrahent name') . $sup, ubRouting::filters($cdata['contrname'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  259. $inputs .= wf_TextInput('changebankacc', __('Bank account'), $cdata['bankacc'], false, '40', '', '', '', '', true);
  260. $inputs .= wf_TextInput('changebankname', __('Bank name'), ubRouting::filters($cdata['bankname'], 'callback', 'htmlspecialchars') , false, '', '', '', '', '', true);
  261. $inputs .= wf_TextInput('changebankcode', __('Bank code'), $cdata['bankcode'], false, '', '', '', '', '', true);
  262. $inputs .= wf_TextInput('changeedrpo', __('EDRPOU'), $cdata['edrpo'], false, '', '', '', '', '', true);
  263. $inputs .= wf_TextInput('changeipn', __('IPN'), $cdata['ipn'], false, '', '', '', '', '', true);
  264. $inputs .= wf_TextInput('changelicensenum', __('License number'), ubRouting::filters($cdata['licensenum'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  265. $inputs .= wf_TextInput('changejuraddr', __('Juridical address'), ubRouting::filters($cdata['juraddr'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  266. $inputs .= wf_TextInput('changephisaddr', __('Phisical address'), ubRouting::filters($cdata['phisaddr'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  267. $inputs .= wf_TextInput('changephone', __('Phone'), $cdata['phone'], false, '', '', '', '', '', true);
  268. $inputs .= wf_TextInput('changeagnameabbr', __('Short name'), ubRouting::filters($cdata['agnameabbr'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  269. $inputs .= wf_TextInput('changeagsignatory', __('Signatory'), ubRouting::filters($cdata['agsignatory'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  270. $inputs .= wf_TextInput('changeagsignatory2', __('Signatory') . ' 2', ubRouting::filters($cdata['agsignatory2'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  271. $inputs .= wf_TextInput('changeagbasis', __('Basis'), ubRouting::filters($cdata['agbasis'], 'callback', 'htmlspecialchars'), false, '', '', '', '', '', true);
  272. $inputs .= wf_TextInput('changeagmail', __('Mail'), $cdata['agmail'], false, '', 'email', '', '', '', true);
  273. $inputs .= wf_TextInput('changesiteurl', __('Site URL'), $cdata['siteurl'], false, '', 'url', '', '', '', true);
  274. $inputs .= wf_SubmitClassed(true, 'ubButton', '', __('Save'));
  275. $result = wf_Form("", 'POST', $inputs, 'glamour form-grid-2cols form-grid-2cols-label-right labels-top');
  276. return ($result);
  277. }
  278. /**
  279. * Returns ahent selector widget
  280. *
  281. * @return string
  282. */
  283. function zb_ContrAhentSelect() {
  284. $allagents = zb_ContrAhentGetAllData();
  285. $params = array();
  286. if (!empty($allagents)) {
  287. foreach ($allagents as $io => $eachagent) {
  288. $params[$eachagent['id']] = $eachagent['contrname'];
  289. }
  290. }
  291. $result = wf_Selector('ahentsel', $params, __('Contrahent name'), false, false, false, '', '', '', true);
  292. return ($result);
  293. }
  294. /**
  295. * Returns agent selector with preset agent ID
  296. *
  297. * @param int $currentId
  298. * @return string
  299. */
  300. function zb_ContrAhentSelectPreset($currentId = '') {
  301. $allagents = zb_ContrAhentGetAllData();
  302. $tmpArr = array();
  303. if (!empty($allagents)) {
  304. foreach ($allagents as $io => $eachagent) {
  305. $tmpArr[$eachagent['id']] = $eachagent['contrname'];
  306. }
  307. }
  308. $select = wf_Selector('ahentsel', $tmpArr, '', $currentId, false);
  309. return ($select);
  310. }
  311. /**
  312. * Returns array of all agent=>street assigns
  313. *
  314. * @param string $order
  315. *
  316. * @return array
  317. */
  318. function zb_AgentAssignGetAllData($order = '') {
  319. $query = "SELECT * from `ahenassign` " . $order;
  320. $allassigns = simple_queryall($query);
  321. return ($allassigns);
  322. }
  323. /**
  324. * Returns array of existing agent strict assigns as login=>agentid
  325. *
  326. * @return array
  327. */
  328. function zb_AgentAssignStrictGetAllData() {
  329. $result = array();
  330. $query = "SELECT * from `ahenassignstrict`";
  331. $all = simple_queryall($query);
  332. if (!empty($all)) {
  333. foreach ($all as $io => $each) {
  334. $result[$each['login']] = $each['agentid'];
  335. }
  336. }
  337. return ($result);
  338. }
  339. /**
  340. * Deletes existing agent assign database record
  341. *
  342. * @param int $id
  343. *
  344. * @return void
  345. */
  346. function zb_AgentAssignDelete($id) {
  347. $id = vf($id, 3);
  348. $query = "DELETE from `ahenassign` where `id`='" . $id . "'";
  349. nr_query($query);
  350. log_register("AGENTASSIGN DELETE [" . $id . "]");
  351. }
  352. /**
  353. * Creates new agent=>street assign in database
  354. *
  355. * @param int $ahenid
  356. * @param string $streetname
  357. *
  358. * @return void
  359. */
  360. function zb_AgentAssignAdd($ahenid, $streetname) {
  361. $ahenid = vf($ahenid, 3);
  362. $streetname = mysql_real_escape_string($streetname);
  363. $query = "INSERT INTO `ahenassign` ( `id` , `ahenid` ,`streetname`) VALUES (NULL , '" . $ahenid . "', '" . $streetname . "');";
  364. nr_query($query);
  365. log_register("AGENTASSIGN CREATE [" . $ahenid . '] `' . $streetname . '`');
  366. }
  367. /**
  368. * Renders ahent assign form
  369. *
  370. * @return string
  371. */
  372. function web_AgentAssignForm() {
  373. $sup = wf_tag('sup') . '*' . wf_tag('sup', true);
  374. $inputs = zb_ContrAhentSelect();
  375. $inputs .= wf_TextInput('newassign', __('Street name') . $sup, '', false, '', '', '', '', '', true);
  376. $inputs .= wf_SubmitClassed(true, 'ubButton', '', __('Save'));
  377. $result = wf_Form("", 'POST', $inputs, 'glamour form-grid-2cols form-grid-2cols-label-right labels-top');
  378. return ($result);
  379. }
  380. /**
  381. * Renders list of available ahent assigns with required controls
  382. *
  383. * @return string
  384. */
  385. function web_AgentAssignShow($renderAutoAssign = FALSE) {
  386. $allassigns = zb_AgentAssignGetAllData("ORDER BY `id` DESC");
  387. $allahens = zb_ContrAhentGetAllData();
  388. $usedStreets = array();
  389. $agentnames = array();
  390. if (!empty($allahens)) {
  391. foreach ($allahens as $io => $eachahen) {
  392. $agentnames[$eachahen['id']] = $eachahen['contrname'];
  393. }
  394. }
  395. $cells = wf_TableCell(__('ID'));
  396. $cells .= wf_TableCell(__('Contrahent name'));
  397. $cells .= wf_TableCell(__('Street name'));
  398. $cells .= wf_TableCell(__('Actions'));
  399. $rows = wf_TableRow($cells, 'row1');
  400. if (!empty($allassigns)) {
  401. foreach ($allassigns as $io2 => $eachassign) {
  402. $rowColor = (isset($usedStreets[$eachassign['streetname']])) ? 'ukvbankstadup' : 'row5';
  403. $cells = wf_TableCell($eachassign['id']);
  404. $cells .= wf_TableCell(@$agentnames[$eachassign['ahenid']]);
  405. $cells .= wf_TableCell($eachassign['streetname']);
  406. $actLinks = wf_JSAlert('?module=contrahens&deleteassign=' . $eachassign['id'], web_delete_icon(), __('Removing this may lead to irreparable results'));
  407. $cells .= wf_TableCell($actLinks);
  408. $rows .= wf_TableRow($cells, $rowColor);
  409. $usedStreets[$eachassign['streetname']] = $eachassign['ahenid'];
  410. }
  411. }
  412. if (!$renderAutoAssign) {
  413. // Create button for show automatic assign agetnts
  414. $inputs = wf_HiddenInput('renderautoassign', 'true');
  415. $inputs .= wf_SubmitClassed(true, 'ubButton', '', __('Show automatic agent assignments'));
  416. $form = wf_Form("", 'POST', $inputs, 'glamour form-grid-2cols form-grid-2cols-label-right labels-top');
  417. } else {
  418. // Backlink
  419. $form = wf_BackLink('?module=contrahens');
  420. }
  421. $result = wf_TableBody($rows, '100%', '0', 'sortable');
  422. $result.= $form;
  423. return ($result);
  424. }
  425. /**
  426. * Renders list of strict login=>agent assigns with some controls
  427. *
  428. * @return string
  429. */
  430. function web_AgentAssignRender($renderAutoAssign = FALSE) {
  431. if ($renderAutoAssign) {
  432. $ajaxURL = '?module=contrahens&ajaxagenassignauto=true';
  433. } else {
  434. $ajaxURL = '?module=contrahens&ajaxagenassign=true';
  435. }
  436. $columns = array('Login', 'Full address', 'Real Name', 'Tariff', 'Contrahent name', 'Actions');
  437. $opts = '"order": [[ 0, "desc" ]], "dom": \'<"F"lfB>rti<"F"ps>\', buttons: [\'csv\', \'excel\', \'pdf\']';
  438. $result = wf_JqDtLoader($columns, $ajaxURL, false, 'assignments', 100, $opts);
  439. return ($result);
  440. }
  441. /**
  442. * Renders data list of strict login=>agent assigns with some controls
  443. *
  444. * @return string
  445. */
  446. function web_AgentAssignStrictShow() {
  447. $JSONHelper = new wf_JqDtHelper();
  448. $allassigns = zb_AgentAssignStrictGetAllData();
  449. $allahens = zb_ContrAhentGetAllData();
  450. $allrealnames = zb_UserGetAllRealnames();
  451. $alladdress = zb_AddressGetFulladdresslistCached();
  452. $allusertariffs = zb_TariffsGetAllUsers();
  453. $agentnames = array();
  454. if (!empty($allahens)) {
  455. foreach ($allahens as $io => $eachahen) {
  456. $agentnames[$eachahen['id']] = $eachahen['contrname'];
  457. }
  458. }
  459. if (!empty($allassigns)) {
  460. foreach ($allassigns as $eachlogin => $eachagent) {
  461. $loginLink = wf_Link('?module=userprofile&username=' . $eachlogin, web_profile_icon() . ' ' . $eachlogin, false, '');
  462. $actLinks = wf_JSAlert('?module=contractedit&username=' . $eachlogin, web_edit_icon(), __('Are you serious'));
  463. $actLinks.= wf_JSAlert('?module=contrahens&deleteassignstrict=true&username=' . $eachlogin, web_delete_icon(), __('Are you serious'));
  464. $data[] = $loginLink;
  465. $data[] = @$alladdress[$eachlogin];
  466. $data[] = @$allrealnames[$eachlogin];
  467. $data[] = @$allusertariffs[$eachlogin];
  468. $data[] = @$agentnames[$eachagent];
  469. $data[] = $actLinks;
  470. $JSONHelper->addRow($data);
  471. unset($data);
  472. }
  473. }
  474. $JSONHelper->getJson();
  475. }
  476. /**
  477. * Renders data list of strict login=>agent assigns with some controls
  478. *
  479. * @return string
  480. */
  481. function web_AgentAssignAutoShow() {
  482. $JSONHelper = new wf_JqDtHelper();
  483. $allUsers = new NyanORM('users');
  484. $allUsers->selectable('login');
  485. $allUsers->where('Down', '=', '0');
  486. $users = $allUsers->getAll();
  487. if (!empty($users)) {
  488. $allassigns = zb_AgentAssignGetAllData();
  489. $strictAssigns = zb_AgentAssignStrictGetAllData();
  490. $allahens = zb_ContrAhentGetAllData();
  491. $allrealnames = zb_UserGetAllRealnames();
  492. $alladdress = zb_AddressGetFulladdresslist();
  493. $allusertariffs = zb_TariffsGetAllUsers();
  494. $agentnames = array();
  495. if (!empty($allahens)) {
  496. foreach ($allahens as $io => $eachahen) {
  497. $agentnames[$eachahen['id']] = $eachahen['contrname'];
  498. }
  499. }
  500. foreach ($users as $login) {
  501. $login = $login['login'];
  502. if (!isset($strictAssigns[$login])) {
  503. $loginLink = wf_Link('?module=userprofile&username=' . $login, web_profile_icon() . ' ' . $login, false, '');
  504. $actLinks = wf_JSAlert('?module=contractedit&username=' . $login, web_edit_icon(), __('Are you serious'));
  505. $agent_assigned = zb_AgentAssignCheckLogin($login, $allassigns, $alladdress);
  506. $data[] = $loginLink;
  507. $data[] = @$alladdress[$login];
  508. $data[] = @$allrealnames[$login];
  509. $data[] = @$allusertariffs[$login];
  510. $data[] = @$agentnames[$agent_assigned];
  511. $data[] = $actLinks;
  512. $JSONHelper->addRow($data);
  513. unset($data);
  514. }
  515. }
  516. }
  517. $JSONHelper->getJson();
  518. }
  519. /**
  520. * Returns agent id or false for user ahent assign check
  521. *
  522. * @param string $login
  523. * @param array $allassigns
  524. * @param array $alladdress
  525. * @return int/bool
  526. */
  527. function zb_AgentAssignCheckLogin($login, $allassigns, $alladdress) {
  528. global $ubillingConfig;
  529. $alter_cfg = $ubillingConfig->getAlter();
  530. $result = false;
  531. // если пользователь куда-то заселен
  532. if (isset($alladdress[$login])) {
  533. // возвращаем дефолтного агента если присваиваний нет вообще
  534. if (empty($allassigns)) {
  535. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  536. } else {
  537. //если какие-то присваивалки есть
  538. $useraddress = $alladdress[$login];
  539. // Одразу задаємо дефолтного агента, якщо нічого потім не знайдемо. Не будемо кожен раз переназначати вивід
  540. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  541. // проверяем для каждой присваивалки попадает ли она под нашего абонента
  542. foreach ($allassigns as $io => $eachassign) {
  543. if (strpos($useraddress, $eachassign['streetname']) !== false) {
  544. $result = $eachassign['ahenid'];
  545. // Знаходимо першего відповідного агента і перериваємо цикл.
  546. // Якщо вказали 2-і і більше адрес, які підпадають під умови - це ваші проблеми. Робіть адреси і міста унікальними
  547. break;
  548. }
  549. }
  550. }
  551. }
  552. // если присваивание выключено возвращаем умолчального
  553. if (!$alter_cfg['AGENTS_ASSIGN']) {
  554. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  555. }
  556. return ($result);
  557. }
  558. /**
  559. * Performs fast agent assing check for some user login
  560. *
  561. * @global object $ubillingConfig
  562. * @param string $login
  563. * @param array $allassigns
  564. * @param string $address
  565. * @param array $allassignsstrict
  566. * @return array
  567. */
  568. function zb_AgentAssignCheckLoginFast($login, $allassigns, $address, $allassignsstrict) {
  569. global $ubillingConfig;
  570. $alter_cfg = $ubillingConfig->getAlter();
  571. $result = array();
  572. //быстренько проверяем нету ли принудительной привязки по логину
  573. if (isset($allassignsstrict[$login])) {
  574. $result = $allassignsstrict[$login];
  575. return ($result);
  576. }
  577. // если пользователь куда-то заселен
  578. if (!empty($address)) {
  579. // возвращаем дефолтного агента если присваиваний нет вообще
  580. if (empty($allassigns)) {
  581. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  582. } else {
  583. //если какие-то присваивалки есть
  584. $useraddress = $address;
  585. // проверяем для каждой присваивалки попадает ли она под нашего абонента
  586. foreach ($allassigns as $io => $eachassign) {
  587. if (strpos($useraddress, $eachassign['streetname']) !== false) {
  588. $result = $eachassign['ahenid'];
  589. break;
  590. } else {
  591. // и если не нашли - возвращаем умолчательного
  592. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  593. }
  594. }
  595. }
  596. } else {
  597. //если пользователь бомжует - возвращаем тоже умолчательного
  598. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  599. }
  600. // если присваивание выключено возвращаем умолчального
  601. if (!$alter_cfg['AGENTS_ASSIGN']) {
  602. $result = $alter_cfg['DEFAULT_ASSIGN_AGENT'];
  603. }
  604. return ($result);
  605. }
  606. /**
  607. * Returns content of export template
  608. *
  609. * @param string $filename
  610. * @return string
  611. */
  612. function zb_ExportLoadTemplate($filename) {
  613. $template = file_get_contents($filename);
  614. return ($template);
  615. }
  616. /**
  617. * Returns array of all users tariffs array as login=>tariff
  618. *
  619. * @return array
  620. */
  621. function zb_ExportTariffsLoadAll() {
  622. $allstgdata = zb_UserGetAllStargazerData();
  623. $result = array();
  624. if (!empty($allstgdata)) {
  625. foreach ($allstgdata as $io => $eachuser) {
  626. $result[$eachuser['login']] = $eachuser['Tariff'];
  627. }
  628. }
  629. return ($result);
  630. }
  631. /**
  632. * Returns array of all users contract data
  633. *
  634. * @return array
  635. */
  636. function zb_ExportContractsLoadAll() {
  637. $query = "SELECT `login`,`contract` from `contracts`";
  638. $allcontracts = simple_queryall($query);
  639. $queryDates = "SELECT `contract`,`date` from `contractdates`";
  640. $alldates = simple_queryall($queryDates);
  641. $result = array();
  642. $dates = array();
  643. if (!empty($alldates)) {
  644. foreach ($alldates as $ia => $eachdate) {
  645. $dates[$eachdate['contract']] = $eachdate['date'];
  646. }
  647. }
  648. if (!empty($allcontracts)) {
  649. foreach ($allcontracts as $io => $eachcontract) {
  650. $result[$eachcontract['login']]['contractnum'] = $eachcontract['contract'];
  651. if (isset($dates[$eachcontract['contract']])) {
  652. $rawdate = $dates[$eachcontract['contract']];
  653. $timestamp = strtotime($rawdate);
  654. $newDate = date("Y-m-d\T00:00:00", $timestamp);
  655. $result[$eachcontract['login']]['contractdate'] = $newDate;
  656. } else {
  657. $result[$eachcontract['login']]['contractdate'] = '1970-01-01T00:00:00';
  658. }
  659. }
  660. }
  661. return ($result);
  662. }
  663. /**
  664. * Performs export template processing with some userdata
  665. *
  666. * @param string $templatebody
  667. * @param array $templatedata
  668. *
  669. * @return string
  670. */
  671. function zb_ExportParseTemplate($templatebody, $templatedata) {
  672. foreach ($templatedata as $field => $data) {
  673. $templatebody = str_ireplace($field, $data, $templatebody);
  674. }
  675. return ($templatebody);
  676. }
  677. /**
  678. * Returns array of all ahent data for exports processing
  679. *
  680. * @return array
  681. */
  682. function zb_ExportAgentsLoadAll() {
  683. $allagents = zb_ContrAhentGetAllData();
  684. $result = array();
  685. if (!empty($allagents)) {
  686. foreach ($allagents as $io => $eachagent) {
  687. $result[$eachagent['id']]['contrname'] = $eachagent['contrname'];
  688. @$result[$eachagent['id']]['edrpo'] = $eachagent['edrpo'];
  689. @$result[$eachagent['id']]['bankacc'] = $eachagent['bankacc'];
  690. }
  691. return ($result);
  692. }
  693. }
  694. /**
  695. * Renders export form body
  696. *
  697. * @return string
  698. */
  699. function zb_ExportForm() {
  700. $curdate = curdate();
  701. $yesterday = date("Y-m-d", time() - 86400);
  702. $inputs = __('From');
  703. $inputs .= wf_DatePickerPreset('fromdate', $yesterday);
  704. $inputs .= __('To');
  705. $inputs .= wf_DatePickerPreset('todate', $curdate);
  706. $inputs .= wf_Submit('Export');
  707. $form = wf_Form("", 'POST', $inputs, 'glamour');
  708. return ($form);
  709. }
  710. /**
  711. * Performs payments export between two dates
  712. *
  713. * @param string $from_date
  714. * @param string $to_date
  715. *
  716. * @return string
  717. */
  718. function zb_ExportPayments($from_date, $to_date) {
  719. // reading export options
  720. $alter_conf = rcms_parse_ini_file(CONFIG_PATH . "alter.ini");
  721. $default_assign_agent = $alter_conf['DEFAULT_ASSIGN_AGENT'];
  722. $export_template = $alter_conf['EXPORT_TEMPLATE'];
  723. $export_template_head = $alter_conf['EXPORT_TEMPLATE_HEAD'];
  724. $export_template_end = $alter_conf['EXPORT_TEMPLATE_END'];
  725. $export_only_positive = $alter_conf['EXPORT_ONLY_POSITIVE'];
  726. $export_format = $alter_conf['EXPORT_FORMAT'];
  727. $export_encoding = $alter_conf['EXPORT_ENCODING'];
  728. $import_encoding = $alter_conf['IMPORT_ENCODING'];
  729. $export_from_time = $alter_conf['EXPORT_FROM_TIME'];
  730. $export_to_time = $alter_conf['EXPORT_TO_TIME'];
  731. $citydisplay = $alter_conf['CITY_DISPLAY'];
  732. if ($citydisplay) {
  733. $address_offset = 1;
  734. } else {
  735. $address_offset = 0;
  736. }
  737. // loading templates
  738. $template_head = zb_ExportLoadTemplate($export_template_head);
  739. $template = zb_ExportLoadTemplate($export_template);
  740. $template_end = zb_ExportLoadTemplate($export_template_end);
  741. // load all needed data
  742. $allassigns = zb_AgentAssignGetAllData();
  743. $alladdress = zb_AddressGetFulladdresslist();
  744. $allrealnames = zb_UserGetAllRealnames();
  745. $allagentsdata = zb_ExportAgentsLoadAll();
  746. $allcontracts = zb_ExportContractsLoadAll();
  747. $alltariffs = zb_ExportTariffsLoadAll();
  748. //main code
  749. $qfrom_date = $from_date . ' ' . $export_from_time;
  750. $qto_date = $to_date . ' ' . $export_to_time;
  751. $query = "SELECT * from `payments` WHERE `date` >= '" . $qfrom_date . "' AND `date`<= '" . $qto_date . "'";
  752. $allpayments = simple_queryall($query);
  753. $parse_data = array();
  754. $parse_data['{FROMDATE}'] = $from_date;
  755. $parse_data['{FROMTIME}'] = $export_from_time;
  756. $parse_data['{TODATE}'] = $to_date;
  757. $parse_data['{TOTIME}'] = $export_to_time;
  758. $export_result = zb_ExportParseTemplate($template_head, $parse_data);
  759. if (!empty($allpayments)) {
  760. foreach ($allpayments as $io => $eachpayment) {
  761. // forming export data
  762. $paylogin = $eachpayment['login'];
  763. @$payrealname = $allrealnames[$eachpayment['login']];
  764. $payid = $eachpayment['id'];
  765. $paytariff = @$alltariffs[$paylogin];
  766. $paycontractdata = $allcontracts[$paylogin];
  767. $paycontract = $paycontractdata['contractnum'];
  768. $paycontractdate = $paycontractdata['contractdate'];
  769. $paycity = 'debug city';
  770. $payregion = 'debug region';
  771. $paydrfo = '';
  772. $payjurface = 'false';
  773. $paydatetime = $eachpayment['date'];
  774. $paysumm = $eachpayment['summ'];
  775. $paynote = $eachpayment['note'];
  776. $paytimesplit = explode(' ', $paydatetime);
  777. $paydate = $paytimesplit[0];
  778. $paytime = $paytimesplit[1];
  779. @$payaddr = $alladdress[$paylogin];
  780. @$splitaddr = explode(' ', $payaddr);
  781. @$paystreet = $splitaddr[0 + $address_offset];
  782. @$splitbuild = explode('/', $splitaddr[1 + $address_offset]);
  783. @$paybuild = $splitbuild[0];
  784. @$payapt = $splitbuild[1];
  785. $agent_assigned = zb_AgentAssignCheckLogin($paylogin, $allassigns, $alladdress);
  786. @$agent_bankacc = $allagentsdata[$agent_assigned]['bankacc'];
  787. @$agent_edrpo = $allagentsdata[$agent_assigned]['edrpo'];
  788. @$agent_name = $allagentsdata[$agent_assigned]['contrname'];
  789. // construct template data
  790. $parse_data['{PAYID}'] = md5($payid);
  791. $parse_data['{AGENTNAME}'] = $agent_name;
  792. $parse_data['{AGENTEDRPO}'] = $agent_edrpo;
  793. $parse_data['{PAYDATE}'] = $paydate;
  794. $parse_data['{PAYTIME}'] = $paytime;
  795. $parse_data['{PAYSUMM}'] = $paysumm;
  796. $parse_data['{CONTRACT}'] = $paycontract;
  797. $parse_data['{CONTRACTDATE}'] = $paycontractdate;
  798. $parse_data['{REALNAME}'] = $payrealname;
  799. $parse_data['{DRFO}'] = $paydrfo;
  800. $parse_data['{JURFACE}'] = $payjurface;
  801. $parse_data['{STREET}'] = $paystreet;
  802. $parse_data['{BUILD}'] = $paybuild;
  803. $parse_data['{APT}'] = $payapt;
  804. $parse_data['{NOTE}'] = $paynote;
  805. $parse_data['{CITY}'] = $paycity;
  806. $parse_data['{REGION}'] = $payregion;
  807. $parse_data['{TARIFF}'] = $paytariff;
  808. // custom positive payments export
  809. if ($export_only_positive) {
  810. // check is that pos payment
  811. if ($paysumm > 0) {
  812. $export_result .= zb_ExportParseTemplate($template, $parse_data);
  813. }
  814. } else {
  815. //or anyway export it
  816. $export_result .= zb_ExportParseTemplate($template, $parse_data);
  817. }
  818. }
  819. }
  820. $export_result .= zb_ExportParseTemplate($template_end, $parse_data);
  821. if ($import_encoding != $export_encoding) {
  822. $export_result = iconv($import_encoding, $export_encoding, $export_result);
  823. }
  824. return ($export_result);
  825. }
  826. /**
  827. * Returns array of ahent data by the users login
  828. *
  829. * @param string $login
  830. * @return array
  831. */
  832. function zb_AgentAssignedGetData($login) {
  833. $login = vf($login);
  834. $allassigns = zb_AgentAssignGetAllData();
  835. $alladdress = zb_AddressGetFulladdresslist();
  836. $assigned_agent = zb_AgentAssignCheckLogin($login, $allassigns, $alladdress);
  837. $result = zb_ContrAhentGetData($assigned_agent);
  838. return ($result);
  839. }
  840. /**
  841. * Returns array of ahent data associated with some user by login/address pair
  842. *
  843. * @param string $login
  844. * @param string $address
  845. * @return array
  846. */
  847. function zb_AgentAssignedGetDataFast($login, $address) {
  848. $allassigns = zb_AgentAssignGetAllData();
  849. $allassignsStrict = zb_AgentAssignStrictGetAllData();
  850. $assigned_agent = zb_AgentAssignCheckLoginFast($login, $allassigns, $address, $allassignsStrict);
  851. $result = zb_ContrAhentGetData($assigned_agent);
  852. return ($result);
  853. }
  854. /**
  855. * Returns array of payment data by its ID
  856. *
  857. * @param int $paymentid
  858. * @return array
  859. */
  860. function zb_PaymentGetData($paymentid) {
  861. $paymentid = vf($paymentid, 3);
  862. $result = array();
  863. $query = "SELECT * from `payments` WHERE `id`='" . $paymentid . "'";
  864. $result = simple_query($query);
  865. return ($result);
  866. }
  867. /**
  868. * Returns content of sales slip HTML template
  869. *
  870. * @return string
  871. */
  872. function zb_PrintCheckLoadTemplate() {
  873. $template = file_get_contents(CONFIG_PATH . 'printcheck.tpl');
  874. return ($template);
  875. }
  876. /**
  877. * Returns some cashiers data (deprecated)
  878. *
  879. * @param string $whoami
  880. *
  881. * @return array/string
  882. */
  883. function zb_PrintCheckLoadCassNames($whoami = false) {
  884. $names = rcms_parse_ini_file(CONFIG_PATH . 'cass.ini');
  885. if (empty($whoami)) {
  886. return $names;
  887. } else {
  888. $iam = whoami();
  889. return $names[$iam];
  890. }
  891. }
  892. /**
  893. * Returns payment number per day
  894. *
  895. * @param int $payid
  896. * @param string $paymentdate
  897. *
  898. * @return string
  899. */
  900. function zb_PrintCheckGetDayNum($payid, $paymentdate) {
  901. $payid = vf($payid, 3);
  902. $result = 'EXCEPTION';
  903. $onlyday = $paymentdate;
  904. $onlyday = strtotime($onlyday);
  905. $onlyday = date("Y-m-d", $onlyday);
  906. $date_q = "SELECT `id` from `payments` where `date` LIKE '" . $onlyday . "%' ORDER BY `id` ASC LIMIT 1;";
  907. $firstbyday = simple_query($date_q);
  908. if (!empty($firstbyday)) {
  909. $firstbyday = $firstbyday['id'];
  910. $currentnumber = $payid - $firstbyday;
  911. $currentnumber = $currentnumber + 1;
  912. $result = $currentnumber;
  913. }
  914. return ($result);
  915. }
  916. /**
  917. * Renders printable HTML sales slip
  918. *
  919. * @param int $paymentid
  920. * @return string
  921. */
  922. function zb_PrintCheck($paymentid, $realpaymentId = false) {
  923. $paymentdata = zb_PaymentGetData($paymentid);
  924. $login = $paymentdata['login'];
  925. $userData = zb_UserGetAllData($login);
  926. $userData = $userData[$login];
  927. $templatebody = zb_PrintCheckLoadTemplate();
  928. $alladdress = zb_AddressGetFullCityaddresslist();
  929. $useraddress = $alladdress[$login];
  930. $agent_data = zb_AgentAssignedGetDataFast($login, $useraddress);
  931. $cassnames = zb_PrintCheckLoadCassNames();
  932. if ($realpaymentId) {
  933. $userPaymentId = zb_PaymentIDGet($login);
  934. } else {
  935. $userPaymentId = ip2int($userData['ip']);
  936. }
  937. $cday = date("d");
  938. $cmonth = date("m");
  939. $month_array = months_array();
  940. $cmonth_name = $month_array[$cmonth];
  941. $cyear = curyear();
  942. $morph = new UBMorph();
  943. //forming template data
  944. @$templatedata['{PAYID}'] = $paymentdata['id'];
  945. @$templatedata['{PAYIDENC}'] = zb_NumEncode($paymentdata['id']);
  946. @$templatedata['{PAYMENTID}'] = $userPaymentId;
  947. @$templatedata['{PAYDATE}'] = $paymentdata['date'];
  948. @$templatedata['{PAYSUMM}'] = $paymentdata['summ'];
  949. @$templatedata['{PAYSUMM_LIT}'] = $morph->sum2str($paymentdata['summ']); // omg omg omg
  950. @$templatedata['{REALNAME}'] = $userData['realname'];
  951. @$templatedata['{BUHNAME}'] = 'а відки я знаю?';
  952. @$templatedata['{CASNAME}'] = $cassnames[whoami()];
  953. @$templatedata['{PAYTARGET}'] = 'Оплата за послуги / ' . $paymentdata['date'];
  954. @$templatedata['{FULLADDRESS}'] = $useraddress;
  955. @$templatedata['{CDAY}'] = $cday;
  956. @$templatedata['{CMONTH}'] = rcms_date_localise($cmonth_name);
  957. @$templatedata['{CYEAR}'] = $cyear;
  958. @$templatedata['{DAYPAYID}'] = zb_PrintCheckGetDayNum($paymentdata['id'], $paymentdata['date']);
  959. //contragent full data
  960. @$templatedata['{AGENTEDRPO}'] = $agent_data['edrpo'];
  961. @$templatedata['{AGENTNAME}'] = $agent_data['contrname'];
  962. @$templatedata['{AGENTID}'] = $agent_data['id'];
  963. @$templatedata['{AGENTBANKACC}'] = $agent_data['bankacc'];
  964. @$templatedata['{AGENTBANKNAME}'] = $agent_data['bankname'];
  965. @$templatedata['{AGENTBANKCODE}'] = $agent_data['bankcode'];
  966. @$templatedata['{AGENTIPN}'] = $agent_data['ipn'];
  967. @$templatedata['{AGENTLICENSE}'] = $agent_data['licensenum'];
  968. @$templatedata['{AGENTJURADDR}'] = $agent_data['juraddr'];
  969. @$templatedata['{AGENTPHISADDR}'] = $agent_data['phisaddr'];
  970. @$templatedata['{AGENTPHONE}'] = $agent_data['phone'];
  971. //parsing result
  972. $result = zb_ExportParseTemplate($templatebody, $templatedata);
  973. return ($result);
  974. }
  975. /**
  976. * Returns ahent selector for registration form
  977. *
  978. * @param string $name
  979. * @param int $selected
  980. * @return string
  981. */
  982. function zb_RegContrAhentSelect($name, $selected = '') {
  983. $allagents = zb_ContrAhentGetAllData();
  984. $agentArr = array();
  985. if (!empty($allagents)) {
  986. foreach ($allagents as $io => $eachagent) {
  987. $agentArr[$eachagent['id']] = $eachagent['contrname'];
  988. }
  989. }
  990. $select = wf_Selector($name, $agentArr, '', $selected, false);
  991. return ($select);
  992. }
  993. /**
  994. * Renders agent strict assign form
  995. *
  996. * @return string
  997. */
  998. function web_AgentAssignStrictForm($login, $currentassign) {
  999. if (!empty($currentassign)) {
  1000. $agentData = zb_ContrAhentGetData($currentassign);
  1001. @$currentAgentName = $agentData['contrname'];
  1002. } else {
  1003. $currentAgentName = __('No');
  1004. }
  1005. $inputs = zb_ContrAhentSelectPreset($currentassign);
  1006. $inputs .= wf_HiddenInput('assignstrictlogin', $login);
  1007. $deleteCheckbox = wf_CheckInput('deleteassignstrict', __('Delete'), false, false);
  1008. $cells = wf_TableCell(__('Service provider'), '', 'row2');
  1009. $cells .= wf_TableCell($currentAgentName, '', 'row3');
  1010. $rows = wf_tablerow($cells);
  1011. $cells = wf_TableCell(__('New assign'), '', 'row2');
  1012. $cells .= wf_TableCell($inputs, '', 'row3');
  1013. $rows .= wf_tablerow($cells);
  1014. $cells = wf_TableCell('', '', 'row2');
  1015. $cells .= wf_TableCell($deleteCheckbox, '', 'row3');
  1016. $rows .= wf_tablerow($cells);
  1017. $form = wf_TableBody($rows, '100%', 0);
  1018. $form .= wf_Submit('Save');
  1019. $result = wf_Form("", 'POST', $form, '');
  1020. return ($result);
  1021. }
  1022. /**
  1023. * Deletes existing ahent strict assign from database
  1024. *
  1025. * @param string $login
  1026. *
  1027. * @return void
  1028. */
  1029. function zb_AgentAssignStrictDelete($login) {
  1030. $login = mysql_real_escape_string($login);
  1031. $query = "DELETE from `ahenassignstrict` WHERE `login`='" . $login . "';";
  1032. nr_query($query);
  1033. log_register("AGENTASSIGNSTRICT DELETE (" . $login . ")");
  1034. }
  1035. /**
  1036. * Creates ahent strict assign record in database
  1037. *
  1038. * @param string $login
  1039. * @param int $agentid
  1040. *
  1041. * @return void
  1042. */
  1043. function zb_AgentAssignStrictCreate($login, $agentid) {
  1044. zb_AgentAssignStrictDelete($login);
  1045. $clearLogin = mysql_real_escape_string($login);
  1046. $agentid = vf($agentid, 3);
  1047. $query = "INSERT INTO `ahenassignstrict` (`id` , `agentid` ,`login`)
  1048. VALUES (NULL , '" . $agentid . "', '" . $clearLogin . "');";
  1049. nr_query($query);
  1050. log_register("AGENTASSIGNSTRICT ADD (" . $login . ") [" . $agentid . "]");
  1051. }
  1052. /**
  1053. * Renders agent assigned users stats
  1054. *
  1055. * @param string $mask Optional tariff mask to separate users
  1056. *
  1057. * @return string
  1058. */
  1059. function zb_AgentStatsRender($mask = '') {
  1060. /**
  1061. * Seems that waz written with Paranormal Helicopter Porn
  1062. */
  1063. $result = '';
  1064. $allUsers = zb_UserGetAllStargazerDataAssoc();
  1065. $tmpArr = array(); // contains all user assigns as login=>agentid
  1066. $agentCounters = array(); //contains binding stats as AgentId = > userCount
  1067. $maskCounters = array(); //contains binding stats as AgentId mask=>all/active
  1068. if (!empty($allUsers)) {
  1069. $allAddress = zb_AddressGetFullCityaddresslist();
  1070. $allAssigns = zb_AgentAssignGetAllData();
  1071. $strictAssigns = zb_AgentAssignStrictGetAllData();
  1072. $allAgentData = zb_ContrAhentGetAllData();
  1073. $allAgentNames = array(); //agentid=>contrname
  1074. if (!empty($allAgentData)) {
  1075. //shitty preprocessing here
  1076. foreach ($allAgentData as $io => $eachAgentData) {
  1077. $allAgentNames[$eachAgentData['id']] = $eachAgentData['contrname'];
  1078. }
  1079. }
  1080. foreach ($allUsers as $eachLogin => $eachUserData) {
  1081. $assignedAgentId = zb_AgentAssignCheckLoginFast($eachLogin, $allAssigns, @$allAddress[$eachLogin], $strictAssigns);
  1082. if (!empty($assignedAgentId)) {
  1083. $tmpArr[$eachLogin] = $assignedAgentId;
  1084. }
  1085. }
  1086. if (!empty($tmpArr)) {
  1087. foreach ($tmpArr as $eachUser => $eachAgentId) {
  1088. $userData = $allUsers[$eachUser];
  1089. if (($userData['Cash'] >= '-' . $userData['Credit']) and ($userData['AlwaysOnline'] == 1) and ($userData['Passive'] == 0) and ($userData['Down'] == 0)) {
  1090. $active = 1;
  1091. } else {
  1092. $active = 0;
  1093. }
  1094. if (isset($agentCounters[$eachAgentId])) {
  1095. $agentCounters[$eachAgentId]['total']++;
  1096. $agentCounters[$eachAgentId]['active'] += $active;
  1097. } else {
  1098. $agentCounters[$eachAgentId]['total'] = 1;
  1099. $agentCounters[$eachAgentId]['active'] = $active;
  1100. }
  1101. if (!empty($mask)) {
  1102. if (ispos($userData['Tariff'], $mask)) {
  1103. if (isset($maskCounters[$eachAgentId][$mask])) {
  1104. $maskCounters[$eachAgentId][$mask]['all']++;
  1105. $maskCounters[$eachAgentId][$mask]['active'] += $active;
  1106. } else {
  1107. $maskCounters[$eachAgentId][$mask]['all'] = 1;
  1108. $maskCounters[$eachAgentId][$mask]['active'] = $active;
  1109. }
  1110. }
  1111. }
  1112. }
  1113. }
  1114. if (!empty($agentCounters)) {
  1115. $cells = wf_TableCell(__('Contrahent name'));
  1116. $cells .= wf_TableCell(__('Users'));
  1117. $cells .= wf_TableCell(__('Active'));
  1118. if ($mask) {
  1119. $cells .= wf_TableCell($mask . ': ' . __('Total') . ' / ' . __('Active'));
  1120. }
  1121. $rows = wf_TableRow($cells, 'row1');
  1122. foreach ($agentCounters as $agentId => $userCount) {
  1123. $cells = wf_TableCell(@$allAgentNames[$agentId]);
  1124. $cells .= wf_TableCell($userCount['total']);
  1125. $cells .= wf_TableCell($userCount['active']);
  1126. if ($mask) {
  1127. $cells .= wf_TableCell(@$maskCounters[$agentId][$mask]['all'] . ' / ' . @$maskCounters[$agentId][$mask]['active']);
  1128. }
  1129. $rows .= wf_TableRow($cells, 'row5');
  1130. }
  1131. $result .= wf_TableBody($rows, '100%', 0, 'sortable');
  1132. } else {
  1133. $messages = new UbillingMessageHelper();
  1134. $result .= $messages->getStyledMessage(__('Nothing to show'), 'warning');
  1135. }
  1136. }
  1137. return ($result);
  1138. }
  1139. /**
  1140. * Returns extended agent info filtered by $recID or $agentID.
  1141. * If no $recID or $agentID parameter given - all available records returned.
  1142. *
  1143. * @param string $recID
  1144. * @param string $agentID
  1145. * @param false $getBaseAgentInfo
  1146. *
  1147. * @return array
  1148. */
  1149. function zb_GetAgentExtInfo($recID = '', $agentID = '', $getBaseAgentInfo = false, $whereRawStr = '', $assocByField = '') {
  1150. $tabAgentExtInfo = new NyanORM('contrahens_extinfo');
  1151. if ($getBaseAgentInfo) {
  1152. $tabAgentExtInfo->selectable(array(
  1153. '`contrahens_extinfo`.*',
  1154. '`contrahens`.`bankacc`',
  1155. '`contrahens`.`bankname`',
  1156. '`contrahens`.`bankcode`',
  1157. '`contrahens`.`edrpo`',
  1158. '`contrahens`.`ipn`',
  1159. '`contrahens`.`licensenum`',
  1160. '`contrahens`.`juraddr`',
  1161. '`contrahens`.`phisaddr`',
  1162. '`contrahens`.`phone`',
  1163. '`contrahens`.`contrname`',
  1164. '`contrahens`.`agnameabbr`',
  1165. '`contrahens`.`agsignatory`',
  1166. '`contrahens`.`agsignatory2`',
  1167. '`contrahens`.`agbasis`',
  1168. '`contrahens`.`agmail`',
  1169. '`contrahens`.`siteurl`'
  1170. ));
  1171. $tabAgentExtInfo->joinOn('LEFT', 'contrahens', " `contrahens_extinfo`.`agentid` = `contrahens`.`id` ");
  1172. }
  1173. if (!empty($recID)) {
  1174. $tabAgentExtInfo->where('id', '=', $recID);
  1175. }
  1176. if (!empty($agentID)) {
  1177. $tabAgentExtInfo->where('agentid', '=', $agentID);
  1178. }
  1179. if (!empty($whereRawStr)) {
  1180. $tabAgentExtInfo->whereRaw($whereRawStr);
  1181. }
  1182. $result = $tabAgentExtInfo->getAll($assocByField);
  1183. return ($result);
  1184. }
  1185. /**
  1186. * Creates new contragent extended info record in DB
  1187. *
  1188. * @param $extinfoAgentID
  1189. * @param $extinfoSrvType
  1190. * @param $extinfoPaySysName
  1191. * @param $extinfoPaySysID
  1192. * @param $extinfoPaySysSrvID
  1193. * @param $extinfoPaySysToken
  1194. * @param $extinfoPaySysSecretKey
  1195. * @param $extinfoPaySysPassword
  1196. *
  1197. * @return void
  1198. * @throws Exception
  1199. */
  1200. function zb_CreateAgentExtInfoRec(
  1201. $extinfoAgentID,
  1202. $extinfoSrvType = '',
  1203. $extinfoPaySysName = '',
  1204. $extinfoPaySysID = '',
  1205. $extinfoPaySysSrvID = '',
  1206. $extinfoPaySysToken = '',
  1207. $extinfoPaySysSecretKey = '',
  1208. $extinfoPaySysPassword = '',
  1209. $extinfoPaymentFeeInfo = '',
  1210. $extinfoPaySysCallbackURL = ''
  1211. ) {
  1212. $tabAgentExtInfo = new NyanORM('contrahens_extinfo');
  1213. $tabAgentExtInfo->dataArr(
  1214. array(
  1215. 'agentid' => $extinfoAgentID,
  1216. 'service_type' => $extinfoSrvType,
  1217. 'internal_paysys_name' => $extinfoPaySysName,
  1218. 'internal_paysys_id' => $extinfoPaySysID,
  1219. 'internal_paysys_srv_id' => $extinfoPaySysSrvID,
  1220. 'paysys_token' => $extinfoPaySysToken,
  1221. 'paysys_secret_key' => $extinfoPaySysSecretKey,
  1222. 'paysys_password' => $extinfoPaySysPassword,
  1223. 'payment_fee_info' => $extinfoPaymentFeeInfo,
  1224. 'paysys_callback_url' => $extinfoPaySysCallbackURL
  1225. )
  1226. );
  1227. $tabAgentExtInfo->create();
  1228. $recID = $tabAgentExtInfo->getLastId();
  1229. log_register('AGENT EXTEN INFO CREATE [' . $recID . ']');
  1230. }
  1231. /**
  1232. * Changes contragent extended info record in DB by given record ID
  1233. *
  1234. * @param $recID
  1235. * @param $extinfoAgentID
  1236. * @param $extinfoSrvType
  1237. * @param $extinfoPaySysName
  1238. * @param $extinfoPaySysID
  1239. * @param $extinfoPaySysSrvID
  1240. * @param $extinfoPaySysToken
  1241. * @param $extinfoPaySysSecretKey
  1242. * @param $extinfoPaySysPassword
  1243. *
  1244. * @return void
  1245. * @throws Exception
  1246. */
  1247. function zb_EditAgentExtInfoRec(
  1248. $recID,
  1249. $extinfoAgentID,
  1250. $extinfoSrvType = '',
  1251. $extinfoPaySysName = '',
  1252. $extinfoPaySysID = '',
  1253. $extinfoPaySysSrvID = '',
  1254. $extinfoPaySysToken = '',
  1255. $extinfoPaySysSecretKey = '',
  1256. $extinfoPaySysPassword = '',
  1257. $extinfoPaymentFeeInfo = '',
  1258. $extinfoPaySysCallbackURL = ''
  1259. ) {
  1260. $tabAgentExtInfo = new NyanORM('contrahens_extinfo');
  1261. $tabAgentExtInfo->dataArr(
  1262. array(
  1263. 'id' => $recID,
  1264. 'agentid' => $extinfoAgentID,
  1265. 'service_type' => $extinfoSrvType,
  1266. 'internal_paysys_name' => $extinfoPaySysName,
  1267. 'internal_paysys_id' => $extinfoPaySysID,
  1268. 'internal_paysys_srv_id' => $extinfoPaySysSrvID,
  1269. 'paysys_token' => $extinfoPaySysToken,
  1270. 'paysys_secret_key' => $extinfoPaySysSecretKey,
  1271. 'paysys_password' => $extinfoPaySysPassword,
  1272. 'payment_fee_info' => $extinfoPaymentFeeInfo,
  1273. 'paysys_callback_url' => $extinfoPaySysCallbackURL
  1274. )
  1275. );
  1276. $tabAgentExtInfo->where('id', '=', $recID);
  1277. $tabAgentExtInfo->save(true, true);
  1278. log_register('AGENT EXTEN INFO EDIT [' . $recID . ']');
  1279. }
  1280. /**
  1281. * Removes contragent extended info record from DB by given record ID
  1282. *
  1283. * @param $recID
  1284. *
  1285. * @return void
  1286. * @throws Exception
  1287. */
  1288. function zb_DeleteAgentExtInfoRec($recID) {
  1289. $tabAgentExtInfo = new NyanORM('contrahens_extinfo');
  1290. $tabAgentExtInfo->where('id', '=', $recID);
  1291. $tabAgentExtInfo->delete();
  1292. log_register('AGENT EXTEN INFO DELETE [' . $recID . ']');
  1293. }
  1294. /**
  1295. * Returns extended agent info edit form
  1296. *
  1297. * @param string $recID
  1298. *
  1299. * @return string
  1300. */
  1301. function zb_AgentEditExtInfoForm($recID = '') {
  1302. $extinfoData = (empty($recID) ? array() : zb_GetAgentExtInfo($recID));
  1303. $extinfoEditMode = !empty($extinfoData);
  1304. $extinfoRecID = '';
  1305. $extinfoAgentID = ubRouting::checkGet('extinfo') ? ubRouting::get('extinfo') : '';
  1306. $extinfoSrvType = '';
  1307. $extinfoPaySysName = '';
  1308. $extinfoPaySysID = '';
  1309. $extinfoPaySysSrvID = '';
  1310. $extinfoPaySysToken = '';
  1311. $extinfoPaySysSecretKey = '';
  1312. $extinfoPaySysPassword = '';
  1313. $extinfoPaymentFeeInfo = '';
  1314. $extinfoPaySysCallbackURL = '';
  1315. $allPaySys = array();
  1316. $srvtypeSelectorID = wf_InputId();
  1317. $openpayzSelectorID = wf_InputId();
  1318. $payfeeinfoSelectorID = wf_InputId();
  1319. $paysysControlID = wf_InputId();
  1320. if ($extinfoEditMode) {
  1321. $extinfoRecID = $extinfoData[0]['id'];
  1322. $extinfoAgentID = $extinfoData[0]['agentid'];
  1323. $extinfoSrvType = $extinfoData[0]['service_type'];
  1324. $extinfoPaySysName = $extinfoData[0]['internal_paysys_name'];
  1325. $extinfoPaySysID = $extinfoData[0]['internal_paysys_id'];
  1326. $extinfoPaySysSrvID = $extinfoData[0]['internal_paysys_srv_id'];
  1327. $extinfoPaySysToken = $extinfoData[0]['paysys_token'];
  1328. $extinfoPaySysSecretKey = $extinfoData[0]['paysys_secret_key'];
  1329. $extinfoPaySysPassword = $extinfoData[0]['paysys_password'];
  1330. $extinfoPaymentFeeInfo = $extinfoData[0]['payment_fee_info'];
  1331. $extinfoPaySysCallbackURL = $extinfoData[0]['paysys_callback_url'];
  1332. } else {
  1333. // load existing OpenPayz payment systems
  1334. $query = 'select distinct `paysys` from `op_transactions`';
  1335. $all = simple_queryall($query);
  1336. if (!empty($all)) {
  1337. foreach ($all as $io => $each) {
  1338. $allPaySys[$each['paysys']] = $each['paysys'];
  1339. }
  1340. }
  1341. // check if PrivatBank invoices sending is on
  1342. global $ubillingConfig;
  1343. $rmdPBInvoicesON = $ubillingConfig->getAlterParam('REMINDER_PRIVATBANK_INVOICE_PUSH', false);
  1344. if ($rmdPBInvoicesON) {
  1345. $allPaySys['PRIVAT_INVOICE_PUSH'] = 'PRIVAT_INVOICE_PUSH';
  1346. }
  1347. }
  1348. $inputs = wf_Selector('extinfsrvtype', array('Internet' => __('Internet'), 'UKV' => __('UKV')), __('Choose service type'), $extinfoSrvType, false, false, $srvtypeSelectorID, '', '', true);
  1349. $inputs .= ($extinfoEditMode) ? '' : wf_Selector('extinfoppaysys', $allPaySys, __('You may select OpenPayz payment system name'), '', false, false, $openpayzSelectorID, '', '', true);
  1350. $inputs .= wf_TextInput('extinfintpaysysname', __('Payment system name'), $extinfoPaySysName, false, '', '', '', $paysysControlID, '', true);
  1351. $inputs .= wf_TextInput('extinfintpaysysid', __('Contragent code within payment system'), $extinfoPaySysID, false, '', '', '', '', '', true);
  1352. $inputs .= wf_TextInput('extinfintpaysyssrvid', __('Service code within payment system'), $extinfoPaySysSrvID, false, '', '', '', '', '', true);
  1353. $inputs .= wf_TextInput('extinfintpaysystoken', __('Service token'), $extinfoPaySysToken, false, '', '', '', '', '', true);
  1354. $inputs .= wf_TextInput('extinfintpaysyskey', __('Service secret key'), $extinfoPaySysSecretKey, false, '', '', '', '', '', true);
  1355. $inputs .= wf_TextInput('extinfintpaysyspasswd', __('Service password'), $extinfoPaySysPassword, false, '50', '', '', '', '', true);
  1356. $inputs .= wf_Selector('extinfintpayfeeinfo', array('provider' => __('Provider'), 'subscriber' => __('Subscriber')), __('Choose who pays fee'), $extinfoPaymentFeeInfo, false, false, $payfeeinfoSelectorID, '', '', true);
  1357. $inputs .= wf_TextInput('extinfintpaysyscallbackurl', __('Service callback URL'), $extinfoPaySysCallbackURL, false, '', 'url', '', '', '', true);
  1358. $inputs .= wf_HiddenInput('extinfrecid', $extinfoRecID);
  1359. $inputs .= wf_HiddenInput('extinfagentid', $extinfoAgentID);
  1360. $inputs .= wf_HiddenInput('extinfeditmode', $extinfoEditMode);
  1361. $inputs .= wf_SubmitClassed(true, 'ubButton', '', ($extinfoEditMode) ? __('Edit') : __('Create'));
  1362. if (!$extinfoEditMode) {
  1363. $tmpJS = "
  1364. $(document).ready(function() {
  1365. if ($('#" . $srvtypeSelectorID . " option:selected').val() == 'Internet') {
  1366. $('#" . $openpayzSelectorID . "').prop('disabled', false);
  1367. } else {
  1368. $('#" . $openpayzSelectorID . "').prop('disabled', true);
  1369. }
  1370. $('#" . $srvtypeSelectorID . "').on('change', function() {
  1371. console.log($('#" . $srvtypeSelectorID . " option:selected').val());
  1372. let opz_disabled = ($('#" . $srvtypeSelectorID . " option:selected').val() != 'Internet');
  1373. $('#" . $openpayzSelectorID . "').prop('disabled', opz_disabled);
  1374. });
  1375. $('#" . $openpayzSelectorID . "').on('change', function() {
  1376. $('#" . $paysysControlID . "').val($('#" . $openpayzSelectorID . " option:selected').val());
  1377. });
  1378. });
  1379. ";
  1380. $inputs .= wf_EncloseWithJSTags($tmpJS);
  1381. }
  1382. $result = wf_Form("", 'POST', $inputs, 'glamour form-grid-2cols form-grid-2cols-label-right labels-top');
  1383. return ($result);
  1384. }
  1385. /**
  1386. * Returns all available extended agent info for a particular $agentID
  1387. *
  1388. * @param $agentID
  1389. *
  1390. * @return string
  1391. */
  1392. function zb_RenderAgentExtInfoTable($agentID) {
  1393. $extinfoData = zb_GetAgentExtInfo('', $agentID, true);
  1394. // construct needed editor
  1395. $titles = array(
  1396. 'ID',
  1397. 'Contrahent name',
  1398. 'Service type',
  1399. 'Payment system name',
  1400. 'Contragent code within payment system',
  1401. 'Service code within payment system',
  1402. 'Service token',
  1403. 'Service secret key',
  1404. 'Service password',
  1405. 'Who pays fee',
  1406. 'Service callback URL'
  1407. );
  1408. $keys = array(
  1409. 'id',
  1410. 'contrname',
  1411. 'service_type',
  1412. 'internal_paysys_name',
  1413. 'internal_paysys_id',
  1414. 'internal_paysys_srv_id',
  1415. 'paysys_token',
  1416. 'paysys_secret_key',
  1417. 'paysys_password',
  1418. 'payment_fee_info',
  1419. 'paysys_callback_url'
  1420. );
  1421. $result = web_GridEditor($titles, $keys, $extinfoData, 'contrahens&extinfo=' . $agentID, true, true);
  1422. return ($result);
  1423. }