function view() { extract($_GET); require_lib("validate"); $v = new validate(); $v->isOk($empnum, "num", 1, 20, "Invalid employee number."); $v->isOk($id, "num", 1, 20, "Invalid payslip number."); if ($v->isError()) { $confirmCust = $v->genErrors() . "<br><input type='button' onClick='JavaScript:history.back();' value='« Correct submission'>"; return $confirmCust; } if (($emp = qryEmployee($empnum, "*")) === false) { $emp = qryLEmployee($empnum, "*"); } if (isset($rev)) { $tbl = "salr"; } else { $tbl = "salpaid"; } $sql = "SELECT * FROM cubit.{$tbl} WHERE empnum='{$empnum}' AND id = '{$id}' AND div = '" . USER_DIV . "'"; $rslt = db_exec($sql) or errDie("Unable to read employee salary details from Cubit."); if (pg_numrows($rslt) < 1) { return "<li>Employee payment not found.</li>"; } $pay = pg_fetch_array($rslt); # Calculate gross salary from nettpay $gross = $pay['salary'] - $pay['totallow'] - $pay['comm'] + $pay['totded'] + $pay['uif'] + $pay['paye'] + $pay['loanins']; vsprint($gross); # Layout $slip = "\n\t<table " . TMPL_tblDflts . ">\n\t<tr>\n\t\t<td align='right'><font size='3' color='white'><b>Employee: </b></font></td>\n\t\t<td align='left'><b>{$emp['empnum']}</b></td>\n\t\t<td align='right'><font size='3' color='white'><b>Name: </b></font></td>\n\t\t<td align='left'><b>{$emp['fnames']}</b></td>\n\t\t<td align='right'><font size='3' color='white'><b>Surname: </b></font></td>\n\t\t<td align='left'><b>{$emp['sname']}</b></td>\n\t</tr>\n\t" . TBL_BR . "\n\t</table>\n\t<table " . TMPL_tblDflts . ">\n\t<tr>\n\t\t<th>Description</th>\n\t\t<th>Amount</th>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Gross Basic salary</td>\n\t\t<td align='center'>" . CUR . " {$gross}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Commission</td>\n\t\t<td align='center'>" . CUR . " {$pay['comm']}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Low or interest-free loan</td>\n\t\t<td align='center'>" . CUR . " {$pay['loanins']}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Interest rate charged by company</td>\n\t\t<td align='center'>{$emp['loanint']} %</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Deductions</td>\n\t\t<td align='center'>" . CUR . " {$pay['totded']}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>UIF</td>\n\t\t<td align='center'>" . CUR . " {$pay['uif']}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>PAYE</td>\n\t\t<td align='center'>" . CUR . " {$pay['paye']}</td>\n\t</tr>\n\t<tr class='" . bg_class() . "'>\n\t\t<td>Allowances</td>\n\t\t<td align='center'>" . CUR . " {$pay['totallow']}</td>\n\t</tr>\n\t" . TBL_BR . "\n\t<tr class='" . bg_class() . "'>\n\t\t<td><h3>Nett Income</h3></td>\n\t\t<td align='center'><b>" . CUR . " {$pay['salary']}</b></td>\n\t</tr>\n\t</table>" . mkQuickLinks(ql("../admin-employee-add.php", "Add Employee")); return $slip; }
function slip($_POST, $pure = false) { # get vars extract($_POST); $empnum += 0; # validate input require_lib("validate"); $v = new validate(); if (isset($from_day)) { $v->isOk($from_day, "num", 1, 2, "Invalid from Date day."); $v->isOk($from_month, "num", 1, 2, "Invalid from Date month."); $v->isOk($from_year, "num", 1, 4, "Invalid from Date Year."); $v->isOk($to_day, "num", 1, 2, "Invalid to Date day."); $v->isOk($to_month, "num", 1, 2, "Invalid to Date month."); $v->isOk($to_year, "num", 1, 4, "Invalid to Date Year."); # mix dates $fromdate = $from_year . "-" . $from_month . "-" . $from_day; $todate = $to_year . "-" . $to_month . "-" . $to_day; if (!checkdate($from_month, $from_day, $from_year)) { $v->isOk($fromdate, "num", 1, 1, "Invalid from date."); } if (!checkdate($to_month, $to_day, $to_year)) { $v->isOk($todate, "num", 1, 1, "Invalid to date."); } } else { if (isset($mon)) { $v->isOk($mon, "num", 1, 2, "Invalid month selected."); } } $v->isOk($empnum, "num", 1, 14, "Invalid employee selected."); # display errors, if any if ($v->isError()) { $confirmCust = ""; $errors = $v->getErrors(); foreach ($errors as $e) { $confirmCust .= "<li class='err'>" . $e["msg"] . "</li>"; } $confirmCust .= "<p><input type='button' onClick='JavaScript:history.back();' value='« Correct submission'>"; return $confirmCust; } #check what we have permission to $get_perm = "SELECT payroll_groups FROM users WHERE username = '******'USER_NAME']}' LIMIT 1"; $run_perm = db_exec($get_perm) or errDie("Unable to get payroll groups permission information."); if (pg_numrows($run_perm) > 0) { $parr = pg_fetch_array($run_perm); if (strlen($parr['payroll_groups']) > 0) { $pay_grps = explode(",", $parr['payroll_groups']); } else { $pay_grps = array(); } } else { $pay_grps = array(); } if (isset($emp_group) and is_array($emp_group)) { $emp_groups = array(); $emps = array(); foreach ($emp_group as $each) { if (!in_array($each, $pay_grps)) { continue; } $emp_groups[] = $each; $get_emp = "SELECT empnum FROM employees WHERE emp_group = '{$each}'"; $run_emp = db_exec($get_emp) or errDie("Unable to get employees information."); if (pg_numrows($run_emp) > 0) { while ($earr = pg_fetch_array($run_emp)) { $emps[] = $earr['empnum']; } } } } else { #check for which groups we have perm $get_check = "SELECT payroll_groups FROM users WHERE username = '******'USER_NAME']}' LIMIT 1"; $run_check = db_exec($get_check) or errDie("Unable to get employees group permissions."); if (pg_numrows($run_check) > 0) { $earr = pg_fetch_array($run_check); if (strlen($earr['payroll_groups']) > 0) { $eperms = explode(",", $earr['payroll_groups']); $egsearch = " AND (emp_group = '" . implode("' OR emp_group = '", $eperms) . "')"; } else { $egsearch = "AND FALSE"; } } $emp_groups[] = array(0 => '0'); $get_emp = "SELECT empnum FROM employees WHERE true {$egsearch}"; $run_emp = db_exec($get_emp) or errDie("Unable to get employees information."); while ($earr = pg_fetch_array($run_emp)) { $emps[] = $earr['empnum']; } } if (!isset($emps)) { $emps = array(0); } if (in_array('0', $emp_groups)) { $show_all = TRUE; } else { $show_all = FALSE; } $totgross = 0; $totcomm = 0; $totins = 0; $totuif = 0; $totpaye = 0; $totded = 0; $totsal = 0; if (!isset($salyear) or strlen($salyear) < 1) { $salyear = EMP_YEAR; } /* get employee details */ db_connect(); if (isset($from_day)) { $retfunc = "slctDate"; if ($empnum != "0") { #if not all then use selected employee $empw = "empnum='{$empnum}' AND "; } else { #else use all payslips ... but only with emps in selected group if (!$show_all) { $empw = ""; foreach ($emps as $each) { $empw .= "empnum='{$each}' OR "; } $empw .= "empnum='{$each}'"; } } if (substr($empw, -4) == "AND ") { $empw = substr($empw, 0, -4); } if (!isset($empw)) { $empw = "true"; } $sql = "SELECT 'salp' AS paytype, * FROM salpaid\n\t\t\t\tWHERE ({$empw}) AND saldate >= '{$fromdate}' AND saldate <= '{$todate}' AND div = '" . USER_DIV . "' AND cyear='{$salyear}'\n\t\t\t\tUNION\n\t\t\t\tSELECT 'salr' AS paytype, * FROM salr\n\t\t\t\tWHERE ({$empw}) AND saldate >= '{$fromdate}' AND saldate <= '{$todate}' AND div = '" . USER_DIV . "' AND cyear='{$salyear}'\n\t\t\t\tORDER BY true_ids ASC"; } else { if (isset($empnum)) { $retfunc = "slctEmployee"; $sql = "SELECT 'salp' AS paytype, * FROM salpaid\n\t\t\t\tWHERE month='{$mon}' AND empnum='{$empnum}' AND div = '" . USER_DIV . "' AND cyear='{$salyear}'\n\t\t\t\tUNION\n\t\t\t\tSELECT 'salr' AS paytype, * FROM salr\n\t\t\t\tWHERE month='{$mon}' AND empnum='{$empnum}' AND div = '" . USER_DIV . "' AND cyear='{$salyear}'\n\t\t\t\tORDER BY true_ids ASC"; } else { invalid_use(); } } $pRslt = db_exec($sql) or errDie("Unable to select employee payments from database."); if (pg_numrows($pRslt) < 1) { return "<li class='err'> - Employee salaries matching the search criteria not found.</li>" . $retfunc(); } $slip = ""; if (pg_numrows($pRslt) > 0) { $empdata = array(); $empcounter = array(); while ($pay = pg_fetch_array($pRslt)) { $en = $pay["empnum"]; $mwid = "{$pay['month']}:{$pay['week']}"; if (!isset($empdata[$en])) { $empdata[$en] = array(); } if (!isset($empdata[$en][$mwid])) { $empdata[$en][$mwid] = array("gross" => 0, "comm" => 0, "loanins" => 0, "uif" => 0, "paye" => 0, "salary" => 0, "saldate" => "", "payslip" => 0); } $ed =& $empdata[$en][$mwid]; $gross = $pay['salary'] - $pay['totallow'] - $pay['comm'] + $pay['totded'] + $pay['uif'] + $pay['paye'] + $pay['loanins']; $ed["saldate"] = $pay["saldate"]; if ($pay["paytype"] == "salp") { $ed["gross"] += $gross; $ed["comm"] += $pay["comm"]; $ed["loanins"] += $pay["loanins"]; $ed["uif"] += $pay["uif"]; $ed["paye"] += $pay["paye"]; // $ed["totded"] += $pay["totded"]; $ed["salary"] += $pay["salary"]; $ed["payslip"] = $pay["id"]; $totgross += $gross; $totcomm += $pay['comm']; $totins += $pay['loanins']; $totuif += $pay['uif']; $totpaye += $pay['paye']; $totded += $pay['totded']; $totsal += $pay['salary']; } else { $ed["gross"] -= $gross; $ed["comm"] -= $pay["comm"]; $ed["loanins"] -= $pay["loanins"]; $ed["uif"] -= $pay["uif"]; $ed["paye"] -= $pay["paye"]; // $ed["totded"] -= $pay["totded"]; $ed["salary"] -= $pay["salary"]; $ed["payslip"] = "{$pay['id']}&rev=true"; $totgross -= $gross; $totcomm -= $pay['comm']; $totins -= $pay['loanins']; $totuif -= $pay['uif']; $totpaye -= $pay['paye']; $totded -= $pay['totded']; $totsal -= $pay['salary']; } $get_deds = "SELECT distinct(type) FROM emp_ded WHERE payslip = '{$pay['id']}'"; $run_deds = db_exec($get_deds) or errDie("Unable to get salary deduction information."); if (pg_numrows($run_deds) > 0) { // $deductions = ""; // $ed["totded"] = array() $colspan = 0; while ($darr = pg_fetch_array($run_deds)) { $darr['type'] += 0; if ($darr['type'] > 0) { print "adding a deduction<br>"; $get_amt = "SELECT amount, description FROM emp_ded WHERE payslip = '{$pay['id']}' AND type = '{$darr['type']}' LIMIT 1"; $run_amt = db_exec($get_amt) or errDie("Unable to get employee deduction amount."); $deduction_heading .= "<th>" . pg_fetch_result($run_amt, 0, 1) . "</th>"; $ed["totded"][] = "<td nowrap>" . CUR . " " . sprint(pg_fetch_result($run_amt, 0, 0)) . "</td>"; // $deductions .= "<td nowrap>".CUR." ".sprint($darr['amount'])."</td>"; $colspan++; } } } else { // $deductions = ""; $colspan = 1; } } print "----------<br>"; print "<pre>"; var_dump($ed); print "</pre>"; print "<br>>>>>>>>>>>>>>>>>>>>><br>"; // print "<pre>"; // var_dump ($ foreach ($empdata as $empnum => $months) { foreach ($months as $monthweek => $sal) { list($month, $week) = explode(":", $monthweek); if (($emp = qryEmployee($empnum, "fnames, sname, basic_sal, payprd")) === false) { $emp = qryLEmployee($empnum, "fnames, sname, basic_sal, payprd"); } // not a date range but a single employee, store the name if (!isset($from_day)) { $empname = "{$emp['fnames']} {$emp['sname']}"; } /* create month week description */ $mw_desc = getMonthName($month); // weekly if ($emp["payprd"] == "w") { $mw_desc .= ", Week {$week}"; // fortnightly } else { if ($emp["payprd"] == "f") { if ($week == 1) { $week = "1-2"; } else { if ($week == 2) { $week = "3-4"; } else { $week = "5"; } } $mw_desc .= ", Week {$week}"; } } print "<pre>"; var_dump($sal["totded"]); print "</pre>"; $bgColor = bgcolorg(); $slip .= "\n\t\t\t\t\t<tr class='" . bg_class() . "'>\n\t\t\t\t\t\t<td>{$emp['fnames']} {$emp['sname']}</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["gross"]) . "</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["comm"]) . "</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["loanins"]) . "</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["uif"]) . "</td>\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["paye"]) . "</td>\n\t\t\t\t\t\t" . implode("", $sal["totded"]) . "\n\t\t\t\t\t\t<td nowrap>" . CUR . " " . sprint($sal["salary"]) . "</td>\n\t\t\t\t\t\t<td nowrap>{$mw_desc}</td>\n\t\t\t\t\t\t<td nowrap>{$sal['saldate']}</td>"; if (!$pure) { $slip .= "\n\t\t\t\t\t\t<td><a href='payslip-view.php?empnum={$empnum}&id={$sal['payslip']}'>View</a></td>\n\t\t\t\t\t\t<td><a target='_blank' href='payslip-print.php?id={$sal['payslip']}'>Print</a></td>"; } $slip .= "</tr>"; } } # Format the totals $totgross = sprint($totgross); $totcomm = sprint($totcomm); $totins = sprint($totins); $totuif = sprint($totuif); $totpaye = sprint($totpaye); $totded = sprint($totded); $totsal = sprint($totsal); $slip .= "\n\t\t\t<tr class='bg-even'>\n\t\t\t\t<td><b>Total</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totgross}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totcomm}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totins}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totuif}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totpaye}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totded}</b></td>\n\t\t\t\t<td nowrap><b>" . CUR . " {$totsal}</b></td>\n\t\t\t\t<td colspan='4'></td>\n\t\t\t</tr>"; } else { return "<li> - There are no salary payments for the selected month</li>"; } if (isset($from_day)) { $title = "<h3>Salaries Paid {$fromdate} TO {$todate}</h3>"; } else { $title = "<h3>Salaries for {$empname}</h3>"; } $slip = "\n\t\t<center>\n\t\t{$title}\n\t\t<table " . TMPL_tblDflts . " width='70%'>\n\t\t\t<tr>\n\t\t\t\t<th>Employee</th>\n\t\t\t\t<th>Gross Salary</th>\n\t\t\t\t<th>Commission</th>\n\t\t\t\t<th>Low or interest free loan</th>\n\t\t\t\t<th>UIF</th>\n\t\t\t\t<th>PAYE</th>\n\t\t\t\t<th colspan='{$colspan}'>Deductions</th>\n\t\t\t\t<th>Nett Income</th>\n\t\t\t\t<th>Month/Week</th>\n\t\t\t\t<th>Payment Date</th>\n\t\t\t\t" . (!$pure ? "<th colspan='2'>Options</th>" : "") . "\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th colspan='6'></th>\n\t\t\t\t{$deduction_heading}\n\t\t\t\t<th colspan='5'></th>\n\t\t\t</tr>\n\t\t\t{$slip}\n\t\t\t" . TBL_BR; if (!$pure) { $slip .= "\n\t\t\t\t<form action='" . SELF . "' method='POST'>\n\t\t\t\t" . array2form($_REQUEST) . "\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan='2'><input name=key type=submit value='Export to Spreadsheet'></td>\n\t\t\t\t</tr>\n\t\t\t</form>" . mkQuickLinks(ql("../admin-employee-add.php", "Add Employee")) . "\n\t\t\t</td></tR>"; } $slip .= "\n\t\t</table>\n\t\t</center>"; return $slip; }