{"SOURCE":"ReportMaster: Ubilling 1.3.4 rev 8763","REPORTID":"rm1673519694","REPORTCODE":"REPORT_NAME=\"Today payments\"\nREPORT_TYPE=\"ONEPUNCH\"\nREPORT_ALLOWADMINS=\"\"\nREPORT_QUERY=\"financepublicreport\"\nREPORT_ONTB=\"1\"\nREPORT_AOTD=\"0\"\nREPORT_ICON=\"report.jpg\"\n","OPSCRIPT":{"id":"82","alias":"financepublicreport","name":"Finance Report Public (RM)","content":"    \/**\r\n     * Renders date selection form\r\n     * \r\n     * @return string\r\n     *\/\r\n    function renderDateForm() {\r\n        $result = '';\r\n        $selectedDate = (ubRouting::checkPost('renderdate')) ? ubRouting::post('renderdate') : curdate();\r\n        $inputs = wf_DatePickerPreset('renderdate', $selectedDate, true);\r\n        $inputs .= wf_Submit(__('Show'));\r\n        $result .= wf_Form('', 'POST', $inputs, 'glamour');\r\n        $result .= wf_delimiter(0);\r\n        return($result);\r\n    }\r\n\r\n    \/**\r\n     * Renders payments extracted from database with some query\r\n     * \r\n     * @return string\r\n     *\/\r\n    function my_PaymentsShow() {\r\n        global $ubillingConfig;\r\n        $result = '';\r\n        $alter_conf = $ubillingConfig->getAlter();\r\n        $alladrs = zb_AddressGetFulladdresslistCached();\r\n        $allrealnames = zb_UserGetAllRealnames();\r\n        $alltypes = zb_CashGetAllCashTypes();\r\n        $allservicenames = zb_VservicesGetAllNamesLabeled();\r\n\r\n\r\n\/\/getting full contract list\r\n        if ($alter_conf['FINREP_CONTRACT']) {\r\n            $allcontracts = zb_UserGetAllContracts();\r\n            $allcontracts = array_flip($allcontracts);\r\n        }\r\n\r\n\r\n\r\n\/\/getting all users tariffs\r\n        if ($alter_conf['FINREP_TARIFF']) {\r\n            $alltariffs = zb_TariffsGetAllUsers();\r\n        }\r\n\r\n        \/\/rendering date selection\r\n        $renderDate = (ubRouting::checkPost('renderdate')) ? ubRouting::post('renderdate', 'mres') : curdate();\r\n\r\n        \/\/Payments database abstraction layer\r\n        $paymentsDb = new NyanORM('payments');\r\n        $paymentsDb->where('admin', '=', whoami());\r\n        $paymentsDb->where('date', 'LIKE', $renderDate . '%');\r\n        $paymentsDb->orderBy('date', 'DESC');\r\n\r\n        \/\/ Exclude some Cash types ID from query\r\n        if ($ubillingConfig->getAlterParam('REPORT_FINANCE_IGNORE_ID')) {\r\n            $exIdArr = array_map('trim', explode(',', $ubillingConfig->getAlterParam('REPORT_FINANCE_IGNORE_ID')));\r\n            \/\/ Create and WHERE to query\r\n            if (!empty($exIdArr)) {\r\n                foreach ($exIdArr as $io => $eachIgnoredCashtypeId) {\r\n                    $paymentsDb->where('cashtypeid', '!=', $eachIgnoredCashtypeId);\r\n                }\r\n            }\r\n        }\r\n\r\n        \/\/gettin some payments\r\n        $allPayments = $paymentsDb->getAll();\r\n\r\n        $total = 0;\r\n        $totalPaycount = 0;\r\n\r\n        $cashtotal = 0;\r\n        $myPOStotal = 0;\r\n        $bonustotal = 0;\r\n\r\n        $cells = wf_TableCell(__('ID'));\r\n        $cells .= wf_TableCell(__('IDENC'));\r\n        $cells .= wf_TableCell(__('Date'));\r\n        $cells .= wf_TableCell(__('Cash'));\r\n\/\/optional contract display\r\n        if ($alter_conf['FINREP_CONTRACT']) {\r\n            $cells .= wf_TableCell(__('Contract'));\r\n        }\r\n        $cells .= wf_TableCell(__('Login'));\r\n        $cells .= wf_TableCell(__('Full address'));\r\n        $cells .= wf_TableCell(__('Real Name'));\r\n\/\/optional tariff display\r\n        if ($alter_conf['FINREP_TARIFF']) {\r\n            $cells .= wf_TableCell(__('Tariff'));\r\n        }\r\n        $cells .= wf_TableCell(__('Cash type'));\r\n        $cells .= wf_TableCell(__('Notes'));\r\n        $cells .= wf_TableCell(__('Admin'));\r\n        $rows = wf_TableRow($cells, 'row1');\r\n\r\n        if (!empty($allPayments)) {\r\n            $eachCashType = array(); \/\/Empty array for each existing cash type\r\n            foreach ($allPayments as $io => $eachpayment) {\r\n\r\n                if ($alter_conf['TRANSLATE_PAYMENTS_NOTES']) {\r\n                    $eachpayment['note'] = zb_TranslatePaymentNote($eachpayment['note'], $allservicenames);\r\n                }\r\n\r\n                $cells = wf_TableCell($eachpayment['id']);\r\n                $cells .= wf_TableCell(zb_NumEncode($eachpayment['id']));\r\n                $cells .= wf_TableCell($eachpayment['date']);\r\n                $cells .= wf_TableCell($eachpayment['summ']);\r\n\/\/optional contract display\r\n                if ($alter_conf['FINREP_CONTRACT']) {\r\n                    $cells .= wf_TableCell(@$allcontracts[$eachpayment['login']]);\r\n                }\r\n                $cells .= wf_TableCell(wf_Link('?module=userprofile&username=' . $eachpayment['login'], (web_profile_icon() . ' ' . $eachpayment['login']), false, ''));\r\n                $cells .= wf_TableCell(@$alladrs[$eachpayment['login']]);\r\n                $cells .= wf_TableCell(@$allrealnames[$eachpayment['login']]);\r\n\/\/optional tariff display\r\n                if ($alter_conf['FINREP_TARIFF']) {\r\n                    $cells .= wf_TableCell(@$alltariffs[$eachpayment['login']]);\r\n                }\r\n                $cells .= wf_TableCell(@__($alltypes[$eachpayment['cashtypeid']]));\r\n                $cells .= wf_TableCell($eachpayment['note']);\r\n                $cells .= wf_TableCell($eachpayment['admin']);\r\n                $rows .= wf_TableRow($cells, 'row5');\r\n\r\n                if ($eachpayment['summ'] > 0) {\r\n                    $total = $total + $eachpayment['summ'];\r\n                    $totalPaycount++;\r\n                }\r\n\r\n\/\/Count each payment type separately\r\n                if ($eachpayment['summ'] > 0) {\r\n                    \r\n                }\r\n\r\n\/\/Count cash\r\n                if ($eachpayment['summ'] > 0) {\r\n                    if ($eachpayment['cashtypeid'] == '1') {\r\n                        $cashtotal = $cashtotal + $eachpayment['summ'];\r\n                    }\r\n                }\r\n\/\/Count myPOS\r\n                if ($eachpayment['summ'] > 0) {\r\n                    if ($eachpayment['cashtypeid'] == '7') {\r\n                        $myPOStotal = $myPOStotal + $eachpayment['summ'];\r\n                    }\r\n                }\r\n\/\/Count bonus\r\n                if ($eachpayment['summ'] > 0) {\r\n                    if ($eachpayment['cashtypeid'] == '6') {\r\n                        $bonustotal = $bonustotal + $eachpayment['summ'];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        $result = renderDateForm();\r\n        $result .= wf_TableBody($rows, '100%', '0', 'sortable');\r\n\r\n        $result .= wf_tag('strong') . __('Cash') . ': ' . $cashtotal . wf_tag('strong', true) . wf_tag('br');\r\n        $result .= wf_tag('strong') . __('myPOS') . ': ' . $myPOStotal . wf_tag('strong', true) . wf_tag('br');\r\n        $result .= wf_tag('strong') . __('Bonus') . ': ' . $bonustotal . wf_tag('strong', true) . wf_tag('br');\r\n\r\n        $result .= wf_tag('strong') . __('Total') . ': ' . $total . wf_tag('strong', true) . wf_tag('br');\r\n        $result .= wf_tag('strong') . __('Count') . ': ' . $totalPaycount . wf_tag('strong', true);\r\n\r\n        return($result);\r\n    }\r\n\r\n\/\/ render some payments by date\r\n    if (ubRouting::checkPost('renderdate')) {\r\n        $reportTitle = __('Payments by') . ' ' . ubRouting::post('renderdate');\r\n    } else {\r\n        $reportTitle = __('Today payments');\r\n    }\r\n    show_window($reportTitle, my_PaymentsShow());"}}