BBnepal-Accounts/account/application/libraries/Myaccounts.php
2024-08-21 13:47:09 +05:45

1642 lines
84 KiB
PHP

<?php
defined('BASEPATH') or exit('No direct script access allowed');
require_once APPPATH . "/third_party/pdf/fpdm.php";
require_once APPPATH . "/third_party/fpdf.php";
class MyPDF extends FPDF
{
public $HeaderText = "Report Header Goes Here";
public $SubHeaderText = "";
public $HeaderColumns = array();
public $printedBy;
public $pages = "";
function Header()
{
$this->Image(site_url("images/logo.png"), 8, 10, 40);
$this->SetFont('Helvetica', 'B', 12);
$this->Cell(0, 10, $this->HeaderText, 0, 1, 'C');
$this->SetFont('Helvetica', 'B', 10);
$this->Cell(0, 10, $this->SubHeaderText, 0, 1, 'C');
$this->SetFont('Helvetica', '', 8);
$this->Cell(0, 10, "Printed On: " . Today() . " / " . NepaliDate(Today()), 0, 0, 'R');
if (isset($this->HeaderColumns)) {
$this->Ln();
$this->SetFillColor(232, 232, 232);
$this->SetFont('Helvetica', 'B', 10);
//$pdf->SetXY(10, 40);
foreach ($this->HeaderColumns as $column) {
$this->Cell($column['width'], 10, strtoupper($column['name']), 1, 0, 'L', 1);
}
$this->Ln();
}
// Line break
// $this->Ln(20);
}
function Footer()
{
// Page footer
//$this->SetY(-70);
$this->ln(20);
$this->SetFont('Helvetica', 'I', 8);
$this->Cell(25, 1, $this->printedBy, 0, 1, 'C');
$this->Cell(25, 1, '_________________', 0, 0, 'C');
$this->setX(95);
$this->Cell(25, 1, '_________________', 0, 0, 'C');
$this->setX(170);
$this->Cell(25, 1, '_________________', 0, 1, 'C');
$this->Cell(25, 10, 'Printed By', 0, 0, 'C');
$this->setX(95);
$this->Cell(25, 10, 'Checked By', 0, 0, 'C');
$this->setX(170);
$this->Cell(25, 10, 'Approved By', 0, 1, 'C');
$this->SetFont('Helvetica', 'I', 8);
$this->SetTextColor(128);
$this->Cell(0, 10, 'Page ' . $this->PageNo(), 0, 0, 'C');
}
}
class myaccounts
{
public function __construct()
{
// die;
$this->initDatabase();
}
function voucherPDF($voucher_id)
{
$CI = &get_instance();
$CI->load->library("numbertoword");
$q = "select *,(select voucher_no from tbl_vouchers where tbl_vouchers.voucher_id=tbl_voucherdetails.voucher_id) as voucher_no, (select account_name from tbl_accounts where tbl_accounts.account_id=tbl_voucherdetails.account_id) as account_name from tbl_voucherdetails where voucher_id='$voucher_id'";
$VoucherDetails = $CI->db->query($q)->result();
$i = 0;
$crTotal = 0;
$drTotal = 0;
$fields = array();
// print_r($VoucherDetails);die;
foreach ($VoucherDetails as $VoucherDetail) :
$i++;
$fields['account_name_' . $i] = $VoucherDetail->account_name;
$fields['narration_' . $i] = $VoucherDetail->narration;
$fields['debit_amount_' . $i] = ($VoucherDetail->dr == 0) ? "" : N2($VoucherDetail->dr);
$fields['credit_amount_' . $i] = ($VoucherDetail->cr == 0) ? "" : N2($VoucherDetail->cr);
$crTotal += $VoucherDetail->cr;
$drTotal += $VoucherDetail->dr;
endforeach;
$fields['voucher_no'] = $VoucherDetails[0]->voucher_no;
$fields['transaction_date_ad'] = $VoucherDetails[0]->transaction_date;
$fields['transaction_date_bs'] = NepaliDate($VoucherDetails[0]->transaction_date);
$fields['prepared_by'] = $VoucherDetails[0]->created_by;
$fields['voucher_no'] = $VoucherDetails[0]->voucher_no;
$fields['debit_total'] = N2($drTotal);
$fields['credit_total'] = N2($crTotal);
if ($CI->session->userdata("language") == "np")
$fields['amount_in_words'] = trim($CI->numbertoword->nepali_word($crTotal));
else
$fields['amount_in_words'] = trim($CI->numbertoword->english_word($crTotal));
// $fields['narration_' . $i] = $VoucherDetail->narration;
$file = APPPATH . "/../pdf/e_voucher1.pdf";
$pdf = new FPDM($file);
//pre($pdf->getContent($file,"PDF"));
$pdf->Load($fields, true);
$pdf->Merge();
//$pdf->Flatten();
$OutputFileLocation = APPPATH . "/../pdf/vouchers/";
$OutputFile = "Voucher_" . $VoucherDetails[0]->voucher_no . ".pdf";
$pdf->Output("F", $OutputFileLocation . $OutputFile);
return $OutputFile;
}
function getVoucherTypes()
{
$CI = &get_instance();
$VoucherType = $CI->db->query("select * from tbl_vouchertypes where status=1 order by voucher_name asc");
return ($VoucherType->num_rows() > 0) ? $VoucherType->result() : false;
}
function getVoucherType($vouchertype_alias)
{
$CI = &get_instance();
if (ctype_digit($vouchertype_alias)) {
$t = "select * from tbl_vouchertypes where vouchertype_id='$vouchertype_alias'";
$VoucherType = $CI->db->query($t);
// echo $t;
} else {
$t = "select * from tbl_vouchertypes where voucher_alias='$vouchertype_alias'";
$VoucherType = $CI->db->query($t);
// echo $t;
}
return ($VoucherType->num_rows() > 0) ? $VoucherType->row() : false;
}
function getAccountDetails($account_id)
{
$CI = &get_instance();
$Account = $CI->db->query("select * from tbl_accounts where account_id='$account_id'")->row();
$Account->Balance = $this->getBalance($account_id);
return $Account;
}
function getBalance($account_id)
{
$drTotal = getDrTotal($account_id);
$crTotal = getCrTotal($account_id);
return $drTotal - $crTotal;
}
function getOldBalance($account_id, $tillDate)
{
if ($tillDate == "") $tillDate = NepalitoEnglishDate(FYStart());
$t = "select sum(dr) as debitBalance, sum(cr) as creditBalance from tbl_voucherdetails where account_id='$account_id' and transaction_date< '$tillDate'";
$CI = &get_instance();
$Query = $CI->db->query($t);
$Result = $Query->row();
$oldBalance = new stdClass;
$oldBalance->debitBalance = $Result->debitBalance;
$oldBalance->creditBalance = $Result->creditBalance;
$oldBalance->balance = ($oldBalance->debitBalance - $oldBalance->creditBalance);
return $oldBalance;
}
function getDrTotal($account_id)
{
$ci = &get_instance();
return $ci->db->where("status", 1)->where("account_id", $account_id)->select_sum('dr')->get("tbl_voucherdetails")->row()->dr;
}
function getCrTotal($account_id)
{
$ci = &get_instance();
return $ci->db->where("status", 1)->where("account_id", $account_id)->select_sum('cr')->get("tbl_voucherdetails")->row()->cr;
}
function getAllAccountsTable($accategory_id = "", $full = "")
{
$CI = &get_instance();
if ($accategory_id != "") {
$CI->db->where("status", 1)->where("accategory_id", $accategory_id);
}
if (isset($_GET['accategory_id'])) {
$CI->db->where("status", 1)->where("accategory_id", $_GET['accategory_id']);
} else {
$CI->db->where("status", 1);
}
$CI->db->order_by("account_name ASC");
$Accounts = $CI->db->get("tbl_accounts")->result();
foreach ($Accounts as $Account) {
$Account->Group = $CI->db->query("select * from tbl_acgroups where acgroup_id=(select acgroup_id from tbl_accategories where accategory_id = $Account->accategory_id)")->row();
$Account->Category = $CI->db->query("select * from tbl_accategories where accategory_id = $Account->accategory_id")->row();
}
//$q=$CI->db->get_compiled_select();
//print($q);
?>
<div class="row mb-3">
<?php if ($accategory_id == "") : ?>
<div class="col">
<form method="get">
<div class="row">
<div class="col-3">
<?php $this->showAccountsCategoriesCombo("accategory_id", "", "accategory_id"); ?>
</div>
<div class="col-3">
<input type="submit" value="Show Accounts" class=" btn btn-success btn-sm">
</div>
</div>
</form>
</div> <?php endif; ?>
<!-- <div id="dataTable_commands" class="col text-right"></div> -->
</div>
<?php
$html = "";
$html .= "<table class='table table-bordered table-striped longdataTable'>";
$html .= "<thead>";
$html .= "<tr><th>Account</th><th class='text-center'>Account Group</th><th class='text-center'>Dr</th><th class='text-center'>Cr</th><th class='text-center'>Balance</th><th class='text-center col-1'>Action</th></tr>";
$html .= "</thead><tbody>";
$sn = 0;
$BalanceTotal = 0;
foreach ($Accounts as $Account) : $sn++;
$balance = getBalance($Account->account_id);
$BalanceTotal += $balance;
// pre($Account);
$html .= "<tr><td><a href='#' onClick='showLedger(" . $Account->account_id . ")'>" . $Account->account_name . "</a></td><td class='col-2'>" . $Account->Category->accategory_name . "</td><td class='col-1'>" . (($balance >= 0) ? myCurrency($balance) : "") . "</td><td class='col-1'>" . (($balance < 0) ? myCurrency(abs($balance)) : "") . "</td><td class='text-right col-1'>". myCurrency($balance) ."</td><td class='text-center'><a title='Show Ledger' class='btn btn-info btn-xs ' onClick='showLedger(" . $Account->account_id . ")'><i class='fa fa-eye'></i></a></td></tr>";
endforeach;
$html .= "</tbody><tfoot>";
// if ($full == "") {
$html .= "<tr><th colspan=2 class='text-right '>Total</th><th class='text-right'>" . (($BalanceTotal > 0) ? myCurrency(abs($BalanceTotal )) : "") . "</th><th class='text-right'>" . (($BalanceTotal < 0) ? myCurrency(abs($BalanceTotal )) : "") . "</th><th>" . myCurrency($BalanceTotal) . "</th><th></th></tr>";
// }
$html .= "</tfoot></table>\n";
$html .= " <div class=\"modal fade\" id=\"ledgerdetails_box\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"ledgerdetails_box\" aria-hidden=\"true\">
<div class=\"modal-dialog modal-xl\" role=\"document\">
<div class=\"modal-content\">
<div class=\"modal-header\">
<h5 class=\"modal-title\" id=\"exampleModalLabel\">Ledger Details</h5>
<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">
<span aria-hidden=\"true\">&times;</span>
</button>
</div>
<div class=\"modal-body\" id=\"details_container\">
Ledger Details Goes Here
</div>
<!--<div class=\"modal-footer\">
<button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Close</button>
<button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\">Print</button>
</div>-->
</div>
</div>
</div>";
$html .= '<script>function showLedger(id) {$.ajax({url: \'';
$html .= site_url("accounts/reports/ajax/getledgersummary/");
$html .= '\' + id,success: function(data) {$(\'#ledgerdetails_box #details_container\').html(data);$(\'#ledgerdetails_box\').modal(\'show\');}});}</script>';
echo $html;
}
function getAccountsTableByCategory($accategory_id)
{
$CI = &get_instance();
$Accounts = $CI->db->where("accategory_id", $accategory_id)->where("status", 1)->order_by("account_name ASC")->get("tbl_accounts")->result();
$html = "<h5 class='text-center'>Accounts Under " . getFieldfromValue("tbl_accategories", "accategory_name", "accategory_id", $accategory_id) . "</h5>";
$html .= "<table class='table table-bordered dataTable'>";
$html .= "<thead>";
$html .= "<tr><th>Sn</th><th>Account</th><th>Dr/Cr</th><th>Action</th></tr>";
$html .= "</thead><tbody>";
$sn = 0;
foreach ($Accounts as $Account) : $sn++;
$html .= "<tr><td class='col-1'>" . $sn . "</td><td>" . $Account->account_name . "</td><td class='col-3'>" . myCurrency(getBalance($Account->account_id)) . "</td><td class='col-2'><a title='Show Ledger' class='btn btn-success btn-xs ' onClick='showLedger(" . $Account->account_id . ")'><i class='fa fa-eye'></i></a></td></tr>";
endforeach;
$html .= "</tbody></table>";
echo $html;
}
//ACCOUNT HEADS
function getCrAccountOpeningBalance($account_id)
{
$CI = &get_instance();
$CI->db->select('*');
$CI->db->from('tbl_voucherdetails');
$CI->db->where('account_id', $account_id);
$CI->db->where('voucher_id', 0);
$query = $CI->db->get();
if ($query->num_rows() > 0) {
$result = $query->row();
$balance = $result->cr;
return $balance;
} else {
return 0;
}
}
function getDrAccountOpeningBalance($account_id)
{
$CI = &get_instance();
$CI->db->select('*');
$CI->db->from('tbl_voucherdetails');
$CI->db->where('account_id', $account_id);
$CI->db->where('voucher_id', 0);
$query = $CI->db->get();
if ($query->num_rows() > 0) {
$result = $query->row();
$balance = $result->dr;
return $balance;
} else {
return 0;
}
}
function getAccountBalanceByAccountCategory($accategory_id)
{
$CI = &get_instance();
$t = "select * from tbl_voucherdetails where
status=1 and
account_id in (select account_id from tbl_accounts where accategory_id ='$accategory_id') or
account_id in (select account_id from tbl_accounts where accategory_id in (select accategory_id from tbl_accategories where tbl_accategories.parent_category_id = '$accategory_id'))
";
$Vouchers = $CI->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
//pre($Voucher);die;
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
return ($DrBalance) - ($CrBalance);
}
function getAccountBalanceByAccountCategoryBothSide($accategory_id)
{
$CI = &get_instance();
$t = "select * from tbl_voucherdetails where account_id in (select account_id from tbl_accounts where accategory_id ='$accategory_id')";
$Vouchers = $CI->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
return ["DrBalance" => $DrBalance, "CrBalance" => $CrBalance];
}
function getAccountBalance($account_id)
{
$CI = &get_instance();
$t = "select * from tbl_voucherdetails where account_id ='$account_id'"; //in (select account_id from tbl_accounts where accategory_id ='$accategory_id')";
$Vouchers = $CI->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
return ($DrBalance) - ($CrBalance);
}
function getAccountBalanceBothSide($account_id)
{
$CI = &get_instance();
$t = "select * from tbl_voucherdetails where account_id ='$account_id'"; //in (select account_id from tbl_accounts where accategory_id ='$accategory_id')";
$Vouchers = $CI->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
return ["DrBalance" => $DrBalance, "CrBalance" => $CrBalance];
}
function getAccountGroups()
{
$CI = &get_instance();
$t = "select * from tbl_acgroups where status=1";
$AccountGroups = $CI->db->query($t)->result();
foreach ($AccountGroups as $AccountGroup) :
$AccountGroup->dr = 0;
$AccountGroup->cr = 0;
// $TotalBalance = $this->getTotalBalanceByAccountGroup($AccountGroup->acgroup_id);
$ACBalances = array();
$TotalBalance = $this->getAccountBalanceR("Types", $AccountGroup->acgroup_id, $ACBalances);
if ($AccountGroup->posting_side == "DR") {
$AccountGroup->dr = ($TotalBalance);
} else {
$AccountGroup->cr = ($TotalBalance);
}
endforeach;
$dr = 0;
$cr = 0;
return $AccountGroups;
}
public function getParentAccountCategories($acgroup_id = 0)
{
if (isset($_GET['group'])) {
$acgroup_id = ($_GET['group']) ? $_GET['group'] : $acgroup_id;
}
$ci = &get_instance();
if ($acgroup_id == 0)
$t = "select * from tbl_accategories as b where status=1 and parent_category_id=0";
else
$t = "select * from tbl_accategories as b where status=1 and parent_category_id=0 and acgroup_id='$acgroup_id'";
$AccountCategories = $ci->db->query($t)->result();
foreach ($AccountCategories as $AccountCategory) :
$AccountCategory->dr = 0;
$AccountCategory->cr = 0;
$AccountCategory->AccountGroup = $ci->db->query("select * from tbl_acgroups where acgroup_id = '$AccountCategory->acgroup_id'")->row();
if ($AccountCategory->parent_category_id <> 0) {
$AccountCategory->Parent = $ci->db->query("select * from tbl_accategories where accategory_id = '$AccountCategory->parent_category_id'")->row();
}
// $AccountCategory->Balance = $this->getAccountBalanceByAccountCategory($AccountCategory->accategory_id);
$AccountCategory->Balance = $this->getAccountBalanceR("Category", $AccountCategory->accategory_id);
$AccountCategory->posting_side = getFieldfromValue("tbl_acgroups", "posting_side", "acgroup_id", $AccountCategory->acgroup_id);
if ($AccountCategory->posting_side == "DR")
$AccountCategory->dr = $AccountCategory->Balance;
else
$AccountCategory->cr = $AccountCategory->Balance;
endforeach;
return $AccountCategories;
}
public function getChildAccountCategories($accategory_id = 0)
{
if (isset($_GET['category'])) {
$accategory_id = ($_GET['category']) ? $_GET['category'] : $accategory_id;
}
$ci = &get_instance();
if ($accategory_id == 0)
$t = "select * from tbl_accategories as b where status=1 and parent_category_id<>0";
else
$t = "select * from tbl_accategories as b where status=1 and parent_category_id='$accategory_id'";
$AccountCategories = $ci->db->query($t)->result();
foreach ($AccountCategories as $AccountCategory) :
$AccountCategory->dr = 0;
$AccountCategory->cr = 0;
if ($AccountCategory->parent_category_id <> 0) {
$AccountCategory->Parent = $ci->db->query("select * from tbl_accategories where accategory_id = '$AccountCategory->parent_category_id'")->row();
}
// $AccountCategory->Balance = $this->getAccountBalanceByAccountCategory($AccountCategory->accategory_id);
$AccountCategory->Balance = $this->getAccountBalanceR("Group", $AccountCategory->accategory_id);
$AccountCategory->posting_side = getFieldfromValue("tbl_acgroups", "posting_side", "acgroup_id", $AccountCategory->acgroup_id);
if ($AccountCategory->posting_side == "DR")
$AccountCategory->dr = $AccountCategory->Balance;
else
$AccountCategory->cr = $AccountCategory->Balance;
endforeach;
return $AccountCategories;
}
function getTotalBalanceByAccountGroup($acgroup_id)
{
$CI = &get_instance();
$t = "select * from tbl_voucherdetails where account_id in (select account_id from tbl_accounts where accategory_id in (select accategory_id from tbl_accategories where acgroup_id='$acgroup_id'))";
$Vouchers = $CI->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
//pre($Voucher);die;
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
return ($DrBalance) - ($CrBalance);
}
function getParentAccountCategoriesByGroup($acgroup_id, $both = false)
{
$CI = &get_instance();
$AccountCategories = $CI->db
->where("acgroup_id", $acgroup_id)
->where("status", 1)
->where("parent_category_id", 0)
->order_by("accategory_name ASC")->get("tbl_accategories")->result();
foreach ($AccountCategories as $AccountCategory) {
$AccountCategory->dr = 0;
$AccountCategory->cr = 0;
if ($both) {
$TotalBalance = $this->getAccountBalanceByAccountCategoryBothSide($AccountCategory->accategory_id);
$AccountCategory->dr = $TotalBalance['DrBalance'];
$AccountCategory->cr = $TotalBalance['CrBalance'];
} else {
$AccountCategory->posting_side = getFieldfromValue("tbl_acgroups", "posting_side", "acgroup_id", $AccountCategory->acgroup_id);
$TotalBalance = $this->getAccountBalanceByAccountCategory($AccountCategory->accategory_id);
if ($AccountCategory->posting_side == "DR") {
$AccountCategory->dr = abs($TotalBalance);
} else {
$AccountCategory->cr = abs($TotalBalance);
}
}
}
return $AccountCategories;
}
function getChildAccountCategoriesByGroupAndParentCategory($acgroup_id, $accategory_id, $both = false)
{
$CI = &get_instance();
$AccountCategories = $CI->db
->where("acgroup_id", $acgroup_id)
->where("parent_category_id", $accategory_id)
->where("status", 1)
->order_by("accategory_name ASC")->get("tbl_accategories")->result();
foreach ($AccountCategories as $AccountCategory) {
$AccountCategory->dr = 0;
$AccountCategory->cr = 0;
if ($both) {
$TotalBalance = $this->getAccountBalanceByAccountCategoryBothSide($AccountCategory->accategory_id);
$AccountCategory->dr = $TotalBalance['DrBalance'];
$AccountCategory->cr = $TotalBalance['CrBalance'];
} else {
$TotalBalance = $this->getAccountBalanceByAccountCategory($AccountCategory->accategory_id);
$AccountCategory->posting_side = getFieldfromValue("tbl_acgroups", "posting_side", "acgroup_id", $AccountCategory->acgroup_id);
if ($AccountCategory->posting_side == "DR") {
$AccountCategory->dr = abs($TotalBalance);
} else {
$AccountCategory->cr = abs($TotalBalance);
}
}
}
return $AccountCategories;
}
function getAccountsByCategory($accategory_id, $getOldBalance = false)
{
$CI = &get_instance();
$AccountHeads = $CI->db
->where("accategory_id", $accategory_id)
->where("status", 1)
->order_by("account_name ASC")->get("tbl_accounts")->result();
foreach ($AccountHeads as $AccountHead) {
$AccountHead = $this->CompileAccount($AccountHead, $getOldBalance);
}
return $AccountHeads;
}
function getAccountHeads($getOldBalance = false)
{
$CI = &get_instance();
$AccountHeads = $CI->db->query("select * from tbl_accounts where status=1 order by accategory_id asc,account_name asc ")->result();
foreach ($AccountHeads as $AccountHead) {
$AccountHead = $this->CompileAccount($AccountHead, $getOldBalance);
}
return $AccountHeads;
}
function CompileAccount($AccountHead, $getOldBalance = false)
{
$CI = &get_instance();
$AccountHead->Group = $CI->db->query("select * from tbl_accategories where accategory_id='$AccountHead->accategory_id'")->row();
if ($AccountHead->Group) {
if ($AccountHead->Group->parent_category_id != 0)
$AccountHead->Category = $CI->db->query("select * from tbl_accategories where accategory_id='" . $AccountHead->Group->parent_category_id . "'")->row();
else
$AccountHead->Category = $CI->db->query("select * from tbl_accategories where accategory_id='" . $AccountHead->Group->accategory_id . "'")->row();
$AccountHead->Type = $CI->db->query("select * from tbl_acgroups where acgroup_id='" . $AccountHead->Group->acgroup_id . "'")->row();
}
if ($getOldBalance) {
$AccountHead->dr_opening_balance = $this->getDrAccountOpeningBalance($AccountHead->account_id);
$AccountHead->cr_opening_balance = $this->getCrAccountOpeningBalance($AccountHead->account_id);
}
$TotalBalances = array();
$TotalBalance = $this->getAccountBalanceR("Account", $AccountHead->account_id, $TotalBalances);
$AccountHead->cr = $TotalBalances["DrBalance"];
$AccountHead->dr = $TotalBalances["CrBalance"];
return $AccountHead;
}
function listAccountHeads()
{
?>
<?php $d = 0;
$c = 0;
$TableData = $this->getAccountHeads(true); ?>
<!-- <div id="dataTable_wrapper" class="mb-20">
<div class="col"></div>
<div class="col text-right"></div>
</div> -->
<table class="table table-striped table-bordered longdataTable">
<thead>
<tr>
<!-- <th class="col-1.5" rowspan="2"><?php //myLang(" Category");
?></th> -->
<th class="col-1.5" rowspan="2"><?php myLang("Ledger"); ?></th>
<th class="col-1.5" rowspan="2"><?php myLang(" Group"); ?></th>
<th colspan="2" class="col-3 text-center">Opening Balance</th>
<th class="col-2 text-center" rowspan="2"><?php myLang("Action"); ?></th>
</tr>
<tr>
<!-- <th class="col-1"><?php //myLang(" Type");
?></th> -->
<!-- <th class="col-1.5"><?php //myLang(" Category");
?></th> -->
<!-- <th class="col-1.5"><?php //myLang(" Group");
?></th> -->
<!-- <th class="col-1.5"><?php //myLang("Ledger");
?></th> -->
<th class="col-1 text-center"><?php myLang("Dr"); ?></th>
<th class="col-1 text-center"><?php myLang("Cr"); ?></th>
<!-- <th class="col-1"><?php //myLang("Party Name");
?></th> -->
<!-- <th class="col-1"><?php //myLang("Party Contact");
?></th> -->
<!-- <th class="col-1"><?php //myLang("PAN");
?></th> -->
<!-- <th class="col-1 text-center"><?php //myLang("Action");
?></th> -->
</tr>
</thead>
<tbody>
<?php $sn = 0;
foreach ($TableData as $TableRow) : $sn++; ?>
<?php foreach ($TableRow as $cols) : $id = $cols;
break;
endforeach; ?><tr>
<!-- <td><?php //echo isset($TableRow->Type) ? linkGroup($TableRow->Type) : "";
?></td> -->
<!-- <td><?php //echo isset($TableRow->Category) ? linkCategory($TableRow->Category) : '';
?></td> -->
<td><?php echo linkLedger($TableRow); ?></td>
<td><?php echo linkCategory($TableRow->Group); ?></td>
<td><?php $d += doubleval($TableRow->dr_opening_balance);
echo ($TableRow->dr_opening_balance > 0) ? myCurrency($TableRow->dr_opening_balance) : ""; ?></td>
<td><?php $c += doubleval($TableRow->cr_opening_balance);
echo ($TableRow->cr_opening_balance > 0) ? myCurrency($TableRow->cr_opening_balance) : ""; ?></td>
<!-- <td><?php //echo $TableRow->account_partyname;
?></td> -->
<!-- <td><?php //echo $TableRow->account_partycontact;
?></td> -->
<!-- <td><?php //echo $TableRow->account_partypan;
?></td> -->
<td class="text-center">
<a onClick="javascript:showDetails(<?php echo $id; ?>);" class="btn btn-primary btn-xs"><i class="fas fa-copy"></i> </a>
<a href="<?php echo site_url("accounts/accountheads/edit/$id"); ?>" class="btn btn-info btn-xs"><i class="fas fa-edit"></i> </a>
<a onClick="javascript:doDelete(<?php echo $id; ?>);" class="btn btn-danger btn-xs"><i class="fas fa-trash"></i> </a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<!-- Modal -->
<div class="modal fade" id="accountdetails_box" tabindex="-1" role="dialog" aria-labelledby="accountdetails_box" aria-hidden="true">
<div class="modal-dialog modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Account Details</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="details_container">
Account Details Goes Here
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<a class="btn btn-primary" id="details_edit_btn" href="">Edit</a>
</div>
</div>
</div>
</div>
<script>
function doDelete(id) {
if (confirm('Are you sure to delete?')) {
window.location = '<?php echo site_url("accounts/accountheads/delete/"); ?>' + id;
}
}
function showDetails(id) {
$.ajax({
url: "<?php echo site_url("accounts/accountheads/getdetails/"); ?>" + id,
success: function(data) {
$("#details_container").html(data);
$("#details_edit_btn").attr("href", "<?php echo site_url("accounts/accountheads/edit/"); ?>" + id);
$("#accountdetails_box").modal('show');
}
});
}
</script>
<?php
}
function getLedgerData($account_id, $fromDate = "", $toDate = "")
{
$oldBalance = $this->getOldBalance($account_id, $fromDate);
$fromDate = ($fromDate == "") ? NepaliToEnglishDate(firstDayOfNepaliMonth()) : $fromDate;
$toDate = ($toDate == "") ? Today() : $toDate;
$ci = &get_instance();
$q = "select *,(select bs_date from tbl_nepengcalendar where ad_date=tbl_voucherdetails.transaction_date) as transaction_date_bs from tbl_voucherdetails where status=1 and account_id='$account_id' and transaction_date>='$fromDate' and transaction_date<='$toDate'";
// echo $q;
$Transactions = $ci->db->query($q)->result();
// $Transactions = $ci->db->where("transaction_date>='$fromDate'")->where("transaction_date<='$toDate'")->where("status", 1)->where("account_id", $account_id)->get("tbl_voucherdetails")->result();
$Account = $ci->db->where("status", 1)->where("account_id", $account_id)->get("tbl_accounts")->row();
foreach ($Transactions as $T) {
//$T->AccountCategory=$this->db->where("status",1)->where("accategory_id",$AccountGroup->acgroup_id)->get("tbl_accategories")->result();
$T->Voucher = $ci->db->where("status", 1)->where("voucher_id", $T->voucher_id)->get("tbl_vouchers")->row();
}
$data['Transactions'] = $Transactions;
$data['Account'] = $Account;
$data['account_id'] = $account_id;
$data['oldBalance'] = $oldBalance;
return $data;
}
function showLedger($account_id, $fromDate = "", $toDate = "", $fiscalStart = "", $fiscalEnd = "" )
{
$oldBalance = $this->getOldBalance($account_id, FYStart());
$fromDate = ($fromDate == "") ? NepaliToEnglishDate(FYStart()) : $fromDate;
$toDate = ($toDate == "") ? Today() : $toDate;
$ci = &get_instance();
$Transactions = $ci->db->where("transaction_date between '$fromDate' AND '$toDate'")->where("status", 1)->where("account_id", $account_id)->get("tbl_voucherdetails")->result();
$Account = $ci->db->where("status", 1)->where("account_id", $account_id)->get("tbl_accounts")->row();
foreach ($Transactions as $T) {
$T->Voucher = $ci->db->where("status", 1)->where("voucher_id", $T->voucher_id)->get("tbl_vouchers")->row();
}
$data['Transactions'] = $Transactions;
$data['Account'] = $Account;
$data['account_id'] = $account_id;
?>
<div class="card-primary card-outline ">
<div class="card-header">
<h5 class="m-0">Leger for Account : <?php echo $Account->account_name; ?> <a href="<?php echo site_url("accounts/ledger/print/" . $Account->account_id . "/?" . $_SERVER['QUERY_STRING']); ?>" class="btn btn-success btn-sm float-right">Print</a></h5>
</div>
<div class="card-body p-0 mb-20" id="printableDiv">
<h3 class="text-center"><?php echo $ci->session->userdata("CompanyName"); ?></h3>
<h5 class="text-center">Ledger Details for <?php echo $Account->account_name; ?> </h5>
<?php $TableData = $Transactions; ?>
<?php $TotalCols = 7; ?>
<table class="table table-bordered table-head-fixed text-nowrap table-striped ">
<thead>
<tr>
<th class="col-1"><?php myLang("Date"); ?></th>
<!-- <th class="col-1">Date (A.D)</th> -->
<th class="col-1"><?php myLang("Account"); ?></th>
<!-- <th class="col-5">Narration</th> -->
<th class="col-1"><?php myLang("Voucher Type"); ?></th>
<th class="col-1 text-right"><?php myLang("Debit"); ?></th>
<th class="col-1 text-right"><?php myLang("Credit"); ?></th>
<th class="col-1"><?php myLang("Balance"); ?></th>
<input type="hidden" id="refdate" data-start="<?php echo $fiscalStart; ?>" data-end="<?php echo $fiscalEnd; ?>">
</tr>
</thead>
<tbody>
<?php $r = 1;
$drTotal = 0;
$crTotal = 0;
$balance = 0;
foreach ($TableData as $TableRow) : $r++;
?>
<tr>
<td><?php echo NepaliDate(($TableRow->transaction_date)); ?></td>
<td>
<?php
if ($TableRow->voucher_id != 0) :
$Tr = $ci->myaccounts->getVoucherTransactions($TableRow->Voucher->voucher_id);
foreach ($Tr as $T) :
if ($T->account_id != $account_id) {
echo $T->account_name;
break;
}
endforeach;
// pre($Tr);
else :
echo "Opening Balance";
endif;
?></td>
<!-- <td><?php //echo $TableRow->narration;
?></td> -->
<td>
<?php linkVoucher($TableRow->voucher_id); ?>
</td>
<td><?php echo myCurrency($TableRow->dr);
$drTotal += $TableRow->dr; ?></td>
<td><?php echo myCurrency($TableRow->cr);
$crTotal += $TableRow->cr; ?></td>
<?php $balance += $TableRow->dr;
$balance -= $TableRow->cr; ?>
<td><?php echo ($balance != 0) ? myCurrency($balance) : showNill(); ?></td>
</tr>
<?php endforeach; ?>
<?php while ($r < 15) : ?>
<tr>
<td>&nbsp;</td>
<!-- <td></td> -->
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<?php $r++;
endwhile; ?>
<tbody>
<tfoot>
<tr>
<td colspan="3" class="text-right text-bold">Total</td>
<td><?php echo myCurrency($drTotal); ?></td>
<td><?php echo myCurrency($crTotal); ?></td>
<td><?php echo myCurrency($balance); ?></td>
</tr>
</tfoot>
</table>
<!-- <div class="container ">
<div class="row mt-100 ">
<div class="col-2"><span class="underline-text"><?php echo $ci->session->userdata("loggedUser"); ?></span></div>
<div class="col-2 offset-3">______________</div>
<div class="col-2 offset-3">______________</div>
</div>
<div class="row">
<div class="col-2">Entered By</div>
<div class="col-2 offset-3">Checked By</div>
<div class="col-2 offset-3">Approved By</div>
</div>
<div class="divFooter">UNCLASSIFIED</div>
</div> -->
</div>
</div>
<?php
function footerfunctions()
{
?>
<script>
$(".ass_date").nepaliDatePicker({
dateFormat: "%y-%m-%d",
closeOnDateSelect: true,
minDate: $('#refdate').data('start'),
maxDate: $('#refdate').data('end'),
});
</script>
<?php
}
?>
<?php
}
function ledgerPDF_FPDM($account_id, $fromDate, $toDate)
{
$CI = &get_instance();
$CI->load->library("numbertoword");
$ledgerData = $this->getLedgerData($account_id, $fromDate, $toDate);
$file = APPPATH . "/../pdf/e_ledger1.pdf";
$pdf = new FPDM($file);
$i = 0;
$crTotal = 0;
$drTotal = 0;
$fields = array();
$lineBalance = 0;
// pre($ledgerData);
//die;
$fields['account_name'] = $ledgerData['Account']->account_name;
$fields['from_date_ad'] = NepaliToEnglishDate($fromDate);
$fields['to_date_ad'] = NepaliToEnglishDate($toDate);
$fields['from_date_bs'] = $fromDate;
$fields['to_date_bs'] = $toDate;
$printedDate = NepaliDate(Today()) . "(AD: " . Today() . ")";
foreach ($ledgerData['Transactions'] as $VoucherDetail) :
$i++;
$fields['date' . $i] = $VoucherDetail->transaction_date . chr(13) . NepaliDate($VoucherDetail->transaction_date);
$fields['voucher_no' . $i] = isset($VoucherDetail->Voucher->voucher_no) ? $VoucherDetail->Voucher->voucher_no : "B/F";
$fields['narration' . $i] = $VoucherDetail->narration;
$fields['debit' . $i] = ($VoucherDetail->dr == 0) ? "" : N2($VoucherDetail->dr);
$fields['credit' . $i] = ($VoucherDetail->dr == 0) ? N2($VoucherDetail->cr) : "";
$drTotal += $VoucherDetail->dr;
$crTotal += $VoucherDetail->cr;
$lineBalance += $VoucherDetail->dr - $VoucherDetail->cr;
$fields['balance' . $i] = N2($lineBalance);
$fields['debit_total'] = $drTotal;
$fields['credit_total'] = $crTotal;
$fields['balance_total'] = $crTotal - $drTotal;
$fields['printed_by'] = $CI->session->userdata("loggedUser");
$fields['printed_on'] = $printedDate;
$pdf->Load($fields, true);
if ($i > 20) {
//$pdf->AddPage();
$i = 0;
}
endforeach;
//$pdf->Load($fields, true);
$pdf->Merge();
//$pdf->Flatten();
$OutputFileLocation = APPPATH . "/../pdf/ledgers/";
$OutputFile = "Ledger_" . $ledgerData['Account']->account_id . ".pdf";
$pdf->Output("F", $OutputFileLocation . $OutputFile);
return $OutputFile;
}
function ledgerPDF($account_id, $fromDate, $toDate)
{
$CI = &get_instance();
$CI->load->library("numbertoword");
$ledgerData = $this->getLedgerData($account_id, $fromDate, $toDate);
if ($_SERVER['HTTP_HOST'] == 'localhost')
$file = "ledger_$account_id.wpdf";
else
$file = "ledger_$account_id.pdf";
$pdf = new MyPDF();
$pdf->HeaderText = "Account Ledger for " . $ledgerData['Account']->account_name;
$pdf->SubHeaderText = "Period of $fromDate to $toDate";
$pdf->printedBy = $CI->session->userdata('loggedUser');
$i = 0;
$crTotal = 0;
$drTotal = 0;
$fields = array();
$lineBalance = 0;
// pre($ledgerData);
//die;
$columns = array(
array("name" => "Date", "width" => 20, "align" => "C"),
array("name" => "VN", "width" => 10, "align" => "L"),
array("name" => "Narration", "width" => 80, "align" => "L"),
array("name" => "Debit", "width" => 25, "align" => "L"),
array("name" => "Credit", "width" => 25, "align" => "L"),
array("name" => "Balance", "width" => 25, "align" => "L")
);
$pdf->HeaderColumns = $columns;
$pdf->SetAutoPageBreak(true, 50);
$pdf->AddPage("P", "A4");
$pdf->SetFont('Helvetica', '', 8);
$y = 50;
$rowHeight = 8;
foreach ($ledgerData['Transactions'] as $VoucherDetail) :
$pdf->cell($columns[0]['width'], $rowHeight, $VoucherDetail->transaction_date, 1, 0, "C");
$pdf->cell($columns[1]['width'], $rowHeight, isset($VoucherDetail->Voucher->voucher_no) ? $VoucherDetail->Voucher->voucher_no : "B/F", 1, 0, "C");
$pdf->cell($columns[2]['width'], $rowHeight, character_limiter($VoucherDetail->narration, 35, " ..."), 1, 0, "J");
$pdf->cell($columns[3]['width'], $rowHeight, ($VoucherDetail->dr == 0) ? "" : N2($VoucherDetail->dr), 1, 0, "R");
$pdf->cell($columns[4]['width'], $rowHeight, ($VoucherDetail->dr == 0) ? N2($VoucherDetail->cr) : "", 1, 0, "R");
$drTotal += $VoucherDetail->dr;
$crTotal += $VoucherDetail->cr;
$lineBalance += $VoucherDetail->dr - $VoucherDetail->cr;
$pdf->cell($columns[5]['width'], $rowHeight, N2($lineBalance), 1, 0, "R");
$pdf->Ln();
// $x = 10;
// $pdf->SetXY($x, $y);
// $pdf->Cell($columns[0]['width'], $rowHeight, $VoucherDetail->transaction_date, 1, "C");
// $pdf->SetXY($x += $columns[0]['width'], $y);
// $pdf->MultiCell($columns[1]['width'], $rowHeight, isset($VoucherDetail->Voucher->voucher_no) ? $VoucherDetail->Voucher->voucher_no : "B/F", 1, "C");
// $pdf->SetXY($x += $columns[1]['width'], $y);
// $pdf->MultiCell($columns[2]['width'], $rowHeight, $VoucherDetail->narration, 1, "J", false, 1);
// $pdf->SetXY($x += $columns[2]['width'], $y);
// $pdf->MultiCell($columns[3]['width'], $rowHeight, ($VoucherDetail->dr == 0) ? "" : N2($VoucherDetail->dr), 1,"R");
// $pdf->SetXY($x += $columns[3]['width'], $y);
// $pdf->MultiCell($columns[4]['width'], $rowHeight, ($VoucherDetail->dr == 0) ? N2($VoucherDetail->cr) : "", 1,"R");
// $drTotal += $VoucherDetail->dr;
// $crTotal += $VoucherDetail->cr;
// $lineBalance += $VoucherDetail->dr - $VoucherDetail->cr;
// $pdf->SetXY($x += $columns[4]['width'],$y);
// $pdf->MultiCell($columns[5]['width'], $rowHeight, N2($lineBalance), 1,"R");
// $pdf->Ln();
// $y += $rowHeight;
// if($y>280)$pdf->AddPage();
endforeach;
$pdf->Output(APPPATH . "/../pdf/ledgers/" . $file, "F");
return $file;
// $printedDate = NepaliDate(Today()) . "(AD: " . Today() . ")";
// foreach ($ledgerData['Transactions'] as $VoucherDetail) :
// $i++;
// $fields['date' . $i] = $VoucherDetail->transaction_date . chr(13) . NepaliDate($VoucherDetail->transaction_date);
// $fields['voucher_no' . $i] = isset($VoucherDetail->Voucher->voucher_no) ? $VoucherDetail->Voucher->voucher_no : "B/F";
// $fields['narration' . $i] = $VoucherDetail->narration;
// $fields['debit' . $i] = ($VoucherDetail->dr == 0) ? "" : N2($VoucherDetail->dr);
// $fields['credit' . $i] = ($VoucherDetail->dr == 0) ? N2($VoucherDetail->cr) : "";
// $drTotal += $VoucherDetail->dr;
// $crTotal += $VoucherDetail->cr;
// $lineBalance += $VoucherDetail->dr - $VoucherDetail->cr;
// $fields['balance' . $i] = N2($lineBalance);
// $fields['debit_total'] = $drTotal;
// $fields['credit_total'] = $crTotal;
// $fields['balance_total'] = $crTotal - $drTotal;
// $fields['printed_by'] = $CI->session->userdata("loggedUser");
// $fields['printed_on'] = $printedDate;
// $pdf->Load($fields, true);
// if ($i > 20) {
// //$pdf->AddPage();
// $i = 0;
// }
// endforeach;
// //$pdf->Load($fields, true);
// $pdf->Merge();
// //$pdf->Flatten();
// $OutputFileLocation = APPPATH . "/../pdf/ledgers/";
// $OutputFile = "Ledger_" . $ledgerData['Account']->account_id . ".pdf";
// $pdf->Output("F", $OutputFileLocation . $OutputFile);
// return $OutputFile;
}
function listVouchers($fromDate = "", $toDate = "", $account_id = "", $vouchertype_id = "", $showAccounts = false, $showVoucherTypes = false, $fiscalStart = "", $fiscalEnd = "")
{
// echo $toDate;
$ci = &get_instance();
$fromDate = ($fromDate == "") ? NepaliToEnglishDate(firstDayOfNepaliMonth()) : $fromDate;
$toDate = ($toDate == "") ? Today() : $toDate;
$q = "select *, (select narration from tbl_voucherdetails where tbl_voucherdetails.voucher_id=tbl_vouchers.voucher_id limit 1) as narration from tbl_vouchers where status=1 and voucher_date>='$fromDate' and voucher_date<='$toDate'";
if ($account_id != "") $q .= " and voucher_id in (select voucher_id from tbl_voucherdetails where account_id='$account_id')";
if ($vouchertype_id != "") $q .= " and voucher_type ='$vouchertype_id'";
$q .= " order by voucher_date desc";
// echo $q;
$Vouchers = $ci->db->query($q)->result();
$TableData = $Vouchers;
if ($showAccounts) :
foreach ($TableData as $Row) {
$q = "select * from tbl_voucherdetails where voucher_id='" . $Row->voucher_id . "'";
$Row->Transactions = $ci->db->query($q)->result();
$Row->VoucherType = $this->getVoucherType($Row->voucher_type);
}
endif;
?>
<table class="table table-bordered table-striped longdataTable" id="voucherList1">
<thead>
<tr>
<!-- <th class="col-1"><?php myLang("Sn"); ?></th> -->
<th class="" width="20" data-sortable="true"><?php myLang("#"); ?></th>
<th class="" width="70"><?php myLang("Date (B.S)"); ?></th>
<?php if ($showAccounts) : ?>
<th><?php myLang("Particulars"); ?></th>
<?php endif; ?>
<?php if ($showVoucherTypes) : ?>
<th><?php myLang("Voucher Type"); ?></th>
<?php endif; ?>
<th width="90"><?php myLang("Dr"); ?></th>
<th width="90"><?php myLang("Cr"); ?></th>
<!--<th><?php myLang("Voucher State"); ?></th> -->
<th class="table-col col-1 text-center">Action</th>
</tr>
</thead>
<tbody>
<?php $a = 0;
$drTotal = 0;
$crTotal = 0;
foreach ($TableData as $TableRow) : $a++; ?>
<tr data-id="<?php echo $TableRow->voucher_id; ?>" class="<?php echo ($TableRow->voucher_state == "Reversed") ? "table-danger" : ""; ?>">
<!-- <td><?php echo $TableRow->voucher_id; ?></td> -->
<td><?php echo $TableRow->voucher_no; ?></td>
<td><?php echo NepaliDate($TableRow->voucher_date); ?></td>
<td>
<?php foreach ($TableRow->Transactions as $Transaction) : ?>
<div><?php echo (($Transaction->cr) ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" : "") . $this->getAccountDetails($Transaction->account_id)->account_name; ?></div>
<?php endforeach; ?>
<?php if ($TableRow->narration): ?>
(<span class="narration_display"><?php echo $TableRow->narration; ?></span>)
<?php endif; ?>
</td>
<?php if ($showVoucherTypes) : ?>
<td>
<?php echo $TableRow->VoucherType->voucher_name; ?>
</td>
<?php endif; ?>
<td>
<?php foreach ($TableRow->Transactions as $Transaction) : $drTotal += $Transaction->dr; ?>
<?php echo myCurrency($Transaction->dr); ?>
<?php endforeach; ?>
</td>
<td>
<?php foreach ($TableRow->Transactions as $Transaction) : $crTotal += $Transaction->cr; ?>
<?php echo myCurrency($Transaction->cr); ?>
<?php endforeach; ?>
</td>
<!-- <td><?php echo $TableRow->voucher_type; ?></td> -->
<!-- <td><?php echo $TableRow->voucher_state; ?></td> -->
<td class="col-1 text-center">
<a onClick="javascript:showDetails(<?php echo $TableRow->voucher_id; ?>);" class="btn btn-success btn-xs" title="View Details"><i class="fa fa-eye"></i></a>
<!-- <a onClick="javascript:showDetails(<?php //echo $TableRow->voucher_id; ?>);" class="btn btn-info btn-xs" title="View Details"><i class="fas fa-edit"></i></a> -->
<a onClick="javascript:showPDF(<?php echo $TableRow->voucher_id; ?>);" class="btn btn-primary btn-xs" title="View PDF"><i class="fa fa-file-pdf"></i></a>
<?php //print_r($ci->session->userdata());die; ?>
<?php if ($ci->session->userdata('LoggedUser') != 'admin'): ?>
<a onClick="javascript:deleteVoucher(<?php echo $TableRow->voucher_id; ?>);" class="btn btn-danger btn-xs" title="Delete Voucher"><i class="fa fa-trash"></i></a>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
<tbody>
<tfoot>
<tr>
<td></td>
<td></td>
<?php if ($showVoucherTypes) : ?>
<td></td>
<?php endif; ?>
<td class="text-right text-bold">Total</td>
<td class="text-right text-bold"><?php echo myCurrency($drTotal); ?></td>
<td class="text-right text-bold"><?php echo myCurrency($crTotal); ?></td>
<td></td>
</tr>
</tfoot>
</table>
<div class="modal fade" id="voucherdetails_box" tabindex="-1" role="dialog" aria-labelledby="voucherdetails_box" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<!-- <h5 class="modal-title" id="exampleModalLabel">Voucher Details</h5> -->
<!-- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button> -->
</div>
<div class="modal-body" id="details_container">
Voucher Details Goes Here
</div>
<div class="modal-footer">
<button type="button" onClick='reversalEntry()' id="reversalBtn" class="btn btn-secondary" data-dismiss="modal" data-id="">Revarsal Entry</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
<input type="hidden" id="refdate" data-start="<?php echo $fiscalStart; ?>" data-end="<?php echo $fiscalEnd; ?>">
</div>
</div>
</div>
<script>
function showPDF(id) {
$.ajax({
url: "<?php echo site_url("accounts/vouchers/print/"); ?>" + id + "?modal=true",
success: function(data) {
$("#details_container").html(data);
$("#reversalBtn").data("id", id);
$("#voucherdetails_box").modal('show');
}
});
}
function showDetails(id) {
$.ajax({
url: "<?php echo site_url("accounts/vouchers/voucherdetails/"); ?>" + id,
success: function(data) {
$("#details_container").html(data);
$("#reversalBtn").data("id", id);
$("#voucherdetails_box").modal('show');
}
});
}
function reversalEntry() {
var id = $("#reversalBtn").data("id");
if (confirm("Are you sure you want to post reversal for this voucher?")) {
window.location = "<?php echo site_url("accounts/vouchers/reversal/"); ?>" + id;
}
}
</script>
<?php
function footerfunctions()
{
?>
<script>
$(document).ready(function() {
var table = $('#voucherList').DataTable();
var tableRows = $('table#voucherList tbody').find('tr');
tableRows.each(function() {
async: false;
var jqueryRow = $(this);
var row = table.row(jqueryRow);
var id = $(this).data("id");
var Transactions = "<table class='table table-resonsive'><tr><th>Account<\/th><th>Narration<\/th><th>Dr<\/th><th>Cr<\/th><\/tr><tr><td>Billable Projects<\/td><td>Website Development<\/td><td>50000<\/td><td>0<\/td><\/tr><tr><td>Larke Himal Jadibuti Udhyog<\/td><td>Website Development<\/td><td>0<\/td><td>50000<\/td><\/tr><\/table>";
Transactions = getVoucherDetails(id);
row.child(Transactions).show();
});
});
function getVoucherDetails(id) {
$.data;
$.ajax({
url: "<?php echo site_url("ajax/getVoucherDetailsTable/"); ?>" + id,
async: false,
success: function(data) {
$.data = data;
}
});
return ($.data);
}
function deleteVoucher(id) {
// Show confirmation dialog
if (confirm("Are you sure you want to delete this voucher?")) {
$.ajax({
url: "<?php echo site_url("ajax/deleteVoucher/"); ?>" + id,
async: false,
success: function(data) {
alert("Voucher deleted successfully.");
// Reload the page
location.reload();
},
error: function() {
alert("Failed to delete voucher.");
}
});
}
}
</script>
<script>
$(".ass_date").nepaliDatePicker({
dateFormat: "%y-%m-%d",
closeOnDateSelect: true,
minDate: $('#refdate').data('start'),
maxDate: $('#refdate').data('end'),
});
</script>
<?php
}
?>
<?php
}
function showVoucherType($vouchertype_id)
{
$ci = &get_instance();
$ci->db->where("status", 1)->where("vouchertype_id", $vouchertype_id);
return $ci->db->get("tbl_vouchertypes")->row();
}
function deleteVoucher($voucher_id)
{
$ci = &get_instance();
$ci->db->where("status", 1)->where("voucher_id", $voucher_id)->delete("tbl_vouchers");
$ci->db->where("status", 1)->where("voucher_id", $voucher_id)->delete("tbl_voucherdetails");
}
function showVoucher($voucher_id)
{
$ci = &get_instance();
$Voucher = $ci->db->where("status", 1)->where("voucher_id", $voucher_id)->get("tbl_vouchers")->row();
$Voucher->Details = $ci->db->where("status", 1)->where("voucher_id", $voucher_id)->get("tbl_voucherdetails")->result();
$Voucher->Type = $ci->db->where("status", 1)->where("vouchertype_id", $Voucher->voucher_type)->get("tbl_vouchertypes")->row();
?>
<div class="card card-primary card-outline">
<div class="card-header">
<h5 class="m-0"><?php echo $Voucher->Type->voucher_type; ?> Voucher No. <?php echo $Voucher->voucher_no; ?> <a onclick="javascript:showPDF(<?php echo $voucher_id; ?>);//printDiv('printableDiv');" class="btn btn-primary btn-sm float-right">Print</a></h5>
</div>
<div class="card-body" id="printableDiv">
<div class="row mt-5">
<div class="col">
<h3 class="text-center"><?php echo $ci->session->userdata("CompanyName"); ?></h3>
</div>
</div>
<div class="row mb-5">
<div class="col">
<h5 class="text-center"> <?php echo $Voucher->Type->voucher_type; ?> Voucher </h5>
</div>
</div>
<!-- <p class="text-right">Date (AD): <?php echo $Voucher->voucher_date; ?></p>
<p class="text-right">Date (BS): <?php echo NepaliDate($Voucher->voucher_date); ?></p> -->
<?php $TableData = $Voucher->Details; ?>
<?php $TotalCols = 4; ?>
<table class="table table-bordered ">
<thead>
<tr>
<!-- <th class="col-1"><?php myLang("Sn"); ?></th> -->
<th width="150px"><?php myLang("Date (B.S)"); ?></th>
<!-- <th class="col-1"><?php myLang("Date (A.D)"); ?></th> -->
<th><?php myLang("Account"); ?></th>
<!-- <th><?php //myLang("Narration");
?></th> -->
<th class="text-right" width="150px"><?php myLang("Debit"); ?></th>
<th class="text-right" width="150px"><?php myLang("Credit"); ?></th>
</tr>
</thead>
<tbody>
<?php $r = 0;
$drTotal = 0;
$crTotal = 0;
foreach ($TableData as $TableRow) : $r++; ?>
<?php foreach ($TableRow as $cols) : $id = $cols;
break;
endforeach; ?><tr>
<!-- <td><?php echo $r; ?></td> -->
<td><?php echo NepaliDate($TableRow->transaction_date); ?></td>
<!-- <td><?php echo $TableRow->transaction_date; ?></td> -->
<td><?php echo getFieldfromValue("tbl_accounts", "account_name", "account_id", $TableRow->account_id); ?></td>
<!-- <td><?php //echo $TableRow->narration;
?></td> -->
<td><?php echo myCurrency($TableRow->dr);
$drTotal += $TableRow->dr; ?></td>
<td><?php echo myCurrency($TableRow->cr);
$crTotal += $TableRow->cr; ?></td>
</tr>
<?php endforeach; ?>
<?php while ($r < 15) : ?>
<tr>
<?php for ($i = 0; $i < $TotalCols; $i++) : ?>
<td>&nbsp;</td>
<?php endfor; ?>
</tr>
<?php $r++;
endwhile; ?>
<tbody>
<tfoot>
<tr>
<td colspan="<?php echo $TotalCols - 2; ?>" class="text-right text-bold">Total</td>
<td><?php echo myCurrency($drTotal); ?></td>
<td><?php echo myCurrency($drTotal); ?></td>
</tr>
<tr>
<td colspan="<?php echo $TotalCols; ?>" class="text-left" height=100><i>Narration: <?php echo $TableRow->narration; ?></i></td>
</tr>
<tr>
<td colspan="<?php echo $TotalCols; ?>" class="text-center" height=200>
<div class="row mt-100">
<div class="col-2"><span class="underline-text"><?php echo $Voucher->created_by; ?></span></div>
<div class="col-2 offset-3">______________</div>
<div class="col-2 offset-3">______________</div>
</div>
<div class="row">
<div class="col-2">Entered By</div>
<div class="col-2 offset-3">Checked By</div>
<div class="col-2 offset-3">Approved By</div>
</div>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<?php
}
function showAccountsCombo($fieldName, $displayName, $fieldID, $condition = "", $default = "", $CSSclass = "")
{
$ci = &get_instance();
?>
<?php if ($displayName != "") : ?>
<label for="<?php echo $fieldID; ?>"><?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></label>
<?php endif; ?>
<select name="<?php echo $fieldName; ?>" class="form-control select2 <?php echo $CSSclass; ?>" id="<?php echo $fieldID; ?>">
<option value="">Select <?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></option>
<?php
$q = "select *,(select accategory_name from tbl_accategories where tbl_accategories.accategory_id=tbl_accounts.accategory_id) as accategory_name from tbl_accounts";
$q .= ($condition != "") ? " where $condition" : " where status=1";
$q .= " order by accategory_id, account_name";
// echo $q;
$Values = $ci->db->query($q)->result();
$current_category = "";
foreach ($Values as $value) : ?>
<?php if ($current_category != $value->accategory_name) : ?>
<optgroup label="<?php echo $value->accategory_name; ?>">
<?php endif; ?>
<option value="<?php echo $value->account_id; ?>" <?php echo ($value->account_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->accategory_name; ?> >>
<?php echo $value->account_name; ?>
</option>
<?php if ($current_category != $value->accategory_name) : ?>
</optgroup>;
<?php $current_category = $value->accategory_name;
endif; ?>
<?php endforeach; ?>
</select>
<?php
}
function showAccountsComboForVoucher($fieldName, $displayName, $fieldID, $condition = "", $default = "", $CSSclass = "", $defaultCategories = array())
{
$ci = &get_instance();
?>
<?php if ($displayName != "") : ?>
<label for="<?php echo $fieldID; ?>"><?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></label>
<?php endif; ?>
<select name="<?php echo $fieldName; ?>" class="form-control select2 <?php echo $CSSclass; ?>" id="<?php echo $fieldID; ?>">
<option value="">Select <?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></option>
<?php
$q = "select *,(select accategory_name from tbl_accategories where tbl_accategories.accategory_id=tbl_accounts.accategory_id) as accategory_name from tbl_accounts";
$q .= ($condition != "") ? " where $condition" : " where status=1";
$q .= " order by accategory_id, account_name";
// echo $q;
$Values = $ci->db->query($q)->result();
$current_category = "";
foreach ($Values as $value) : ?>
<?php if (!empty($defaultCategories)) : ?>
<?php if (in_array($value->accategory_id, $defaultCategories)) : ?>
<option value="<?php echo $value->account_id; ?>" <?php echo ($value->account_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->accategory_name; ?> >>
<?php echo $value->account_name; ?>
</option>
<?php endif; ?>
<?php else : ?>
<option value="<?php echo $value->account_id; ?>" <?php echo ($value->account_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->accategory_name; ?> >>
<?php echo $value->account_name; ?>
</option>
<?php endif; ?>
<?php endforeach; ?>
</select>
<button type="button" class="btn input-group-text addplus" data-toggle="modal" data-target="#exampleModal"><i class="fas fa-plus"></i></button>
<?php
}
function showAccountsCategoriesCombo($fieldName, $displayName, $fieldID, $condition = "", $default = "", $CSSclass = "")
{
$ci = &get_instance();
?>
<?php if ($displayName != "") : ?>
<label for="<?php echo $fieldID; ?>"><?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></label>
<?php endif; ?>
<select name="<?php echo $fieldName; ?>" class="form-control select2 <?php echo $CSSclass; ?>" id="<?php echo $fieldID; ?>">
<option value="">Select </option>
<!-- <option value="">Select <?php //echo function_exists("myLang") ? myLang($displayName) : $displayName;
?></option> -->
<?php
$q = "select *,(select acgroup_name from tbl_acgroups where tbl_accategories.acgroup_id=tbl_acgroups.acgroup_id) as acgroup_name from tbl_accategories";
$q .= ($condition != "") ? " where $condition" : " where status=1";
$q .= " order by accategory_name";
// echo $q;
$Values = $ci->db->query($q)->result();
$current_acgroup = "";
/*
foreach ($Values as $value) : ?>
<?php if ($current_acgroup != $value->acgroup_name) : ?>
<optgroup label="<?php echo $value->acgroup_name; ?>">
<?php endif; ?>
<option value="<?php echo $value->accategory_id; ?>" <?php echo ($value->accategory_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->acgroup_name; ?> >>
<?php echo $value->accategory_name; ?>
</option>
<?php if ($current_acgroup != $value->acgroup_name) : ?>
</optgroup>;
<?php $current_acgroup = $value->acgroup_name;
endif;
endforeach;
*/
foreach ($Values as $value) : ?>
<option value="<?php echo $value->accategory_id; ?>" <?php echo ($value->accategory_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->accategory_name; ?>
</option>
<?php
endforeach;
?>
</select>
<?php
}
function showFixedAccountsCategoriesCombo($fieldName, $displayName, $fieldID, $condition = "", $default = "", $CSSclass = "")
{
$ci = &get_instance();
?>
<?php if ($displayName != "") : ?>
<label for="<?php echo $fieldID; ?>"><?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></label>
<?php endif; ?>
<select name="<?php echo $fieldName; ?>" class="form-control select2 <?php echo $CSSclass; ?>" id="<?php echo $fieldID; ?> " required>
<option value="">Select </option>
<!-- <option value="">Select <?php //echo function_exists("myLang") ? myLang($displayName) : $displayName;
?></option> -->
<?php
$q = "select *,(select acgroup_name from tbl_acgroups where tbl_accategories.acgroup_id=tbl_acgroups.acgroup_id) as acgroup_name from tbl_accategories";
$q .= ($condition != "") ? " where $condition" : " where status=1";
$q .= " and parent_category_id=0";
$q .= " order by accategory_name";
// echo $q;
$Values = $ci->db->query($q)->result();
$current_acgroup = "";
/*
foreach ($Values as $value) : ?>
<?php if ($current_acgroup != $value->acgroup_name) : ?>
<optgroup label="<?php echo $value->acgroup_name; ?>">
<?php endif; ?>
<option value="<?php echo $value->accategory_id; ?>" <?php echo ($value->accategory_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->acgroup_name; ?> >>
<?php echo $value->accategory_name; ?>
</option>
<?php if ($current_acgroup != $value->acgroup_name) : ?>
</optgroup>;
<?php $current_acgroup = $value->acgroup_name;
endif;
endforeach;
*/
foreach ($Values as $value) : ?>
<option value="<?php echo $value->accategory_id; ?>" <?php echo ($value->accategory_id == $default) ? 'SELECTED' : ''; ?>>
<?php echo $value->accategory_name; ?>
</option>
<?php
endforeach;
?>
</select>
<?php
}
function showAccountsCategoriesWithParentsCombo($fieldName, $displayName, $fieldID, $condition = "", $default = "", $CSSclass = "", $extras = "")
{
$ci = &get_instance();
?>
<?php if ($displayName != "") : ?>
<label for="<?php echo $fieldID; ?>"><?php echo function_exists("myLang") ? myLang($displayName) : $displayName; ?></label>
<?php endif; ?>
<select name="<?php echo $fieldName; ?>" class="form-control select2 <?php echo $CSSclass; ?>" id="<?php echo $fieldID; ?>" <?php echo $extras; ?>>
<option value="">Select </option>
<?php
$q = "select *,(select acgroup_name from tbl_acgroups where tbl_accategories.acgroup_id=tbl_acgroups.acgroup_id) as acgroup_name from tbl_accategories";
$q .= ($condition != "") ? " where $condition" : " where status=1";
$q .= " order by accategory_name";
//echo $q;
$Values = $ci->db->query($q)->result();
$current_acgroup = "";
foreach ($Values as $value) : ?>
<?php if ($current_acgroup != $value->acgroup_name) : ?>
<!--optgroup label="<?php echo $value->acgroup_name; ?>"-->
<?php endif; ?>
<option value="<?php echo $value->accategory_id; ?>" <?php echo ($value->accategory_id == $default) ? 'SELECTED' : ''; ?>><?php echo $value->accategory_name; ?></option>
<?php if ($current_acgroup != $value->acgroup_name) : ?><!--/optgroup-->
<?php $current_acgroup = $value->acgroup_name;
endif; ?>
<?php endforeach; ?>
</select>
<?php
}
private function getVoucherAmount($voucher_id)
{
$ci = &get_instance();
$t = "select sum(dr) as amount from tbl_voucherdetails where voucher_id='$voucher_id'";
$Transaction = $ci->db->query($t)->row();
return $Transaction->amount;
}
private function getVoucherTransactions($voucher_id)
{
$ci = &get_instance();
$t = "select *,(select account_name from tbl_accounts where tbl_accounts.account_id=tbl_voucherdetails.account_id) as account_name from tbl_voucherdetails where voucher_id='$voucher_id'";
$Transactions = $ci->db->query($t)->result();
return $Transactions;
}
public function getAccountCategories()
{
$ci = &get_instance();
$t = "select * from tbl_accategories as b where status=1";
$AccountCategories = $ci->db->query($t)->result();
foreach ($AccountCategories as $AccountCategory) :
$AccountCategory->AccountGroup = $ci->db->query("select * from tbl_acgroups where acgroup_id = '$AccountCategory->acgroup_id'")->row();
if ($AccountCategory->parent_category_id <> 0) {
$AccountCategory->Parent = $ci->db->query("select * from tbl_accategories where accategory_id = '$AccountCategory->parent_category_id'")->row();
}
endforeach;
return $AccountCategories;
}
//NEW METHODS
function getAccountBalanceR($BalanceBy, $ReferenceValue, &$ACBalances = array())
{
$ci = &get_instance();
if ($BalanceBy == "Account") {
$account_id = $ReferenceValue;
$t = "SELECT * FROM tbl_voucherdetails WHERE account_id = '$account_id' AND status <> -1";
// echo $t;die;
$Vouchers = $ci->db->query($t)->result();
$DrBalance = 0;
$CrBalance = 0;
foreach ($Vouchers as $Voucher) {
$DrBalance += $Voucher->dr;
$CrBalance += $Voucher->cr;
}
$ACBalances['DrBalance'] = $DrBalance;
$ACBalances['CrBalance'] = $CrBalance;
$ACBalances['Balance'] = $DrBalance - $CrBalance;
return $ACBalances['Balance'];
}
if ($BalanceBy == "Group") {
$accategory_id = $ReferenceValue;
$t = "SELECT * FROM tbl_accounts WHERE accategory_id = '$accategory_id'";
$Accounts = $ci->db->query($t)->result();
$groupBalance = 0;
foreach ($Accounts as $Account) {
$groupBalance += $this->getAccountBalanceR("Account", $Account->account_id, $ACBalances);
}
return $groupBalance;
}
if ($BalanceBy == "Category") {
$accategory_id = $ReferenceValue;
$t = "SELECT * FROM tbl_accategories WHERE parent_category_id = '$accategory_id'";
$Categories = $ci->db->query($t)->result();
$categoryBalance = 0;
foreach ($Categories as $Category) {
$categoryBalance += $this->getAccountBalanceR("Account", $Category->accategory_id, $ACBalances);
}
return $categoryBalance;
}
if ($BalanceBy == "Types") {
$acgroup_id = $ReferenceValue;
$t = "SELECT * FROM tbl_accategories WHERE acgroup_id = '$acgroup_id'";
$Categories = $ci->db->query($t)->result();
$typesBalance = 0;
foreach ($Categories as $Category) {
$typesBalance += $this->getAccountBalanceR("Group", $Category->accategory_id, $ACBalances);
}
return $typesBalance;
}
return 0;
}
function backupDatabase()
{
$ci = &get_instance();
$ci->load->database();
$dumpFilePath = __DIR__ . '/../../backup/' . $ci->db->database . '-backup-' . date('y-m-d-h-i-s') . '.sql';
$Filename = $ci->db->database . '-backup-' . date('y-m-d-h-i-s') . '.sql';
$command = "mysqldump -u " . $ci->db->username . " -p" . $ci->db->password . " -h " . $ci->db->hostname . " " . $ci->db->database . " > $dumpFilePath";
$output = shell_exec($command);
if ($output === null) {
// echo "Database dump successful. File saved at: $Filename";
mail("prajwalbro@gmail.com", "Account Database Backup", "Database dump successful. File saved at: $Filename");
} else {
echo "Error: Database dump failed. Please check your configuration and try again.";
}
}
function initDatabase()
{
$ci = &get_instance();
$ci->load->database();
$ci->load->dbforge();
if (!$ci->db->table_exists('tbl_vouchertypes')) {
return; // Table doesn't exist, no need to proceed
}
$fields = $ci->db->list_fields('tbl_vouchertypes');
// Check if 'default_credits' column exists
if (!in_array('default_credits', $fields)) {
$ci->dbforge->add_column('tbl_vouchertypes', array('default_credits' => array('type' => 'VARCHAR', 'constraint' => 255)));
}
// Check if 'default_debits' column exists
if (!in_array('default_debits', $fields)) {
$ci->dbforge->add_column('tbl_vouchertypes', array('default_debits' => array('type' => 'VARCHAR', 'constraint' => 255)));
}
}
function hasTransaction($type, $id)
{
switch ($type) {
case 'fiscalyear':
$ci = &get_instance();
$transactions = $ci->db->where("fiscalyear_id", $id)->get("tbl_voucherdetails");
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'branch':
$ci = &get_instance();
$transactions = $ci->db->where("branch_id", $id)->get("tbl_voucherdetails");
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'accategory':
$ci = &get_instance();
$t = "select * from tbl_voucherdetails where account_id in (select account_id from tbl_accounts where accategory_id=$id) or account_id in (select account_id from tbl_accounts where accategory_id in (select accategory_id from tbl_accategories where parent_category_id=$id))";
$transactions = $ci->db->query($t);
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'account':
$ci = &get_instance();
$t = "select * from tbl_voucherdetails where voucher_id<>0 and account_id =$id";
$transactions = $ci->db->query($t);
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'units':
$ci = &get_instance();
$t = "select * from tbl_items where units_id=$id";
$transactions = $ci->db->query($t);
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'itemcategory':
$ci = &get_instance();
$t = "select * from tbl_items where itemcategories_id=$id";
$transactions = $ci->db->query($t);
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
case 'items':
$ci = &get_instance();
$t = "select * from tbl_items where item_id in (select items_id from tbl_salesdetails where items_id=$id) or item_id in (select item_id from tbl_purchasedetails where items_id=$id)";
// echo $t;die;
$transactions = $ci->db->query($t);
// pre($transactions);die;
if ($transactions->num_rows() > 0) {
return true;
} else {
return false;
}
break;
default:
return false;
}
}
}