Source of file api.corps.php
Size: 46,972 Bytes - Last Modified: 2024-05-04T16:22:09+03:00
/tmp/current_snapshot/api/libs/api.corps.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278 | <?php /** * Corporate aka enterprise users implementation */ class Corps { /** * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Display IBAN label instead of bank account in some forms/preview. * * @var bool */ protected $ibanFlag = false; /** * Contains available corps to normal users bindings as login=>corpId * * @var array */ protected $users = array(); /** * Contains available corps as id=>corpData * * @var array */ protected $corps = array(); /** * Contains available corps contact persons as id=>personData * * @var array */ protected $persons = array(); /** * Contains existing tax types as id=>type * * @var array */ protected $taxtypes = array(); /** * Use bank/taxes field names for RF flag * * @var bool */ protected $rfCorpsFlag = false; /** * Contains available document types * * @var array */ protected $doctypes = array( '1' => 'Certificate', '2' => 'Regulations', '3' => 'Reference' ); /** * Contains corps data database abstraction layer * * @var object */ protected $corpsDb = ''; /** * Contains taxtypes database abstraction layer * * @var object */ protected $taxtypesDb = ''; /** * Contains persons database abstraction layer * * @var object */ protected $personsDb = ''; /** * Contains users database abstraction layer * * @var object */ protected $usersDb = ''; /** * Some predefined module routing URLs */ const ROUTE_PREFIX = 'show'; const URL_TAXTYPE = 'taxtypes'; const URL_TAXTYPE_LIST = '?module=corps&show=taxtypes'; const URL_TAXTYPE_DEL = '?module=corps&show=taxtypes&deltaxtypeid='; const URL_CORPS = 'corps'; const URL_CORPS_LIST = '?module=corps&show=corps'; const URL_SEARCH = 'search'; const URL_CORPS_SEARCH = '?module=corps&show=search'; const URL_CORPS_EDIT = '?module=corps&show=corps&editid='; const URL_CORPS_ADD = '?module=corps&show=corps&add=true'; const URL_CORPS_DEL = '?module=corps&show=corps&deleteid='; const URL_USER = 'user'; const URL_USER_MANAGE = '?module=corps&show=user&username='; const URL_AJDT = 'ajax'; //some datasources here const TABLE_DATA = 'corp_data'; const TABLE_TAXTYPES = 'corp_taxtypes'; const TABLE_PERSONS = 'corp_persons'; const TABLE_USERS = 'corp_users'; /** * Creates new corps object instance */ public function __construct() { $this->loadConfigs(); $this->initDb(); $this->loadUsers(); $this->loadCorps(); $this->loadPersons(); $this->loadTaxtypes(); } /** * Loads required configs and sets some object properties * * @global object $ubillingConfig * * @return void */ protected function loadConfigs() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); if (@$this->altCfg['IBAN_ENABLED']) { $this->ibanFlag = true; } if (@$this->altCfg['RFCORPS']) { $this->rfCorpsFlag = true; } if (@$this->altCfg['CORPS_ADDT']) { $rawTypes = explode(',', $this->altCfg['CORPS_ADDT']); if (!empty($rawTypes)) { foreach ($rawTypes as $io => $eachDt) { $this->doctypes[] = $eachDt; } } } } /** * Inits all required database abstraction layers * * @return void */ protected function initDb() { $this->corpsDb = new NyanORM(self::TABLE_DATA); $this->taxtypesDb = new NyanORM(self::TABLE_TAXTYPES); $this->personsDb = new NyanORM(self::TABLE_PERSONS); $this->usersDb = new NyanORM(self::TABLE_USERS); } /** * loads available corps from database into private prop * * @return void */ protected function loadCorps() { $this->corpsDb->orderBy('id', 'DESC'); $this->corps = $this->corpsDb->getAll('id'); } /** * loads taxtypes from database * * @return void */ protected function loadTaxtypes() { $all = $this->taxtypesDb->getAll(); if (!empty($all)) { foreach ($all as $io => $each) { $this->taxtypes[$each['id']] = $each['type']; } } } /** * loads contact persons from database * * @return void */ protected function loadPersons() { $this->persons = $this->personsDb->getAll('id'); } /** * loads user bindings from database and store it into private prop users * * @return void */ protected function loadUsers() { $all = $this->usersDb->getAll(); if (!empty($all)) { foreach ($all as $io => $each) { $this->users[$each['login']] = $each['corpid']; } } } /** * returns existing taxtype edit form * * @param $id int existing tax type ID * * @return string */ protected function taxtypeEditForm($id) { $id = ubRouting::filters($id, 'int'); $result = ''; if (isset($this->taxtypes[$id])) { $taxtypename = $this->taxtypes[$id]; $taxtypename = htmlspecialchars($taxtypename); $inputs = wf_HiddenInput('edittaxtypeid', $id); $inputs .= wf_TextInput('edittaxtype', __('Type'), $taxtypename, true, '40'); $inputs .= wf_Submit(__('Save')); $result = wf_Form("", 'POST', $inputs, 'glamour'); } else { $result = __('Not existing item'); } return ($result); } /** * returns new taxtype creation form * * @return string */ protected function taxtypeCreateForm() { $inputs = wf_TextInput('newtaxtype', __('Type'), '', true, '40'); $inputs .= wf_Submit(__('Create')); $result = wf_Form("", 'POST', $inputs, 'glamour'); return ($result); } /** * creates new taxtype * * @param $type string new taxtype * * @return void */ public function taxtypeCreate($type) { $type = ubRouting::filters($type, 'mres'); $this->taxtypesDb->data('type', $type); $this->taxtypesDb->create(); $newId = $this->taxtypesDb->getLastId(); log_register('CORPS CREATE TAXTYPE [' . $newId . ']'); } /** * returns standard localized deletion alert * * @return string */ protected function alertDelete() { return (__('Removing this may lead to irreparable results')); } /** * return existing taxtypes list with edit controls * * @return string */ public function taxtypesList() { $cells = wf_TableCell(__('ID')); $cells .= wf_TableCell(__('Type')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); if (!empty($this->taxtypes)) { foreach ($this->taxtypes as $id => $type) { $cells = wf_TableCell($id); $cells .= wf_TableCell($type); $actlinks = wf_JSAlert(self::URL_TAXTYPE_DEL . $id, web_delete_icon(), $this->alertDelete()); $actlinks .= wf_modal(web_edit_icon(), __('Edit'), $this->taxtypeEditForm($id), '', '450', '150'); $cells .= wf_TableCell($actlinks); $rows .= wf_TableRow($cells, 'row3'); } } $result = wf_TableBody($rows, '100%', '0', 'sortable'); $result .= wf_modal(wf_img('skins/icon_add.gif') . ' ' . __('Create'), __('Create'), $this->taxtypeCreateForm(), 'ubButton', '450', '150'); return ($result); } /** * deletes existing tax type from database * * @return void */ public function taxtypeDelete($id) { $id = ubRouting::filters($id, 'int'); if (isset($this->taxtypes[$id])) { $this->taxtypesDb->where('id', '=', $id); $this->taxtypesDb->delete(); log_register('CORPS DELETE TAXTYPE [' . $id . ']'); } } /** * edits existing tax type * * @param $id int existing taxtype ID * @param $type new taxtype description * * @return void */ public function taxtypeEdit($id, $type) { $id = ubRouting::filters($id, 'int'); if (isset($this->taxtypes[$id])) { $this->taxtypesDb->data('type', $type); $this->taxtypesDb->where('id', '=', $id); $this->taxtypesDb->save(); log_register('CORPS EDIT TAXTYPE [' . $id . ']'); } } /** * list available corps list container * * @return string */ public function corpsList() { $result = ''; $columns = array('ID', 'Corp name', 'Address', 'Document type', 'Document date', 'Tax payer status', 'Actions'); $ajUrl = self::URL_CORPS_LIST . '&' . self::URL_AJDT . '=true'; $result .= wf_JqDtLoader($columns, $ajUrl, false, __('Corporate users'), 50, '"order": [[ 0, "desc" ]]'); return($result); } /** * list available corps JSON data with some controls * * @return void */ public function corpsListAjax() { $json = new wf_JqDtHelper(); if (!empty($this->corps)) { foreach ($this->corps as $io => $each) { if (isset($this->doctypes[$each['doctype']])) { $doctype = __($this->doctypes[$each['doctype']]); } else { $doctype = $each['doctype']; } if (isset($this->taxtypes[$each['taxtype']])) { $taxtype = $this->taxtypes[$each['taxtype']]; } else { $taxtype = $each['taxtype']; } $actlinks = wf_JSAlert(self::URL_CORPS_DEL . $each['id'], web_delete_icon(), $this->alertDelete()) . ' '; $actlinks .= wf_JSAlert(self::URL_CORPS_EDIT . $each['id'], web_edit_icon(), __('Are you serious')) . ' '; $actlinks .= wf_modal(wf_img('skins/icon_search_small.gif', __('Preview')), $each['corpname'], $this->corpPreview($each['id']), '', '800', '600'); $data[] = $each['id']; $data[] = $each['corpname']; $data[] = $each['address']; $data[] = $doctype; $data[] = $each['docdate']; $data[] = $taxtype; $data[] = $actlinks; $json->addRow($data); unset($data); } } $json->getJson(); } /** * show existing corp preview * * @param $id int existing corp ID * * @return string */ public function corpPreview($id) { $id = ubRouting::filters($id, 'int'); $result = ''; if (isset($this->corps[$id])) { $cells = wf_TableCell(__('Corp name'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpname']); $rows = wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Address'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['address']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Document type'), '', 'row2'); if (isset($this->doctypes[$this->corps[$id]['doctype']])) { $doctype = __($this->doctypes[$this->corps[$id]['doctype']]); } else { $doctype = $this->corps[$id]['doctype']; } $cells .= wf_TableCell($doctype); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Document number'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['docnum']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Document date'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['docdate']); $rows .= wf_TableRow($cells, 'row3'); $bankAccLabel = ($this->ibanFlag) ? __('IBAN') : __('Bank account'); $cells = wf_TableCell($bankAccLabel, '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['bankacc']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Bank name'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['bankname']); $rows .= wf_TableRow($cells, 'row3'); $mfoLabel = (!$this->rfCorpsFlag) ? __('Bank MFO') : __('Bank BIK'); $edrpouLabel = (!$this->rfCorpsFlag) ? __('EDRPOU') : __('OGRN'); $ndsNumLabel = (!$this->rfCorpsFlag) ? __('NDS number') : __('INN Number'); $innCodeLabel = (!$this->rfCorpsFlag) ? __('INN code') : __('KPP Code'); $cells = wf_TableCell($mfoLabel, '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['bankmfo']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell($edrpouLabel, '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['edrpou']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell($ndsNumLabel, '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['ndstaxnum']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell($innCodeLabel, '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['inncode']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Tax type'), '', 'row2'); if (isset($this->taxtypes[$this->corps[$id]['taxtype']])) { $taxtype = $this->taxtypes[$this->corps[$id]['taxtype']]; } else { $taxtype = $this->corps[$id]['taxtype']; } $cells .= wf_TableCell($taxtype); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Short name'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpnameabbr']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Signatory'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpsignatory']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Signatory') . ' 2', '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpsignatory2']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Basis'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpbasis']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Email'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['corpemail']); $rows .= wf_TableRow($cells, 'row3'); $cells = wf_TableCell(__('Notes'), '', 'row2'); $cells .= wf_TableCell($this->corps[$id]['notes']); $rows .= wf_TableRow($cells, 'row3'); $result = wf_TableBody($rows, '100%', '0'); $result .= $this->corpListUsers($id); $result .= $this->personsList($id); } else { $result = __('Not existing item'); } return ($result); } /** * returns selector of existing doctypes * * @param $name string input name * * @return string */ protected function doctypeSelector($name, $selected = '') { $doctypes = array(); if (!empty($this->doctypes)) { foreach ($this->doctypes as $id => $type) { $doctypes[$id] = __($type); } } $result = wf_Selector($name, $doctypes, __('Document type'), $selected, false); return ($result); } /** * returns list of users which linked with this corp * * @param $id int Existing corp ID * * @return string */ protected function corpListUsers($id) { $id = ubRouting::filters($id, 'int'); $result = ''; $userArr = array(); if (isset($this->corps[$id])) { if (!empty($this->users)) { foreach ($this->users as $login => $corpid) { if ($corpid == $id) { $userArr[$login] = $login; } } if (!empty($userArr)) { $result .= wf_tag('b') . __('Linked users') . ': ' . wf_tag('b', true); foreach ($userArr as $eachlogin) { $result .= wf_Link('?module=userprofile&username=' . $eachlogin, web_profile_icon() . ' ' . $eachlogin, false, '') . ' '; } $result .= wf_delimiter(); } } } return ($result); } /** * filter array for unacceptable entities * * @param $data array Data array for escaping * * @return array */ protected function filterArray($data) { $result = array(); if (!empty($data)) { foreach ($data as $key => $value) { $result[$key] = htmlspecialchars($value); } } return ($result); } /** * returns corp edit form * * @param $id existing corp ID * * @return string */ public function corpEditForm($id) { $id = ubRouting::filters($id, 'int'); $result = ''; if (isset($this->corps[$id])) { $data = $this->corps[$id]; $data = $this->filterArray($data); $sup = wf_tag('sup') . '*' . wf_tag('sup', true); $inputs = wf_HiddenInput('editcorpid', $id); $inputs .= wf_TextInput('editcorpname', __('Corp name') . $sup, $data['corpname'], true, '40'); $inputs .= wf_TextInput('editcoraddress', __('Address'), $data['address'], true, '40'); $inputs .= $this->doctypeSelector('editdoctype', $data['doctype']); $inputs .= wf_DatePickerPreset('editdocdate', $data['docdate'], true) . ' ' . __('Document date') . wf_tag('br'); $inputs .= wf_TextInput('editdocnum', __('Document number'), $data['docnum'], true, '20'); $bankAccLabel = ($this->ibanFlag) ? __('IBAN') : __('Bank account'); $inputs .= wf_TextInput('editbankacc', $bankAccLabel, $data['bankacc'], true, '20'); $inputs .= wf_TextInput('editbankname', __('Bank name'), $data['bankname'], true, '20'); $mfoLabel = (!$this->rfCorpsFlag) ? __('Bank MFO') : __('Bank BIK'); $edrpouLabel = (!$this->rfCorpsFlag) ? __('EDRPOU') : __('OGRN'); $ndsNumLabel = (!$this->rfCorpsFlag) ? __('NDS number') : __('INN Number'); $innCodeLabel = (!$this->rfCorpsFlag) ? __('INN code') : __('KPP Code'); $inputs .= wf_TextInput('editbankmfo', $mfoLabel, $data['bankmfo'], true, '20'); $inputs .= wf_TextInput('editedrpou', $edrpouLabel, $data['edrpou'], true, '20'); $inputs .= wf_TextInput('editndstaxnum', $ndsNumLabel, $data['ndstaxnum'], true, '20'); $inputs .= wf_TextInput('editinncode', $innCodeLabel, $data['inncode'], true, '20'); $inputs .= wf_Selector('edittaxtype', $this->taxtypes, __('Tax type'), $data['taxtype'], true); $inputs .= wf_TextInput('editcorpnameabbr', __('Short name'), $data['corpnameabbr'], true, '20'); $inputs .= wf_TextInput('editcorpsignatory', __('Signatory'), $data['corpsignatory'], true, '20'); $inputs .= wf_TextInput('editcorpsignatory2', __('Signatory') . ' 2', $data['corpsignatory2'], true, '20'); $inputs .= wf_TextInput('editcorpbasis', __('Basis'), $data['corpbasis'], true, '20'); $inputs .= wf_TextInput('editcorpemail', __('Email'), $data['corpemail'], true, '20'); $inputs .= wf_TextInput('editnotes', __('Notes'), $data['notes'], true, '40'); $inputs .= wf_Submit(__('Save')); $result = wf_Form('', 'POST', $inputs, 'glamour'); //contact persons editor $result .= $this->personsControl($id); } else { $result = __('Not existing item'); } return ($result); } /** * Returns corp creation form * * @return string */ public function corpCreateForm() { if (!empty($this->taxtypes)) { $sup = wf_tag('sup') . '*' . wf_tag('sup', true); $inputs = wf_HiddenInput('createcorpid', 'true'); $inputs .= wf_TextInput('createcorpname', __('Corp name') . $sup, '', true, '40'); $inputs .= wf_TextInput('createaddress', __('Address'), '', true, '40'); $inputs .= $this->doctypeSelector('createdoctype', ''); $inputs .= wf_DatePickerPreset('createdocdate', curdate(), true) . ' ' . __('Document date') . wf_tag('br'); $inputs .= wf_TextInput('adddocnum', __('Document number'), '', true, '20'); $bankAccLabel = ($this->ibanFlag) ? __('IBAN') : __('Bank account'); $inputs .= wf_TextInput('addbankacc', $bankAccLabel, '', true, '20'); $inputs .= wf_TextInput('addbankname', __('Bank name'), '', true, '20'); $mfoLabel = (!$this->rfCorpsFlag) ? __('Bank MFO') : __('Bank BIK'); $edrpouLabel = (!$this->rfCorpsFlag) ? __('EDRPOU') : __('OGRN'); $ndsNumLabel = (!$this->rfCorpsFlag) ? __('NDS number') : __('INN Number'); $innCodeLabel = (!$this->rfCorpsFlag) ? __('INN code') : __('KPP Code'); $inputs .= wf_TextInput('addbankmfo', $mfoLabel, '', true, '20'); $inputs .= wf_TextInput('addedrpou', $edrpouLabel, '', true, '20'); $inputs .= wf_TextInput('addndstaxnum', $ndsNumLabel, '', true, '20'); $inputs .= wf_TextInput('addinncode', $innCodeLabel, '', true, '20'); $inputs .= wf_Selector('addtaxtype', $this->taxtypes, __('Tax type'), '', true); $inputs .= wf_TextInput('addcorpnameabbr', __('Short name'), '', true, '20'); $inputs .= wf_TextInput('addcorpsignatory', __('Signatory'), '', true, '20'); $inputs .= wf_TextInput('addcorpsignatory2', __('Signatory') . ' 2', '', true, '20'); $inputs .= wf_TextInput('addcorpbasis', __('Basis'), '', true, '20'); $inputs .= wf_TextInput('addcorpemail', __('Email'), '', true, '20'); $inputs .= wf_TextInput('addnotes', __('Notes'), '', true, '40'); $inputs .= wf_Submit(__('Create')); $result = wf_Form('', 'POST', $inputs, 'glamour'); } else { $result = __('No existing tax types'); } return ($result); } /** * deletes existing corp by ID * * @param $id int existing corp ID * * @return void */ public function corpDelete($id) { $id = ubRouting::filters($id, 'int'); if (isset($this->corps[$id])) { $this->corpsDb->where('id', '=', $id); $this->corpsDb->delete(); log_register('CORPS DELETE CORP [' . $id . ']'); } } /** * edits corp in database * * @param $id int existing corp ID * * @return void */ public function corpSave($id) { $id = ubRouting::filters($id, 'int'); if (isset($this->corps[$id])) { $this->corpsDb->data('corpname', ubRouting::post('editcorpname', 'mres')); $this->corpsDb->data('address', ubRouting::post('editcoraddress', 'mres')); $this->corpsDb->data('doctype', ubRouting::post('editdoctype', 'mres')); $this->corpsDb->data('docdate', ubRouting::post('editdocdate', 'mres')); $this->corpsDb->data('docnum', ubRouting::post('editdocnum', 'mres')); $this->corpsDb->data('bankacc', ubRouting::post('editbankacc', 'mres')); $this->corpsDb->data('bankname', ubRouting::post('editbankname', 'mres')); $this->corpsDb->data('bankmfo', ubRouting::post('editbankmfo', 'mres')); $this->corpsDb->data('edrpou', ubRouting::post('editedrpou', 'mres')); $this->corpsDb->data('ndstaxnum', ubRouting::post('editndstaxnum', 'mres')); $this->corpsDb->data('inncode', ubRouting::post('editinncode', 'mres')); $this->corpsDb->data('taxtype', ubRouting::post('edittaxtype', 'mres')); $this->corpsDb->data('notes', ubRouting::post('editnotes', 'mres')); $this->corpsDb->data('corpnameabbr', ubRouting::post('editcorpnameabbr', 'mres')); $this->corpsDb->data('corpsignatory', ubRouting::post('editcorpsignatory', 'mres')); $this->corpsDb->data('corpsignatory2', ubRouting::post('editcorpsignatory2', 'mres')); $this->corpsDb->data('corpbasis', ubRouting::post('editcorpbasis', 'mres')); $this->corpsDb->data('corpemail', ubRouting::post('editcorpemail', 'mres')); $this->corpsDb->where('id', '=', $id); $this->corpsDb->save(); log_register('CORPS EDIT CORP [' . $id . ']'); } } /** * Creates new corp in database * * @return int */ public function corpCreate() { $corpname = ubRouting::post('createcorpname', 'mres'); $address = ubRouting::post('createaddress', 'mres'); $doctype = ubRouting::post('createdoctype', 'int'); $docdate = ubRouting::post('createdocdate', 'mres'); $docnum = ubRouting::post('adddocnum', 'mres'); $bankacc = ubRouting::post('addbankacc', 'mres'); $bankname = ubRouting::post('addbankname', 'mres'); $bankmfo = ubRouting::post('addbankmfo', 'mres'); $edrpou = ubRouting::post('addedrpou', 'mres'); $taxnum = ubRouting::post('addndstaxnum', 'mres'); $inncode = ubRouting::post('addinncode', 'mres'); $taxtype = ubRouting::post('addtaxtype', 'int'); $notes = ubRouting::post('addnotes', 'mres'); $corpnameabbr = ubRouting::post('addcorpnameabbr', 'mres'); $corpsignatory = ubRouting::post('addcorpsignatory', 'mres'); $corpsignatory2 = ubRouting::post('addcorpsignatory2', 'mres'); $corpbasis = ubRouting::post('addcorpbasis', 'mres'); $corpemail = ubRouting::post('addcorpemail', 'mres'); $this->corpsDb->data('corpname', $corpname); $this->corpsDb->data('address', $address); $this->corpsDb->data('doctype', $doctype); $this->corpsDb->data('docnum', $docnum); $this->corpsDb->data('docdate', $docdate); $this->corpsDb->data('bankacc', $bankacc); $this->corpsDb->data('bankname', $bankname); $this->corpsDb->data('bankmfo', $bankmfo); $this->corpsDb->data('edrpou', $edrpou); $this->corpsDb->data('ndstaxnum', $taxnum); $this->corpsDb->data('inncode', $inncode); $this->corpsDb->data('taxtype', $taxtype); $this->corpsDb->data('notes', $notes); $this->corpsDb->data('corpnameabbr', $corpnameabbr); $this->corpsDb->data('corpsignatory', $corpsignatory); $this->corpsDb->data('corpsignatory2', $corpsignatory2); $this->corpsDb->data('corpbasis', $corpbasis); $this->corpsDb->data('corpemail', $corpemail); $this->corpsDb->create(); $newID = $this->corpsDb->getLastId(); log_register('CORPS CREATE CORP [' . $newID . ']'); return ($newID); } /** * returns corps link panel * * @return string */ public function corpsPanel() { $result = wf_Link(self::URL_CORPS_ADD, wf_img('skins/icon_add.gif') . ' ' . __('Create'), false, 'ubButton'); $result .= wf_Link(self::URL_CORPS_LIST, wf_img('skins/icon_search_small.gif') . ' ' . __('Available corps'), false, 'ubButton'); $result .= wf_Link(self::URL_TAXTYPE_LIST, wf_img('skins/icon_dollar.gif') . ' ' . __('Available tax types'), false, 'ubButton'); return ($result); } /** * returns contact persons list for some corp * * @param $corpid int Existing corp ID * * @return string */ protected function personsList($corpid) { $corpid = ubRouting::filters($corpid, 'int'); $result = ''; if (!empty($this->persons)) { $cells = wf_TableCell(__('ID')); $cells .= wf_TableCell(__('Real Name')); $cells .= wf_TableCell(__('Phone')); $cells .= wf_TableCell(__('IM')); $cells .= wf_TableCell(__('Email')); $cells .= wf_TableCell(__('Appointment')); $rows = wf_TableRow($cells, 'row1'); foreach ($this->persons as $io => $each) { if ($each['corpid'] == $corpid) { $cells = wf_TableCell($each['id']); $cells .= wf_TableCell($each['realname']); $cells .= wf_TableCell($each['phone']); $cells .= wf_TableCell($each['im']); $cells .= wf_TableCell($each['email']); $cells .= wf_TableCell($each['appointment']); $rows .= wf_TableRow($cells, 'row3'); } } $result .= wf_tag('b') . __('Contact persons') . wf_tag('b', true); $result .= wf_TableBody($rows, '100%', '0', 'sortable'); } return ($result); } /** * returns contact persons edit control for some corp * * @param $corpid int Existing corp ID * * @return string */ protected function personsControl($corpid) { $corpid = ubRouting::filters($corpid, 'int'); $result = ''; if (!empty($this->persons)) { $cells = wf_TableCell(__('ID')); $cells .= wf_TableCell(__('Real Name')); $cells .= wf_TableCell(__('Phone')); $cells .= wf_TableCell(__('IM')); $cells .= wf_TableCell(__('Email')); $cells .= wf_TableCell(__('Appointment')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); foreach ($this->persons as $io => $each) { if ($each['corpid'] == $corpid) { $cells = wf_TableCell($each['id']); $cells .= wf_TableCell($each['realname']); $cells .= wf_TableCell($each['phone']); $cells .= wf_TableCell($each['im']); $cells .= wf_TableCell($each['email']); $cells .= wf_TableCell($each['appointment']); $actLinks = wf_JSAlert(self::URL_CORPS_EDIT . $corpid . '&deletepersonid=' . $each['id'], web_delete_icon(), $this->alertDelete()); $actLinks .= wf_modalAuto(web_edit_icon(), __('Edit'), $this->personEditForm($each['id']), ''); $cells .= wf_TableCell($actLinks); $rows .= wf_TableRow($cells, 'row3'); } } $result .= wf_tag('b') . __('Contact persons') . wf_tag('b', true); $result .= wf_TableBody($rows, '100%', '0', 'sortable'); } return ($result); } /** * returns conact person creation form * * @param $corpid int existing corp ID * * @return string */ public function personCreateForm($corpid) { $corpid = ubRouting::filters($corpid, 'int'); $result = ''; $sup = wf_tag('sup') . '*' . wf_tag('sup', true); if (isset($this->corps[$corpid])) { $inputs = wf_HiddenInput('addpersoncorpid', $corpid); $inputs .= wf_TextInput('addpersonrealname', __('Real Name') . $sup, '', true, '20'); $inputs .= wf_TextInput('addpersonphone', __('Phone'), '', true, '20'); $inputs .= wf_TextInput('addpersonim', __('Instant messenger (Skype, ICQ, Jabber, etc)'), '', true, '20'); $inputs .= wf_TextInput('addpersonemail', __('Email'), '', true, '20'); $inputs .= wf_TextInput('addpersonappointment', __('Appointment'), '', true, '30'); $inputs .= wf_TextArea('addpersonnotes', __('Notes'), '', true, '30x3'); $inputs .= wf_Submit(__('Create')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); } else { $result = __('Not existing item'); } return ($result); } /** * returns conact person creation form * * @param $id int existing contact person ID * * @return string */ protected function personEditForm($id) { $id = ubRouting::filters($id, 'int'); $result = ''; $sup = wf_tag('sup') . '*' . wf_tag('sup', true); if (isset($this->persons[$id])) { $data = $this->persons[$id]; $data = $this->filterArray($data); $inputs = wf_HiddenInput('editpersonid', $id); $inputs .= wf_TextInput('editpersonrealname', __('Real Name') . $sup, $data['realname'], true, '20'); $inputs .= wf_TextInput('editpersonphone', __('Phone'), $data['phone'], true, '20'); $inputs .= wf_TextInput('editpersonim', __('Instant messenger (Skype, ICQ, Jabber, etc)'), $data['im'], true, '20'); $inputs .= wf_TextInput('editpersonemail', __('Email'), $data['email'], true, '20'); $inputs .= wf_TextInput('editpersonappointment', __('Appointment'), $data['appointment'], true, '30'); $inputs .= wf_TextArea('editpersonnotes', __('Notes'), $data['notes'], true, '30x3'); $inputs .= wf_Submit(__('Save')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); } else { $result = __('Not existing item'); } return ($result); } /** * edits contact person in database * * @param $id int existing contact person ID * * @return void */ public function personSave($id) { $id = ubRouting::filters($id, 'int'); if (isset($this->persons[$id])) { $this->personsDb->data('realname', ubRouting::post('editpersonrealname', 'mres')); $this->personsDb->data('phone', ubRouting::post('editpersonphone', 'mres')); $this->personsDb->data('im', ubRouting::post('editpersonim', 'mres')); $this->personsDb->data('email', ubRouting::post('editpersonemail', 'mres')); $this->personsDb->data('appointment', ubRouting::post('editpersonappointment', 'mres')); $this->personsDb->data('notes', ubRouting::post('editpersonnotes', 'mres')); $this->personsDb->where('id', '=', $id); $this->personsDb->save(); log_register('CORPS EDIT PERSON [' . $id . ']'); } } /** * creates new contact person in database * * @return void */ public function personCreate() { if (ubRouting::checkPost(array('addpersoncorpid', 'addpersonrealname'))) { $corpid = ubRouting::post('addpersoncorpid', 'int'); if (isset($this->corps[$corpid])) { $realname = ubRouting::post('addpersonrealname', 'mres'); $phone = ubRouting::post('addpersonphone', 'mres'); $im = ubRouting::post('addpersonim', 'mres'); $email = ubRouting::post('addpersonemail', 'mres'); $appointment = ubRouting::post('addpersonappointment', 'mres'); $notes = ubRouting::post('addpersonnotes', 'mres'); $this->personsDb->data('corpid', $corpid); $this->personsDb->data('realname', $realname); $this->personsDb->data('phone', $phone); $this->personsDb->data('im', $im); $this->personsDb->data('email', $email); $this->personsDb->data('appointment', $appointment); $this->personsDb->data('notes', $notes); $this->personsDb->create(); $newId = $this->personsDb->getLastId(); log_register('CORPS CREATE PERSON [' . $newId . '] FOR CORP [' . $corpid . ']'); } } } /** * check is taxtype used by someone? * * @param $id int existing taxtype ID * * @return bool */ public function taxtypeProtected($id) { $id = ubRouting::filters($id, 'int'); $result = false; if (!empty($this->corps)) { foreach ($this->corps as $io => $each) { if ($each['taxtype'] == $id) { $result = true; break; } } } return ($result); } /** * deletes an existing contact person * * @param $id int existing contact person ID * * @return void */ public function personDelete($id) { $id = ubRouting::filters($id, 'int'); $this->personsDb->where('id', '=', $id); $this->personsDb->delete(); log_register('CORPS DELETE PERSON [' . $id . ']'); } /** * binds user login to existing corp ID * * @param $login string Existing user login * @param $corpid int Existing corp ID * * @return void */ public function userBind($login, $corpid) { $loginF = ubRouting::filters($login, 'mres'); $corpid = ubRouting::filters($corpid, 'int'); if (!isset($this->users[$login])) { $this->usersDb->data('login', $loginF); $this->usersDb->data('corpid', $corpid); $this->usersDb->create(); log_register('CORPS BIND USER (' . $login . ') TO [' . $corpid . ']'); } } /** * unbinds user login from any corp and sets him as just private user * * @param $login string Existing user login * * @return void */ function userUnbind($login) { $loginF = ubRouting::filters($login, 'mres'); if (isset($this->users[$login])) { $this->usersDb->where('login', '=', $loginF); $this->usersDb->delete(); log_register('CORPS UNBIND USER (' . $login . ')'); } } /** * checks is user associated with some corp or not? If associated - returns corp ID * * @param $login string Existing user login * * @return int/bool */ function userIsCorporate($login) { $result = false; if (isset($this->users[$login])) { $result = $this->users[$login]; } return ($result); } /** * returns user unbind form * * @param $login string Existing user login * * @return string */ public function userUnbindForm($login) { $login = ubRouting::filters($login, 'mres'); $result = ''; if (isset($this->users[$login])) { $inputs = wf_HiddenInput('corpsunbindlogin', $login); $inputs .= wf_CheckInput('unbindagree', __('I am quite sure that I was going to do'), false, false); $inputs .= wf_Submit(__('Destroy user link')); $result = wf_Form("", 'POST', $inputs, 'glamour'); $result .= wf_delimiter(); $result .= web_UserControls($login); } else { $result = __('Not existing item'); } return ($result); } /** * returns existing coorps selector * * @param $login string Existing user login * * @return string */ public function corpsBindForm($login) { $result = ''; $corpsarr = array(); if (!empty($this->corps)) { foreach ($this->corps as $io => $each) { $corpsarr[$io] = $each['corpname']; } $inputs = wf_HiddenInput('bindsomelogin', $login); if ($this->altCfg['CORPSEL_SEARCHBL']) { $inputs .= wf_SelectorSearchable('bindlogintocorpid', $corpsarr, __('Corporate user'), '', false); } else { $inputs .= wf_Selector('bindlogintocorpid', $corpsarr, __('Corporate user'), '', false); } $inputs .= wf_Submit(__('Create user ling with existing corporate user')); $result = wf_Form("", 'POST', $inputs, 'glamour'); } return ($result); } /** * returns user binding form * * @param $login string Existing user login * * @return string */ public function corpCreateAndBindForm($login) { if (!empty($this->taxtypes)) { $sup = wf_tag('sup') . '*' . wf_tag('sup', true); $inputs = wf_HiddenInput('createcorpid', 'true'); $inputs .= wf_HiddenInput('alsobindsomelogin', $login); $inputs .= wf_TextInput('createcorpname', __('Corp name') . $sup, '', true, '40'); $inputs .= wf_TextInput('createaddress', __('Address'), '', true, '40'); $inputs .= $this->doctypeSelector('createdoctype', ''); $inputs .= wf_DatePickerPreset('createdocdate', curdate(), true) . ' ' . __('Document date') . wf_tag('br'); $inputs .= wf_TextInput('adddocnum', __('Document number'), '', true, '20'); $bankAccLabel = ($this->ibanFlag) ? __('IBAN') : __('Bank account'); $inputs .= wf_TextInput('addbankacc', $bankAccLabel, '', true, '20'); $inputs .= wf_TextInput('addbankname', __('Bank name'), '', true, '20'); $mfoLabel = (!$this->rfCorpsFlag) ? __('Bank MFO') : __('Bank BIK'); $edrpouLabel = (!$this->rfCorpsFlag) ? __('EDRPOU') : __('OGRN'); $ndsNumLabel = (!$this->rfCorpsFlag) ? __('NDS number') : __('INN Number'); $innCodeLabel = (!$this->rfCorpsFlag) ? __('INN code') : __('KPP Code'); $inputs .= wf_TextInput('addbankmfo', $mfoLabel, '', true, '20'); $inputs .= wf_TextInput('addedrpou', $edrpouLabel, '', true, '20'); $inputs .= wf_TextInput('addndstaxnum', $ndsNumLabel, '', true, '20'); $inputs .= wf_TextInput('addinncode', $innCodeLabel, '', true, '20'); $inputs .= wf_Selector('addtaxtype', $this->taxtypes, __('Tax type'), '', true); $inputs .= wf_TextInput('addcorpnameabbr', __('Short name'), '', true, '20'); $inputs .= wf_TextInput('addcorpsignatory', __('Signatory'), '', true, '20'); $inputs .= wf_TextInput('addcorpsignatory2', __('Signatory') . ' 2', '', true, '20'); $inputs .= wf_TextInput('addcorpbasis', __('Basis'), '', true, '20'); $inputs .= wf_TextInput('addcorpemail', __('Email'), '', true, '20'); $inputs .= wf_TextInput('addnotes', __('Notes'), '', true, '40'); $inputs .= wf_Submit(__('Create')); $result = wf_Form(self::URL_CORPS_ADD, 'POST', $inputs, 'glamour'); } else { $result = __('No existing tax types'); } return ($result); } /** * checks is corp used by something or not? * * @param $id int Existing corp ID * * @return bool */ public function corpProtected($id) { $id = ubRouting::filters($id, 'int'); $result = false; if (!empty($this->users)) { foreach ($this->users as $login => $corpid) { if ($corpid == $id) { $result = true; break; } } } return ($result); } /** * Gets corp data by associated username * * @param $login string Existing users login * * @return array */ public function corpGetDataByLogin($login) { $result = array(); if (isset($this->users[$login])) { $corpId = $this->users[$login]; if (isset($this->corps[$corpId])) { $result = $this->corps[$corpId]; //map some IDs to normal text @$result['doctype'] = __($this->doctypes[$result['doctype']]); @$result['taxtype'] = $this->taxtypes[$result['taxtype']]; } } return ($result); } /** * Returns array of available corps * * @return array */ public function getCorps() { return ($this->corps); } /** * Returns array of available corps users * * @return array */ public function getUsers() { return ($this->users); } /** * Rerurns corp id by name part * * @param string $searchterm * * @return int */ protected function searchCorpIdbyName($searchterm) { $result = ''; if (!empty($this->corps)) { if (!empty($searchterm)) { $searchterm = strtolower_utf8($searchterm); foreach ($this->corps as $io => $each) { if (ispos(strtolower_utf8($each['corpname']), $searchterm)) { $result = $io; } } } } return ($result); } /** * returns users array by some corp ID * * @return array */ protected function searchUsersByCorpId($corpid) { $result = array(); if (!empty($this->corps)) { if (!empty($this->users)) { if (!empty($corpid)) { foreach ($this->users as $eachLogin => $eachCorp) { if ($eachCorp == $corpid) { $result[] = $eachLogin; } } } } } return ($result); } /** * Returns standard user list of users assigned for some corp * * @param string $corpname * @return string */ public function searchUsersByCorpName($corpname) { $result = ''; if (!empty($corpname)) { $corpId = $this->searchCorpIdbyName($corpname); if (!empty($corpId)) { $corpLink = wf_Link('?module=corps&show=corps&editid=' . $corpId, $this->corps[$corpId]['corpname'], false, ''); show_success($corpLink); $corpUsers = $this->searchUsersByCorpId($corpId); if (!empty($corpUsers)) { $result = web_UserArrayShower($corpUsers); } else { show_warning(__('Nothing found')); } } else { show_warning(__('Nothing found')); } } return ($result); } } |