1465 lines
54 KiB
Plaintext
1465 lines
54 KiB
Plaintext
<?php
|
|
require("../../lib/mpdf60/mpdf.php");
|
|
|
|
class ExpenseController extends AppController
|
|
{
|
|
var $uses = array('Expense','GroupExpense','Meal',
|
|
'Participant','LoadingHistory','FamilyExpense',
|
|
'AccessInfo','DemoExpense','EmailHistory');
|
|
|
|
public $components = array('RequestHandler','MobileDetect');
|
|
|
|
public function beforeRender() {
|
|
parent::beforeRender();
|
|
|
|
}
|
|
|
|
private function getCategories(){
|
|
$category = array(
|
|
array("id"=>"1","name"=>"Books/Magazines","type"=>"1"),
|
|
array("id"=>"2","name"=>"Car & Transportation","type"=>"1"),
|
|
array("id"=>"3","name"=>"Charities","type"=>"1"),
|
|
array("id"=>"4","name"=>"Child care","type"=>"1"),
|
|
array("id"=>"5","name"=>"Clothing","type"=>"1"),
|
|
array("id"=>"6","name"=>"Debt Interest","type"=>"1"),
|
|
array("id"=>"7","name"=>"Debt Reduction","type"=>"1"),
|
|
array("id"=>"8","name"=>"Education/Tution Fee","type"=>"1"),
|
|
array("id"=>"9","name"=>"Events","type"=>"1"),
|
|
array("id"=>"10","name"=>"Food","type"=>"1"),
|
|
array("id"=>"11","name"=>"General Expense","type"=>"1"),
|
|
array("id"=>"12","name"=>"Gifts","type"=>"1"),
|
|
array("id"=>"13","name"=>"Household Items/Supplies","type"=>"1"),
|
|
array("id"=>"14","name"=>"Household Repairs","type"=>"1"),
|
|
array("id"=>"15","name"=>"Income/Other Tax","type"=>"1"),
|
|
array("id"=>"16","name"=>"Insurance","type"=>"1"),
|
|
array("id"=>"17","name"=>"Lending","type"=>"1"),
|
|
array("id"=>"18","name"=>"Medical/Health","type"=>"1"),
|
|
array("id"=>"19","name"=>"Mortgage","type"=>"1"),
|
|
array("id"=>"20","name"=>"Others","type"=>"1"),
|
|
array("id"=>"21","name"=>"Personal","type"=>"1"),
|
|
array("id"=>"22","name"=>"Pet Food/Treats","type"=>"1"),
|
|
array("id"=>"23","name"=>"Recreation and Fitness","type"=>"1"),
|
|
array("id"=>"24","name"=>"Rent","type"=>"1"),
|
|
array("id"=>"25","name"=>"Savings","type"=>"1"),
|
|
array("id"=>"26","name"=>"Sports","type"=>"1"),
|
|
array("id"=>"27","name"=>"Utilities","type"=>"1"),
|
|
array("id"=>"28","name"=>"Vacation","type"=>"1"),
|
|
|
|
|
|
array("id"=>"29","name"=>"Bank Interest","type"=>"2"),
|
|
array("id"=>"30","name"=>"Borrowing","type"=>"2"),
|
|
array("id"=>"31","name"=>"Business","type"=>"2"),
|
|
array("id"=>"32","name"=>"Consultancy","type"=>"2"),
|
|
array("id"=>"33","name"=>"Contract","type"=>"2"),
|
|
array("id"=>"34","name"=>"Lending Back","type"=>"2"),
|
|
array("id"=>"35","name"=>"Others","type"=>"2"),
|
|
array("id"=>"36","name"=>"Personal","type"=>"2"),
|
|
array("id"=>"37","name"=>"Rent","type"=>"2"),
|
|
array("id"=>"38","name"=>"Salary","type"=>"2"),
|
|
array("id"=>"39","name"=>"Stock Market/Divident","type"=>"2"),
|
|
array("id"=>"40","name"=>"Transport Business","type"=>"2")
|
|
|
|
);
|
|
|
|
return $category;
|
|
}
|
|
|
|
function index()
|
|
{
|
|
$this->layout="visitor";
|
|
|
|
$urlLArray = explode('/',$this->here);
|
|
|
|
$uniqueURL = end($urlLArray);
|
|
|
|
$expenseType = substr($uniqueURL, 0, 1);
|
|
|
|
$this->Session->write("current_unique_url",$uniqueURL);
|
|
|
|
$skipMobileOption= $this->Session->read("skip_mobile_option");
|
|
if($this->Session->check("skip_mobile_option")){
|
|
$this->Session->delete("skip_mobile_option");
|
|
}
|
|
|
|
$this->set('unique_url',$uniqueURL);
|
|
|
|
|
|
//if the request comes from mobile device then forward it to the mobile controller
|
|
$detect = new MobileDetectComponent();
|
|
if ($detect->isMobile() && $skipMobileOption != "yes" ) {
|
|
$this->redirect(array('controller'=> 'm','action'=>'/'));
|
|
exit;
|
|
} else {
|
|
if($expenseType == "1" || $expenseType == "2" || $expenseType == "3"){
|
|
$this->render('expense');
|
|
} else {
|
|
$this->render('expense_demo');
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function loadTab($uniqueURL)
|
|
{
|
|
$expenseType = "";
|
|
$this->layout="";
|
|
|
|
$just_created_new = false;
|
|
|
|
if ($this->Session->check('just_created')){
|
|
$this->set("justCreated",$this->Session->read('just_created'));
|
|
$this->Session->delete("just_created");
|
|
$just_created_new = true;
|
|
} else {
|
|
$this->set("justCreated","");
|
|
}
|
|
|
|
if(isset($uniqueURL) && $uniqueURL != ""){
|
|
$expenseType = trim(substr($uniqueURL, 0, 1));
|
|
|
|
if($expenseType == "1" || $expenseType == "2"){
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($uniqueURL);
|
|
} else if($expenseType == "3"){
|
|
$data = $this->Expense->getFamilyExpenseInfoByURL($uniqueURL);
|
|
if(!empty($data)){
|
|
$data["Category"] = $this->getCategories();
|
|
}
|
|
}
|
|
|
|
|
|
if (!$this->Session->check('Config.language')
|
|
&& !$this->Cookie->check('Config.expcount.language')) {
|
|
$this->Session->write("Config.language",$data["Expense"]["language"]);
|
|
$this->Cookie->write("Config.expcount.language",$data["Expense"]["language"]);
|
|
}
|
|
|
|
if(!empty($data)){
|
|
//insert data into the table access_infos
|
|
$accessInfoData["id"] = $data["Expense"]["id"];
|
|
$accessInfoData["unique_url"] = $data["Expense"]["unique_url"];
|
|
$accessInfoData["access_time"] = $this->getSystemCurrentTimeStamp();
|
|
|
|
$error = $this->AccessInfo->saveAccessInfo($accessInfoData);
|
|
|
|
//insert loading history
|
|
$loginHistory['expense_id'] = $accessInfoData["id"];
|
|
$loginHistory['unique_url'] = $accessInfoData["unique_url"];
|
|
$loginHistory['ip'] = $this->getClientIp();;
|
|
$loginHistory['user_agent'] = $this->getUserAgent();;
|
|
$loginHistory['create_date'] = $accessInfoData["access_time"];
|
|
|
|
$error = $this->LoadingHistory->insertLoadingHistory($loginHistory);
|
|
|
|
$this->set("expenseData",json_encode($data));
|
|
|
|
$this->set("expenseData",json_encode($data));
|
|
|
|
/* $loginHistory["expense_id"] = $data["Expense"]["id"];
|
|
|
|
$loginHistory["remote_ip"] = $_SERVER['REMOTE_ADDR'];
|
|
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
|
|
$loginHistory["forward_ip"] = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} else {
|
|
$loginHistory["forward_ip"] = "";
|
|
}
|
|
|
|
$loginHistory["country"] = "";//ip_info($loginHistory["remote_ip"], "Country Code");
|
|
|
|
//$userLocation = ip_info($loginHistory["remote_ip"], "Location");
|
|
$loginHistory["location"] = "";//$userLocation["city"].",".$userLocation["state"];
|
|
|
|
$loginHistory["is_login"] = "0";
|
|
$loginHistory["user_id"] = "";
|
|
$loginHistory["source"] = $_SERVER['HTTP_USER_AGENT']; */
|
|
}
|
|
}
|
|
$this->set("uniqueURL",$uniqueURL);
|
|
|
|
//set relevant view
|
|
if($expenseType == "1"){
|
|
$this->loadGroupExpense();
|
|
} else if($expenseType == "2") {
|
|
$this->loadMessExpense();
|
|
} else if($expenseType == "3") {
|
|
$this->loadFamilyExpense();
|
|
} else {
|
|
$this->loadNotFound();
|
|
}
|
|
|
|
if($just_created_new == true){
|
|
if ($this->Session->check('just_created_email')){
|
|
$data['Expense']["email"] = $this->Session->read('just_created_email');
|
|
$this->sendInstantEmail($data['Expense']);
|
|
}
|
|
}
|
|
}
|
|
|
|
function loadTabDemo($uniqueURL)
|
|
{
|
|
$this->layout="";
|
|
|
|
if ($this->Session->check('just_created')){
|
|
$this->set("justCreated",$this->Session->read('just_created'));
|
|
$this->Session->delete("just_created");
|
|
} else {
|
|
$this->set("justCreated","");
|
|
}
|
|
|
|
if(isset($uniqueURL) && $uniqueURL != ""){
|
|
|
|
$expenseType = substr($uniqueURL, 0, 1);
|
|
|
|
if($expenseType == "6" || $expenseType == "7"){
|
|
$demoData = $this->DemoExpense->getDemoGroupExpenseInfoByURL($uniqueURL);
|
|
|
|
$data["Expense"] = $demoData["DemoExpense"];
|
|
$data["Participant"] = $demoData["DemoParticipant"];
|
|
$data["GroupExpense"] = $demoData["DemoGroupExpense"];
|
|
|
|
if($expenseType == "7"){
|
|
$data["Meal"] = $demoData["DemoMeal"];
|
|
}
|
|
|
|
} else if($expenseType == "8"){
|
|
$demodata = $this->DemoExpense->getDemoFamilyExpenseInfoByURL($uniqueURL);
|
|
|
|
$data["Expense"] = $demodata["DemoExpense"];
|
|
$data["FamilyExpense"] = $demodata["DemoFamilyExpense"];
|
|
|
|
$data["Category"] = $this->getCategories();
|
|
}
|
|
|
|
if (!$this->Session->check('Config.language')
|
|
&& !$this->Cookie->check('Config.expcount.language')) {
|
|
$this->Session->write("Config.language",$data["Expense"]["language"]);
|
|
$this->Cookie->write("Config.expcount.language",$data["Expense"]["language"]);
|
|
}
|
|
|
|
if(!empty($data)){
|
|
|
|
|
|
$this->set("expenseData",json_encode($data));
|
|
|
|
$loginHistory["expense_id"] = $data["Expense"]["id"];
|
|
|
|
|
|
$loginHistory["remote_ip"] = $_SERVER['REMOTE_ADDR'];
|
|
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
|
|
$loginHistory["forward_ip"] = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
|
} else {
|
|
$loginHistory["forward_ip"] = "";
|
|
}
|
|
|
|
$loginHistory["country"] = "";//ip_info($loginHistory["remote_ip"], "Country Code");
|
|
|
|
//$userLocation = ip_info($loginHistory["remote_ip"], "Location");
|
|
$loginHistory["location"] = "";//$userLocation["city"].",".$userLocation["state"];
|
|
|
|
|
|
$loginHistory["is_login"] = "0";
|
|
$loginHistory["user_id"] = "";
|
|
$loginHistory["source"] = $_SERVER['HTTP_USER_AGENT'];
|
|
}
|
|
|
|
|
|
|
|
if($expenseType == "6"){
|
|
$this->loadGroupExpenseDemo();
|
|
} else if($expenseType == "7") {
|
|
$this->loadMessExpenseDemo();
|
|
} else if($expenseType == "8") {
|
|
$this->loadFamilyExpenseDemo();
|
|
} else {
|
|
$this->loadNotFound();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public function loadNotFound()
|
|
{
|
|
|
|
}
|
|
|
|
public function sendEmail(){
|
|
|
|
if($this->request->is('ajax')){
|
|
$data = array();
|
|
$data["email"] = $this->data["Expense"]["email"];
|
|
$data["expense_title"] = $this->data["Expense"]["emailExpenseTitle"];
|
|
$data["unique_url"] = $this->data["Expense"]["emailUniqueURL"];
|
|
$this->sendEmailMethod($data);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function sendMyExpenseEmail(){
|
|
|
|
if($this->request->is('ajax')){
|
|
$data = array();
|
|
$data["email"] = $this->data["email"];
|
|
$data["expense_title"] = $this->data["expense_title"];
|
|
$data["unique_url"] = $this->data["unique_url"];
|
|
$this->sendEmailMethod($data);
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function sendInstantEmail($value)
|
|
{
|
|
$emailData = array();
|
|
$emailData["expense_title"] = $value["title"];
|
|
$emailData["unique_url"] = $value["unique_url"];
|
|
$emailData["email"] = $value["email"];
|
|
|
|
//send email
|
|
$this->sendEmailMethod($emailData);
|
|
|
|
//insert into ExpenseEmail
|
|
$inputData = array();
|
|
$inputData["unique_url"] = $value["unique_url"];
|
|
$inputData["email"] = $value["email"];
|
|
$inputData["title"] = $value["title"];
|
|
$inputData["count_email_attempt"] = 1;
|
|
$this->loadModel('ExpenseEmail');
|
|
$this->ExpenseEmail->insertExpenseEmail($inputData);
|
|
}
|
|
|
|
public function sendEmailMethod($data)
|
|
{
|
|
//insert record into the table email_histories
|
|
$emailHistory['unique_url'] = $data["unique_url"];
|
|
$emailHistory['sent_to'] = $data["email"];
|
|
$emailHistory['ip'] = $this->getClientIp();
|
|
$emailHistory['create_date'] = $this->getSystemCurrentTimeStamp();
|
|
|
|
$error = $this->EmailHistory->insertEmailHistory($emailHistory);
|
|
|
|
$default = array(
|
|
'host' => Configure::read('expensecount.email.smtp.host'),
|
|
'port' => 25,
|
|
'auth' => 'plain',
|
|
'username' => Configure::read('expensecount.email.smtp.username'),
|
|
'password' => Configure::read('expensecount.email.smtp.password'),
|
|
'tsl' => false,
|
|
'transport' => 'smtp',
|
|
'from' => array(Configure::read('expensecount.email.smtp.from') => 'ExpenseCount'),
|
|
'returnPath' => Configure::read('expensecount.email.smtp.from'),
|
|
'layout' => false,
|
|
'emailFormat' => 'html',
|
|
//'template' => 'only_text',
|
|
'charset' => 'utf-8',
|
|
'headerCharset' => 'utf-8',
|
|
);
|
|
|
|
App::uses('CakeEmail', 'Network/Email');
|
|
|
|
//echo $Email->
|
|
$Email = new CakeEmail();
|
|
$Email->to($data["email"]);
|
|
$Email->emailFormat('html');
|
|
$Email->template('email',null)->viewVars( array('data' => $data));
|
|
$Email->subject('ExpenseCount "'.$data["expense_title"].'" ');
|
|
$Email->replyTo(Configure::read('expensecount.email.smtp.from'));
|
|
$Email->from(array(Configure::read('expensecount.email.smtp.from') => "ExpenseCount.com"));
|
|
$Email->smtpOptions = $default;
|
|
$Email->delivery = 'smtp';
|
|
try {
|
|
$Email->send();
|
|
} catch (Exception $e) {
|
|
|
|
}
|
|
}
|
|
|
|
public function sendHtmlEmail($dest=null, $aMsg=null)
|
|
{
|
|
$Email = new CakeEmail('gmail');
|
|
$Email->to($dest);
|
|
$Email->emailFormat('html');
|
|
$Email->template('email')->viewVars( array('aMsg' => $aMsg));
|
|
$Email->subject('Email from ExpenseCount');
|
|
$Email->replyTo('admin@expensecount.com');
|
|
$Email->from ('admin@gmail.com');
|
|
|
|
return ;
|
|
}
|
|
|
|
public function changeGroupExpense(){
|
|
|
|
if($this->request->is('ajax')){
|
|
|
|
$data = array();
|
|
$option = $this->data["isAdd"];
|
|
|
|
if(isset($this->data["expenseType"])){
|
|
$data["expense_type"] = $this->data["expenseType"];
|
|
}
|
|
|
|
if($option == "1" || $option == "2" || $option == "3"){
|
|
|
|
$data["id"] = $this->data["id"];
|
|
|
|
$data["expense_id"] = $this->data["expenseId"];
|
|
$data["what"] = $this->data["expenseName"];
|
|
$data["expense_date"] = $this->data["expenseDate"];
|
|
$data["amount"] = $this->data["amount"];
|
|
$data["paid_by_participant_id"] = $this->data["paidBy"];
|
|
|
|
$data["participant_amount"] = $this->data["participantAmountStr"];
|
|
$data["isDetails"] = $this->data["isDetails"];
|
|
$data["isAdd"] = $this->data["isAdd"];
|
|
$data["type"] = $this->data["type"];
|
|
|
|
|
|
if($data["isAdd"] == "1"){
|
|
$data["is_reimbursement"] = $this->data["isreimburse"];
|
|
|
|
$data["expense_date_old"] = $this->getStrToIntDate($data["expense_date"]);
|
|
|
|
$message = $this->GroupExpense->addGroupExpense($data);
|
|
|
|
} else if($data["isAdd"] == "2") {
|
|
$data["is_reimbursement"] = $this->data["isreimburse"];
|
|
$data["previous_desc"] = $this->data["previousDesc"];
|
|
$data["new_desc"] = $this->data["newDesc"];
|
|
$data["previous_paid_by"] = $this->data["previousPaidBy"];
|
|
$data["expense_date_old"] = $this->getStrToIntDate($data["expense_date"]);
|
|
$message = $this->GroupExpense->modifyGroupExpense($data);
|
|
} else if($data["isAdd"] == "3") {
|
|
$data["previous_desc"] = $this->data["previousDesc"];
|
|
$data["new_desc"] = $this->data["newDesc"];
|
|
$data["previous_paid_by"] = $this->data["previousPaidBy"];
|
|
$message = $this->GroupExpense->deleteGroupExpense($data);
|
|
} else if($data["isAdd"] == "4"){
|
|
$uniqueURL = $this->data["expenseId"];
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($uniqueURL);
|
|
}
|
|
} else if($option == "5" || $option == "6" || $option == "7"){
|
|
|
|
$data["id"] = $this->data["id"];
|
|
$data["expense_id"] = $this->data["expenseId"];
|
|
$data["date"] = $this->data["date"];
|
|
$data["isAdd"] = $this->data["isAdd"];
|
|
$data["meal_amount"] = $this->data["participantMealStr"];
|
|
|
|
if($data["isAdd"] == "5"){
|
|
$data["date_old"] = $this->getStrToIntDate($data["date"]);
|
|
$message = $this->Meal->addMeal($data);
|
|
|
|
} else if($data["isAdd"] == "6") {
|
|
$data["old_date"] = $this->data["oldDate"];
|
|
$data["date_old"] = $this->getStrToIntDate($data["date"]);
|
|
$message = $this->Meal->modifyMeal($data);
|
|
} else if($data["isAdd"] == "7") {
|
|
$message = $this->Meal->deleteMeal($data);
|
|
} else if($data["isAdd"] == "4"){
|
|
$uniqueURL = $this->data["expenseId"];
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($uniqueURL);
|
|
}
|
|
} else if($option == "8" || $option == "9" || $option == "10" ){
|
|
|
|
$data["id"] = $this->data["id"];
|
|
|
|
$data["expense_id"] = $this->data["expenseId"];
|
|
$data["record_type"] = $this->data["recordType"];
|
|
$data["what"] = $this->data["expenseName"];
|
|
$data["category"] = $this->data["expenseCategory"];
|
|
$data["expense_date"] = $this->data["expenseDate"];
|
|
$data["amount"] = $this->data["amount"];
|
|
|
|
|
|
$data["isAdd"] = $this->data["isAdd"];
|
|
$data["type"] = $this->data["type"];
|
|
|
|
|
|
if($data["isAdd"] == "8"){
|
|
$data["expense_date_old"] = $this->getStrToIntDate($data["expense_date"]);
|
|
$message = $this->FamilyExpense->addFamilyExpense($data);
|
|
} else if($data["isAdd"] == "9"){
|
|
$data["expense_date_old"] = $this->getStrToIntDate($data["expense_date"]);
|
|
$message = $this->FamilyExpense->modifyFamilyExpense($data);
|
|
} else if($data["isAdd"] == "10"){
|
|
$message = $this->FamilyExpense->deleteFamilyExpense($data);
|
|
}
|
|
}
|
|
|
|
|
|
if(empty($message)){
|
|
echo Configure::read('expensecount.form.validation.success');
|
|
} else {
|
|
$errorMsg = "";
|
|
foreach($message as $key=>$value){
|
|
$errorMsg .= $key.Configure::read('expensecount.form.validation.pipe').$value.Configure::read('expensecount.form.validation.separator');
|
|
}
|
|
echo $errorMsg;
|
|
}
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
public function displayLog(){
|
|
|
|
if($this->request->is('ajax')){
|
|
|
|
$data = array();
|
|
$data["expense_id"] = $this->data["Expense"]["logExpenseId"];
|
|
$data["fromDate"] = $this->data["Expense"]["fromDate"];
|
|
$data["toDate"] = $this->data["Expense"]["toDate"];
|
|
// $data["expense_id"] = 14;
|
|
$dbData = $this->GroupExpense->getGroupExpenseLog($data);
|
|
|
|
echo json_encode($dbData);
|
|
|
|
}
|
|
exit;
|
|
}
|
|
|
|
function changeParticipant(){
|
|
|
|
if($this->request->is('ajax')){
|
|
|
|
$data = array();
|
|
$data["id"] = $this->data["id"];
|
|
$data["expense_id"] = $this->data["expense_id"];
|
|
$data["name"] = $this->data["name"];
|
|
$data["isAdd"] = $this->data["isAdd"];
|
|
|
|
/* $fp = fopen("Test.txt","a+");
|
|
fwrite($fp,mb_strlen($data["name"], 'UTF-8'));exit; */
|
|
|
|
|
|
if($data["isAdd"] == "1"){
|
|
|
|
$message = $this->Participant->addParticipant($data);
|
|
|
|
} else if($data["isAdd"] == "2") {
|
|
|
|
$message = $this->Participant->modifyParticipant($data);
|
|
} else if($data["isAdd"] == "3") {
|
|
$message = $this->Participant->deleteParticpant($data);
|
|
}
|
|
|
|
if(empty($message)){
|
|
echo Configure::read('expensecount.form.validation.success');
|
|
} else {
|
|
$errorMsg = "";
|
|
foreach($message as $key=>$value){
|
|
$errorMsg .= $key.Configure::read('expensecount.form.validation.pipe').$value.Configure::read('expensecount.form.validation.separator');
|
|
}
|
|
|
|
echo $errorMsg;
|
|
}
|
|
|
|
exit;
|
|
}
|
|
exit;
|
|
}
|
|
|
|
function loadGroupExpense()
|
|
{
|
|
$this->render('group_expenses');
|
|
}
|
|
|
|
function loadMessExpense()
|
|
{
|
|
$this->render('mess_expenses');
|
|
}
|
|
|
|
function loadFamilyExpense()
|
|
{
|
|
$this->render('family_expenses');
|
|
}
|
|
|
|
function loadGroupExpenseDemo()
|
|
{
|
|
$this->render('group_expenses_demo');
|
|
}
|
|
|
|
function loadMessExpenseDemo()
|
|
{
|
|
$this->render('mess_expenses_demo');
|
|
}
|
|
|
|
function loadFamilyExpenseDemo()
|
|
{
|
|
$this->render('family_expenses_demo');
|
|
}
|
|
|
|
function compareOrder($a, $b)
|
|
{
|
|
return $a['expenseDate'] - $b['expenseDate'];
|
|
}
|
|
function printExpense(){
|
|
$expenseArray = json_decode($this->data["Expense"]["printExpense"],true);
|
|
// pr($this->data);die;
|
|
$current_perticipants = (isset($this->data["Expense"]["current_perticipants"])) ? $this->data["Expense"]["current_perticipants"] :'';
|
|
$this->set("requestData",$this->data);
|
|
$this->set("current_perticipants",$current_perticipants);
|
|
if(!isset($expenseArray) || empty($expenseArray)){
|
|
if ($this->Session->check('cache_page_link')){
|
|
$cache_page_link = $this->Session->write("cache_page_link");
|
|
$this->Session->delete("cache_page_link");
|
|
$this->redirect(array('controller'=> $cache_page_link));
|
|
} else {
|
|
$this->redirect(array('controller'=> ""));
|
|
}
|
|
} else {
|
|
$this->Session->write("cache_page_link",$expenseArray["unique_url"]);
|
|
}
|
|
|
|
$expenseType = substr($expenseArray["unique_url"], 0, 1);
|
|
|
|
|
|
$expenseList = json_decode($this->data["Expense"]["printExpenseList"],true);
|
|
$this->set("expenseList",$expenseList);
|
|
// pr($expenseList);
|
|
$this->set("expense",$expenseArray);
|
|
|
|
$printNames = json_decode($this->data["Expense"]["printNames"],true);
|
|
|
|
$printNamesArray = explode(",",$printNames);
|
|
|
|
|
|
|
|
$this->layout = 'print';
|
|
// $this->Session->read("Config.language");
|
|
|
|
if($expenseType == "1" || $expenseType == "6" || $expenseType == "2" || $expenseType == "7"){
|
|
|
|
// echo $this->data["Expense"]["printBalance"];exit;
|
|
|
|
/*if($expenseType == "1" || $expenseType == "2"){
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($expenseArray["unique_url"]);
|
|
} else if($expenseType == "6" || $expenseType == "7"){
|
|
$demoData = $this->DemoExpense->getDemoGroupExpenseInfoByURL($expenseArray["unique_url"]);
|
|
$data['Participant'] = $demoData['DemoParticipant'];
|
|
$data['GroupExpense'] = $demoData['DemoGroupExpense'];
|
|
$data['Expense'] = $demoData['DemoExpense'];
|
|
unset($demoData['DemoParticipant']);
|
|
unset($demoData['DemoGroupExpense']);
|
|
unset($demoData['DemoExpense']);
|
|
|
|
}
|
|
// pr($data['GroupExpense']);
|
|
|
|
if(!empty($data['Participant'])){
|
|
foreach ($data['Participant'] as $key => $perticipant) {
|
|
unset($data['Participant'][$key]);
|
|
$data['Participant'][$perticipant['participant_id']] = $perticipant;
|
|
$data['Participant'][$perticipant['participant_id']]['total_charge'] = 0;
|
|
$data['Participant'][$perticipant['participant_id']]['total_paid'] = 0;
|
|
$data['Participant'][$perticipant['participant_id']]['currency'] = $data['Expense']['currency'];
|
|
|
|
$perticipants[$perticipant['participant_id']] = $perticipant['name'];
|
|
}
|
|
}
|
|
$this->set("perticipants",$perticipants);
|
|
if(!empty($data['GroupExpense'])){ $expCounter = 1;
|
|
foreach ($data['GroupExpense'] as $keya => $groupExpense) {
|
|
$aa = array();
|
|
$aa = explode(',', $groupExpense['participant_amount']);
|
|
foreach ($aa as $keyb => $vala) {
|
|
$bb = array();
|
|
$bb = explode('|', $vala);
|
|
$data['Participant'][$bb[0]]['total_charge'] += $bb[2];
|
|
}
|
|
$data['Participant'][$groupExpense['paid_by_participant_id']]['total_paid'] += $groupExpense['amount'];
|
|
|
|
$data['GroupExpense'][$keya]['involve_list'] = $this->getInvolves($data, $groupExpense['participant_amount']);
|
|
|
|
foreach ($data['Participant'] as $participant) {
|
|
if ($participant['participant_id'] == $groupExpense['paid_by_participant_id']) {
|
|
$data['GroupExpense'][$keya]['participent_name'] = $participant['name'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if($current_perticipants != ''){
|
|
$tempGroupExpense = $data['GroupExpense'];
|
|
if(!empty($tempGroupExpense)){
|
|
foreach ($tempGroupExpense as $keya => $groupExpense) {
|
|
if( $groupExpense['paid_by_participant_id'] == $current_perticipants || strpos($groupExpense['participant_amount'], $current_perticipants.'|') !== false ) {
|
|
// echo 'Yes';
|
|
} elseif($current_perticipants != '') {
|
|
unset($data['GroupExpense'][$keya]);
|
|
// echo 'NO';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->set("allGroupExpense",$data['GroupExpense']);
|
|
$this->set("allParticipant",$data['Participant']);
|
|
$pieDataFinal = array();
|
|
if($data['Participant']){ $counter = 0;
|
|
foreach ($data['Participant'] as $key => $val) {
|
|
// if( (($current_perticipants != '') && ($val['participant_id'] == $current_perticipants)) || ($current_perticipants == '') ) {
|
|
$pieDataFinal[$counter]['name'] = $val['name'];
|
|
$pieDataFinal[$counter]['y'] = $val['total_charge'];
|
|
$counter++;
|
|
// }
|
|
}
|
|
}
|
|
$this->set("pieChartDataFinal",json_encode($pieDataFinal));*/
|
|
|
|
|
|
$this->set("printedBy",$printNamesArray[0]);
|
|
$this->set("createdBy",$printNamesArray[1]);
|
|
$this->set("createdDate",$printNamesArray[2]);
|
|
|
|
$balanceArray = explode(",",json_decode($this->data["Expense"]["printBalance"],true));
|
|
|
|
$this->set("balanceArray",$balanceArray);
|
|
|
|
} else if($expenseType == "3" || $expenseType == "8"){
|
|
$this->set("createdDate",$printNamesArray[0]);
|
|
$this->set("totalIncome",$printNamesArray[1]);
|
|
$this->set("totalExpense",$printNamesArray[2]);
|
|
$this->set("balance",$printNamesArray[3]);
|
|
}
|
|
|
|
if($expenseType == "1" || $expenseType == "6"){
|
|
$this->render('print');
|
|
} else if($expenseType == "2" || $expenseType == "7"){
|
|
$parintOption = json_decode($this->data["Expense"]["printOption"],true);
|
|
|
|
if($parintOption == "2" ){
|
|
$this->render('meal');
|
|
} else if($parintOption == "3" ){
|
|
$this->render('my_meal');
|
|
}else {
|
|
$this->render('print_mess');
|
|
}
|
|
} else if($expenseType == "3" || $expenseType == "8"){
|
|
$incomeList = json_decode($this->data["Expense"]["printIncomeList"],true);
|
|
$this->set("incomeList",$incomeList);
|
|
if($expenseType == "3") {
|
|
$data = $this->Expense->getFamilyExpenseInfoByURL($expenseArray["unique_url"]);
|
|
|
|
if(!empty($data)){
|
|
$fcounter = 0;
|
|
$temp_total_income = 0;
|
|
$temp_total_expense = 0;
|
|
$total_income_str = '';
|
|
$total_balance_str = '';
|
|
$total_expense_str = '';
|
|
foreach ($data['FamilyExpense'] as $key => $familyExpense) {
|
|
if(!isset($newData[$fcounter]['total_income'])){
|
|
$newData[$fcounter]['total_income'] = 0;
|
|
}
|
|
if(!isset($newData[$fcounter]['total_expense'])){
|
|
$newData[$fcounter]['total_expense'] = 0;
|
|
}
|
|
$newData[$fcounter]['expense_date'] = $familyExpense['expense_date'];
|
|
|
|
if($familyExpense['record_type'] == 1)
|
|
{
|
|
$temp_total_expense += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['income'] = 0;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
}
|
|
elseif($familyExpense['record_type'] == 2)
|
|
{
|
|
$temp_total_income += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = 0;
|
|
$newData[$fcounter]['income'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
}
|
|
|
|
$newData[$fcounter]['balance'] = $temp_total_income - $temp_total_expense;
|
|
|
|
$newData[$fcounter]['record_type'] = $familyExpense['record_type'];
|
|
$total_income_str[] = $newData[$fcounter]['total_income'];
|
|
$total_expense_str[] = $newData[$fcounter]['total_expense'];
|
|
$total_balance_str[] = $newData[$fcounter]['balance'];
|
|
$fcounter++;
|
|
}
|
|
}
|
|
$total_income_str = implode(',', $total_income_str);
|
|
$total_expense_str = implode(',', $total_expense_str);
|
|
$total_balance_str = implode(',', $total_balance_str);
|
|
$this->set('total_income_str', $total_income_str);
|
|
$this->set('total_expense_str', $total_expense_str);
|
|
$this->set('total_balance_str', $total_balance_str);
|
|
}
|
|
$this->render('print_family');
|
|
}
|
|
|
|
}
|
|
|
|
public function printReport($uniqueURL=null)
|
|
{
|
|
$this->layout = 'print';
|
|
if(isset($uniqueURL) && $uniqueURL != "" && $this->request->is('get')){
|
|
|
|
$expenseType = trim(substr($uniqueURL, 0, 1));
|
|
|
|
if ($expenseType == "1" || $expenseType == "2") {
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($uniqueURL);
|
|
|
|
// added by Bijoy
|
|
$current_perticipants = '';
|
|
if(!empty($data['Participant'])){
|
|
foreach ($data['Participant'] as $key => $perticipant) {
|
|
// unset($data['Participant'][$key]);
|
|
$newdata['Participant'][$perticipant['participant_id']] = $perticipant;
|
|
$newdata['Participant'][$perticipant['participant_id']]['total_charge'] = 0;
|
|
$newdata['Participant'][$perticipant['participant_id']]['total_paid'] = 0;
|
|
$newdata['Participant'][$perticipant['participant_id']]['currency'] = $data['Expense']['currency'];
|
|
|
|
$perticipants[$perticipant['participant_id']] = $perticipant['name'];
|
|
}
|
|
}
|
|
$this->set("perticipants",$perticipants);
|
|
|
|
if ($expenseType == "1" ) {
|
|
if(!empty($data['GroupExpense'])){ $expCounter = 1;
|
|
foreach ($data['GroupExpense'] as $keya => $groupExpense) {
|
|
$aa = array();
|
|
$aa = explode(',', $groupExpense['participant_amount']);
|
|
foreach ($aa as $keyb => $vala) {
|
|
$bb = array();
|
|
$bb = explode('|', $vala);
|
|
$newdata['Participant'][$bb[0]]['total_charge'] += $bb[2];
|
|
}
|
|
$newdata['Participant'][$groupExpense['paid_by_participant_id']]['total_paid'] += $groupExpense['amount'];
|
|
|
|
$data['GroupExpense'][$keya]['involve_list'] = $this->getInvolves($data, $groupExpense['participant_amount']);
|
|
|
|
foreach ($newdata['Participant'] as $participant) {
|
|
if ($participant['participant_id'] == $groupExpense['paid_by_participant_id']) {
|
|
$data['GroupExpense'][$keya]['participent_name'] = $participant['name'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if($current_perticipants != ''){
|
|
$tempGroupExpense = $data['GroupExpense'];
|
|
if(!empty($tempGroupExpense)){
|
|
foreach ($tempGroupExpense as $keya => $groupExpense) {
|
|
if( $groupExpense['paid_by_participant_id'] == $current_perticipants || strpos($groupExpense['participant_amount'], $current_perticipants.'|') !== false ) {
|
|
// echo 'Yes';
|
|
} elseif($current_perticipants != '') {
|
|
unset($data['GroupExpense'][$keya]);
|
|
// echo 'NO';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($expenseType == "2" ) {
|
|
if(!empty($data['GroupExpense'])){ $total_expense = 0;
|
|
foreach ($data['GroupExpense'] as $keya => $groupExpense) {
|
|
$total_expense = $total_expense + $groupExpense["amount"];
|
|
$newdata['Participant'][$groupExpense['paid_by_participant_id']]['total_paid'] += $groupExpense['amount'];
|
|
}
|
|
}
|
|
|
|
|
|
$total_meal = 0; $tempParticipantMeal = array();
|
|
foreach ($data['Meal'] as $value) {
|
|
$meal_participants = explode(',', $value['meal_amount']);
|
|
foreach ($meal_participants as $meal_participant) {
|
|
$meal_amounts = explode('|', $meal_participant);
|
|
if(!isset($tempParticipantMeal[$meal_amounts[0]]['meal'])){
|
|
$tempParticipantMeal[$meal_amounts[0]]['meal'] = 0;
|
|
}
|
|
$tempParticipantMeal[$meal_amounts[0]]['meal'] += $meal_amounts[1] + $meal_amounts[2] + $meal_amounts[3];
|
|
$total_meal += $meal_amounts[1] + $meal_amounts[2] + $meal_amounts[3];
|
|
}
|
|
}
|
|
if(!empty($newdata['Participant'])){
|
|
if($total_meal != 0)
|
|
$meal_rate = $total_expense / $total_meal;
|
|
foreach ($newdata['Participant'] as $key => $value) {
|
|
$newdata['Participant'][$key]["total_charge"] = $tempParticipantMeal[$key]['meal'] * $meal_rate;
|
|
}
|
|
}
|
|
}
|
|
$this->set("current_perticipants",$current_perticipants);
|
|
$this->set("allGroupExpense",$data['GroupExpense']);
|
|
$this->set("allParticipant",$newdata['Participant']);
|
|
|
|
$pieDataFinal = array();
|
|
if($newdata['Participant']){ $counter = 0;
|
|
foreach ($newdata['Participant'] as $key => $val) {
|
|
// if( (($current_perticipants != '') && ($val['participant_id'] == $current_perticipants)) || ($current_perticipants == '') ) {
|
|
$pieDataFinal[$counter]['name'] = $val['name'];
|
|
$pieDataFinal[$counter]['y'] = $val['total_charge'];
|
|
$counter++;
|
|
// }
|
|
}
|
|
}
|
|
$this->set("pieChartDataFinal",json_encode($pieDataFinal));
|
|
|
|
} elseif($expenseType == "3") {
|
|
$current_perticipants = '';
|
|
$data = $this->Expense->getFamilyExpenseInfoByURL($uniqueURL);
|
|
if(!empty($data)){
|
|
$data["Category"] = $this->getCategories();
|
|
}
|
|
$total_family_income = 0;
|
|
$total_family_expense = 0;
|
|
if(!empty($data['FamilyExpense']) && isset($data['FamilyExpense'])){
|
|
foreach ($data['FamilyExpense'] as $family_expense) {
|
|
if($family_expense['record_type'] == 1){
|
|
$total_family_expense = $total_family_expense + $family_expense['amount'];
|
|
} elseif ($family_expense['record_type'] == 2) {
|
|
$total_family_income = $total_family_income + $family_expense['amount'];
|
|
}
|
|
}
|
|
}
|
|
$this->set('total_family_income', $total_family_income);
|
|
$this->set('total_family_expense', $total_family_expense);
|
|
$this->set('data', $data);
|
|
|
|
|
|
if(!empty($data)){
|
|
$fcounter = 0;
|
|
$temp_total_income = 0;
|
|
$temp_total_expense = 0;
|
|
$total_income_str = '';
|
|
$total_balance_str = '';
|
|
$total_expense_str = '';
|
|
foreach ($data['FamilyExpense'] as $key => $familyExpense) {
|
|
if(!isset($newData[$fcounter]['total_income'])){
|
|
$newData[$fcounter]['total_income'] = 0;
|
|
}
|
|
if(!isset($newData[$fcounter]['total_expense'])){
|
|
$newData[$fcounter]['total_expense'] = 0;
|
|
}
|
|
$newData[$fcounter]['expense_date'] = $familyExpense['expense_date'];
|
|
|
|
if($familyExpense['record_type'] == 1)
|
|
{
|
|
$temp_total_expense += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['income'] = 0;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
}
|
|
elseif($familyExpense['record_type'] == 2)
|
|
{
|
|
$temp_total_income += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = 0;
|
|
$newData[$fcounter]['income'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
}
|
|
|
|
$newData[$fcounter]['balance'] = $temp_total_income - $temp_total_expense;
|
|
|
|
$newData[$fcounter]['record_type'] = $familyExpense['record_type'];
|
|
$total_income_str[] = $newData[$fcounter]['total_income'];
|
|
$total_expense_str[] = $newData[$fcounter]['total_expense'];
|
|
$total_balance_str[] = $newData[$fcounter]['balance'];
|
|
$fcounter++;
|
|
}
|
|
}
|
|
// pr($newData);
|
|
$total_income_str = implode(',', $total_income_str);
|
|
$total_expense_str = implode(',', $total_expense_str);
|
|
$total_balance_str = implode(',', $total_balance_str);
|
|
$this->set('total_income_str', $total_income_str);
|
|
$this->set('total_expense_str', $total_expense_str);
|
|
$this->set('total_balance_str', $total_balance_str);
|
|
$this->set("current_perticipants",$current_perticipants);
|
|
|
|
|
|
$this->render('print_family_report');
|
|
}
|
|
|
|
if(!empty($data['GroupExpense']) && isset($data['GroupExpense'])) {
|
|
foreach ($data['GroupExpense'] as $key => $groupExpense) {
|
|
$data['GroupExpense'][$key]['involve_list'] = $this->getInvolves($data, $groupExpense['participant_amount']);
|
|
|
|
foreach ($data['Participant'] as $participant) {
|
|
if ($participant['participant_id'] == $groupExpense['paid_by_participant_id']) {
|
|
$data['GroupExpense'][$key]['participent_name'] = $participant['name'];
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($data)){
|
|
$this->set('data', $data);
|
|
/*echo "<pre>";
|
|
// print_r($data);exit;*/
|
|
|
|
}
|
|
} elseif($this->request->is('Post')) {
|
|
|
|
$uniqueURL = $this->request->data('unique_url');
|
|
$expenseType = trim(substr($uniqueURL, 0, 1));
|
|
|
|
if ($expenseType == "1" || $expenseType == "2") {
|
|
$data = $this->Expense->getGroupExpenseInfoByURL($uniqueURL);
|
|
|
|
// added by Bijoy
|
|
if(isset($this->request->data['participant_id']) && !empty($this->request->data('participant_id'))){
|
|
$current_perticipants = $this->request->data('participant_id');
|
|
} else {
|
|
$current_perticipants = '';
|
|
}
|
|
if(!empty($data['Participant'])){
|
|
foreach ($data['Participant'] as $key => $perticipant) {
|
|
// unset($data['Participant'][$key]);
|
|
$newdata['Participant'][$perticipant['participant_id']] = $perticipant;
|
|
$newdata['Participant'][$perticipant['participant_id']]['total_charge'] = 0;
|
|
$newdata['Participant'][$perticipant['participant_id']]['total_paid'] = 0;
|
|
$newdata['Participant'][$perticipant['participant_id']]['currency'] = $data['Expense']['currency'];
|
|
|
|
$perticipants[$perticipant['participant_id']] = $perticipant['name'];
|
|
}
|
|
}
|
|
$this->set("perticipants",$perticipants);
|
|
|
|
if ($expenseType == "1" ) {
|
|
if(!empty($data['GroupExpense'])){ $expCounter = 1;
|
|
foreach ($data['GroupExpense'] as $keya => $groupExpense) {
|
|
$aa = array();
|
|
$aa = explode(',', $groupExpense['participant_amount']);
|
|
foreach ($aa as $keyb => $vala) {
|
|
$bb = array();
|
|
$bb = explode('|', $vala);
|
|
$newdata['Participant'][$bb[0]]['total_charge'] += $bb[2];
|
|
}
|
|
$newdata['Participant'][$groupExpense['paid_by_participant_id']]['total_paid'] += $groupExpense['amount'];
|
|
|
|
$data['GroupExpense'][$keya]['involve_list'] = $this->getInvolves($data, $groupExpense['participant_amount']);
|
|
|
|
foreach ($newdata['Participant'] as $participant) {
|
|
if ($participant['participant_id'] == $groupExpense['paid_by_participant_id']) {
|
|
$data['GroupExpense'][$keya]['participent_name'] = $participant['name'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if($current_perticipants != ''){
|
|
$tempGroupExpense = $data['GroupExpense'];
|
|
if(!empty($tempGroupExpense)){
|
|
foreach ($tempGroupExpense as $keya => $groupExpense) {
|
|
if( $groupExpense['paid_by_participant_id'] == $current_perticipants || strpos($groupExpense['participant_amount'], $current_perticipants.'|') !== false ) {
|
|
// echo 'Yes';
|
|
} elseif($current_perticipants != '') {
|
|
unset($data['GroupExpense'][$keya]);
|
|
// echo 'NO';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($expenseType == "2" ) {
|
|
if(!empty($data['GroupExpense'])){ $total_expense = 0;
|
|
foreach ($data['GroupExpense'] as $keya => $groupExpense) {
|
|
$total_expense = $total_expense + $groupExpense["amount"];
|
|
$newdata['Participant'][$groupExpense['paid_by_participant_id']]['total_paid'] += $groupExpense['amount'];
|
|
}
|
|
}
|
|
|
|
|
|
$total_meal = 0; $tempParticipantMeal = array();
|
|
foreach ($data['Meal'] as $value) {
|
|
$meal_participants = explode(',', $value['meal_amount']);
|
|
foreach ($meal_participants as $meal_participant) {
|
|
$meal_amounts = explode('|', $meal_participant);
|
|
if(!isset($tempParticipantMeal[$meal_amounts[0]]['meal'])){
|
|
$tempParticipantMeal[$meal_amounts[0]]['meal'] = 0;
|
|
}
|
|
$tempParticipantMeal[$meal_amounts[0]]['meal'] += $meal_amounts[1] + $meal_amounts[2] + $meal_amounts[3];
|
|
$total_meal += $meal_amounts[1] + $meal_amounts[2] + $meal_amounts[3];
|
|
}
|
|
}
|
|
if(!empty($newdata['Participant'])){
|
|
if($total_meal != 0)
|
|
$meal_rate = $total_expense / $total_meal;
|
|
foreach ($newdata['Participant'] as $key => $value) {
|
|
$newdata['Participant'][$key]["total_charge"] = $tempParticipantMeal[$key]['meal'] * $meal_rate;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->set("current_perticipants",$current_perticipants);
|
|
$this->set("allGroupExpense",$data['GroupExpense']);
|
|
$this->set("allParticipant",$newdata['Participant']);
|
|
$pieDataFinal = array();
|
|
if($newdata['Participant']){ $counter = 0;
|
|
foreach ($newdata['Participant'] as $key => $val) {
|
|
// if( (($current_perticipants != '') && ($val['participant_id'] == $current_perticipants)) || ($current_perticipants == '') ) {
|
|
$pieDataFinal[$counter]['name'] = $val['name'];
|
|
$pieDataFinal[$counter]['y'] = $val['total_charge'];
|
|
$counter++;
|
|
// }
|
|
}
|
|
}
|
|
$this->set("pieChartDataFinal",json_encode($pieDataFinal));
|
|
|
|
} elseif($expenseType == "3") {
|
|
// added by Bijoy
|
|
// pr($this->request->data);
|
|
if(isset($this->request->data['current_perticipants']) && !empty($this->request->data['current_perticipants'])){
|
|
$current_perticipants = $this->request->data['current_perticipants'];
|
|
} else {
|
|
$current_perticipants = '';
|
|
}
|
|
$data = $this->Expense->getFamilyExpenseInfoByURL($uniqueURL);
|
|
if(!empty($data)){
|
|
$data["Category"] = $this->getCategories();
|
|
}
|
|
$total_family_income = 0;
|
|
$total_family_expense = 0;
|
|
if(!empty($data['FamilyExpense']) && isset($data['FamilyExpense'])){
|
|
foreach ($data['FamilyExpense'] as $family_expense) {
|
|
if($family_expense['record_type'] == 1){
|
|
$total_family_expense = $total_family_expense + $family_expense['amount'];
|
|
} elseif ($family_expense['record_type'] == 2) {
|
|
$total_family_income = $total_family_income + $family_expense['amount'];
|
|
}
|
|
}
|
|
}
|
|
$this->set('total_family_income', $total_family_income);
|
|
$this->set('total_family_expense', $total_family_expense);
|
|
$this->set('data', $data);
|
|
|
|
|
|
if(!empty($data)){
|
|
$fcounter = 0;
|
|
$temp_total_income = 0;
|
|
$temp_total_expense = 0;
|
|
$total_income_str = '';
|
|
$total_balance_str = '';
|
|
$total_expense_str = '';
|
|
foreach ($data['FamilyExpense'] as $key => $familyExpense) {
|
|
if(!isset($newData[$fcounter]['total_income'])){
|
|
$newData[$fcounter]['total_income'] = 0;
|
|
}
|
|
if(!isset($newData[$fcounter]['total_expense'])){
|
|
$newData[$fcounter]['total_expense'] = 0;
|
|
}
|
|
$newData[$fcounter]['expense_date'] = $familyExpense['expense_date'];
|
|
|
|
if($familyExpense['record_type'] == 1)
|
|
{
|
|
$temp_total_expense += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['income'] = 0;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
}
|
|
elseif($familyExpense['record_type'] == 2)
|
|
{
|
|
$temp_total_income += $familyExpense['amount'];
|
|
$newData[$fcounter]['expense'] = 0;
|
|
$newData[$fcounter]['income'] = $familyExpense['amount'];
|
|
$newData[$fcounter]['total_income'] = $temp_total_income;
|
|
$newData[$fcounter]['total_expense'] = $temp_total_expense;
|
|
}
|
|
|
|
$newData[$fcounter]['balance'] = $temp_total_income - $temp_total_expense;
|
|
|
|
$newData[$fcounter]['record_type'] = $familyExpense['record_type'];
|
|
$total_income_str[] = $newData[$fcounter]['total_income'];
|
|
$total_expense_str[] = $newData[$fcounter]['total_expense'];
|
|
$total_balance_str[] = $newData[$fcounter]['balance'];
|
|
$fcounter++;
|
|
}
|
|
}
|
|
// pr($newData);
|
|
$total_income_str = implode(',', $total_income_str);
|
|
$total_expense_str = implode(',', $total_expense_str);
|
|
$total_balance_str = implode(',', $total_balance_str);
|
|
$this->set('total_income_str', $total_income_str);
|
|
$this->set('total_expense_str', $total_expense_str);
|
|
$this->set('total_balance_str', $total_balance_str);
|
|
$this->set("current_perticipants", $current_perticipants);
|
|
|
|
|
|
$this->render('print_family_report');
|
|
}
|
|
if(isset($this->request->data['participant_id']) && !empty($this->request->data('participant_id'))){
|
|
$participant_id = $this->request->data('participant_id');
|
|
if($expenseType == "1") {
|
|
$data = $this->filterExpenseData($participant_id, $data);
|
|
}
|
|
$this->set('participant_id', $participant_id);
|
|
}
|
|
if(!empty($data['GroupExpense'])){
|
|
foreach ($data['GroupExpense'] as $key => $groupExpense) {
|
|
$data['GroupExpense'][$key]['involve_list'] = $this->getInvolves($data, $groupExpense['participant_amount']);
|
|
|
|
foreach ($data['Participant'] as $participant) {
|
|
if($participant['participant_id'] == $groupExpense['paid_by_participant_id']){
|
|
$data['GroupExpense'][$key]['participent_name'] = $participant['name'];
|
|
};
|
|
}
|
|
}
|
|
}
|
|
if(!empty($data)){
|
|
$this->set('data', $data);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private function getInvolves($data, $involves)
|
|
{
|
|
$involveStrAll =[];
|
|
$involveStrExcept = "";
|
|
$involvesArray = explode(',', $involves);
|
|
foreach ($involvesArray as $involve)
|
|
{
|
|
$involve_id = explode('|', $involve);
|
|
foreach($data['Participant'] as $participant){
|
|
if($participant['participant_id'] == $involve_id[0]) {
|
|
$involveStrAll[] = $participant['name'];
|
|
}
|
|
}
|
|
}
|
|
if(count($involveStrAll) == count($data['Participant'])){
|
|
$involveStrExcept = "all";
|
|
} else {
|
|
foreach($data['Participant'] as $participant) {
|
|
if(!in_array($participant['name'], $involveStrAll)) {
|
|
if($involveStrExcept == "") {
|
|
$involveStrExcept = "All except ".$participant['name'];
|
|
} else {
|
|
$involveStrExcept .= ", ".$participant['name'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$involveStrAll = implode(', ', $involveStrAll);
|
|
if(strlen($involveStrExcept) > strlen($involveStrAll)) {
|
|
$involveStrExcept = $involveStrAll;
|
|
}
|
|
return $involveStrExcept;
|
|
}
|
|
|
|
private function filterExpenseData($participant_id, $data)
|
|
{
|
|
|
|
$tempGroupExpense = $data['GroupExpense'];
|
|
|
|
foreach ($tempGroupExpense as $key => $groupExpense){
|
|
$participanyArray = [];
|
|
$involvesArray = explode(',', $groupExpense['participant_amount']);
|
|
foreach ($involvesArray as $involve)
|
|
{
|
|
$involve_id = explode('|', $involve);
|
|
$participanyArray[] = $involve_id[0];
|
|
if($involve_id[0] == $participant_id) {
|
|
$data['GroupExpense'][$key]['my_expense'] = $involve_id[2];
|
|
}
|
|
}
|
|
if(!in_array($participant_id, $participanyArray)){
|
|
|
|
unset($data['GroupExpense'][$key]);
|
|
}
|
|
}
|
|
/*echo "<pre>";
|
|
print_r($data);exit;*/
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function generatePdf()
|
|
{
|
|
$html = $this->request->data['whole_content'];
|
|
// pr($html); die;
|
|
$mpdf = new mPDF();
|
|
$mpdf->SetProtection(array("print"));
|
|
$stylesheet = file_get_contents(CDN_URL.'css/print_report.css');
|
|
$mpdf->WriteHTML($stylesheet,1);
|
|
$mpdf->WriteHTML($html, 2);
|
|
$rand = rand(1000, 10000);
|
|
$reportUrl = "reports/";
|
|
if(!is_dir($reportUrl)){
|
|
mkdir($reportUrl,0777,true);
|
|
}
|
|
$filename = $reportUrl.$rand."_".time()."_"."expenses.pdf";
|
|
$mpdf->Output($filename);
|
|
|
|
if (file_exists($filename)) {
|
|
header('Content-type: application/pdf');
|
|
header('Content-Disposition: attachment; filename='.$filename);
|
|
readfile($filename);
|
|
@unlink($filename);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function generateCSV()
|
|
{
|
|
$data = $this->request->data['csv_content'];
|
|
$data_summary = $this->request->data['csv_summary_content'];
|
|
$data_meal = $this->request->data['csv_meal_content'];
|
|
|
|
$adata = unserialize($data);
|
|
$adata_summary = unserialize($data_summary);
|
|
$adata_meal = unserialize($data_meal);
|
|
// echo "<pre>"; print_r($adata_meal);exit;
|
|
$rand = rand(1000, 10000);
|
|
$filename = $rand.'_'.time().'_expense.csv';
|
|
ob_start();
|
|
header('Content-Encoding: UTF-8');
|
|
header('Content-Type: text/csv; charset=UTF-8');
|
|
header('Content-Disposition: attachment; filename=' . $filename);
|
|
$fp = fopen('php://output', 'w');
|
|
|
|
if(!empty($adata)){
|
|
fputcsv($fp, ['', 'All Expenses', '','','','']);
|
|
if($adata[0]['my_expense']>0)
|
|
fputcsv($fp, ['Who Paid?', 'How Much?', 'For what reasons?', 'When', 'Involves', 'My Expense']);
|
|
else
|
|
fputcsv($fp, ['Who Paid?', 'How Much?', 'For what reasons?', 'When', 'Involves', '']);
|
|
|
|
$totalAmount = 0;
|
|
$my_expenseAmount = 0;
|
|
foreach ($adata as $data) {
|
|
$totalAmount += $data['amount'];
|
|
$my_expenseAmount += $data['my_expense'];
|
|
$transaction_row = array();
|
|
if (!empty($data)) {
|
|
$transaction_row = [
|
|
$data['participent_name'],
|
|
$data['amount'] . " " . $data['currency'],
|
|
$data['what'],
|
|
$data['expense_date_new'],
|
|
$data['involve_list'],
|
|
($data['my_expense']>0) ? $data['my_expense'] . " " . $data['currency']:''
|
|
];
|
|
}
|
|
fputcsv($fp, $transaction_row);
|
|
}
|
|
if($my_expenseAmount > 0)
|
|
fputcsv($fp, ['Total:', $totalAmount . " " . $data["currency"], '','','Total',$my_expenseAmount . " " . $data["currency"]]);
|
|
else
|
|
fputcsv($fp, ['Total:', $totalAmount . " " . $data["currency"], '','','','']);
|
|
fputcsv($fp, ['', '', '','','','']);
|
|
}
|
|
|
|
if(!empty($adata_meal)){
|
|
fputcsv($fp, ['','Meal','','','','']);
|
|
fputcsv($fp, ['Date', 'Day', 'Breakfast', 'Lunch', 'Dinner', 'Total']);
|
|
|
|
$total = 0;
|
|
foreach ($adata_meal as $data) {
|
|
$total += $data['subtotal'];
|
|
$transaction_row = array();
|
|
if (!empty($data)) {
|
|
$transaction_row = [
|
|
$data['create_date'],
|
|
$data['day'],
|
|
$data['breakfast'],
|
|
$data['lunch'],
|
|
$data['dinner'],
|
|
$data['subtotal']
|
|
];
|
|
}
|
|
fputcsv($fp, $transaction_row);
|
|
}
|
|
|
|
fputcsv($fp, ['','','','','Total:',$total]);
|
|
fputcsv($fp, ['','','','','','']);
|
|
}
|
|
|
|
if(!empty($adata_summary)){
|
|
fputcsv($fp, ['', 'Summary Report', '','','','']);
|
|
fputcsv($fp, ['Participants', 'Charged', 'Paid', 'Due']);
|
|
|
|
foreach ($adata_summary as $data) {
|
|
$transaction_row = array();
|
|
if (!empty($data)) {
|
|
$transaction_row = [
|
|
$data['name'],
|
|
$data['total_charge'] . " " . $data['currency'],
|
|
$data['total_paid'] . " " . $data['currency'],
|
|
$data['due'] . " " . $data['currency']
|
|
];
|
|
}
|
|
fputcsv($fp, $transaction_row);
|
|
}
|
|
|
|
}
|
|
fclose($fp);
|
|
exit;
|
|
}
|
|
|
|
public function generateFamilyCSV()
|
|
{
|
|
$csv_expense_heading = $this->request->data['csv_expense_heading'];
|
|
$csv_income_heading = $this->request->data['csv_income_heading'];
|
|
$income_data = $this->request->data['csv_income_content'];
|
|
$expense_data = $this->request->data['csv_expense_content'];
|
|
|
|
$aincome_data = unserialize($income_data);
|
|
$aexpense_data = unserialize($expense_data);
|
|
$aexpense_heading = unserialize($csv_expense_heading);
|
|
$aincome_heading = unserialize($csv_income_heading);
|
|
// echo "<pre>"; print_r($aexpense_heading);
|
|
// echo "<pre>"; print_r($aexpense_data);
|
|
// echo "<pre>"; print_r($aincome_heading);
|
|
// echo "<pre>"; print_r($aincome_data);
|
|
// exit;
|
|
$rand = rand(1000, 10000);
|
|
$filename = $rand.'_'.time().'_expense.csv';
|
|
ob_start();
|
|
header('Content-Encoding: UTF-8');
|
|
header('Content-Type: text/csv; charset=UTF-8');
|
|
header('Content-Disposition: attachment; filename=' . $filename);
|
|
$fp = fopen('php://output', 'w');
|
|
|
|
if(!empty($aincome_data)){
|
|
fputcsv($fp, ['', 'All Incomes', '','']);
|
|
fputcsv($fp, [$aincome_heading['nameHeading'], $aincome_heading['categoryHeading'], $aincome_heading['dateHeading'],$aincome_heading['amountHeading']]);
|
|
|
|
$totalAmount = 0;
|
|
foreach ($aincome_data as $data) {
|
|
$totalAmount += $data['amount'];
|
|
$transaction_row = array();
|
|
if (!empty($data)) {
|
|
$transaction_row = [
|
|
$data['expenseName'],
|
|
$data['expenseCategory'],
|
|
$data['expenseDate'],
|
|
$data['amount'] . " " . $data['currency'],
|
|
];
|
|
}
|
|
fputcsv($fp, $transaction_row);
|
|
}
|
|
fputcsv($fp, ['','','Total:', $totalAmount . " " . $data["currency"]]);
|
|
fputcsv($fp, ['', '', '', '']);
|
|
}
|
|
if(!empty($aexpense_data)){
|
|
fputcsv($fp, ['', 'All Expenses', '','']);
|
|
fputcsv($fp, [$aexpense_heading['nameHeading'], $aexpense_heading['categoryHeading'], $aexpense_heading['dateHeading'],$aexpense_heading['amountHeading']]);
|
|
|
|
$totalAmount = 0;
|
|
foreach ($aexpense_data as $data) {
|
|
$totalAmount += $data['amount'];
|
|
$transaction_row = array();
|
|
if (!empty($data)) {
|
|
$transaction_row = [
|
|
$data['expenseName'],
|
|
$data['expenseCategory'],
|
|
$data['expenseDate'],
|
|
$data['amount'] . " " . $data['currency'],
|
|
];
|
|
}
|
|
fputcsv($fp, $transaction_row);
|
|
}
|
|
fputcsv($fp, ['','','Total:', $totalAmount . " " . $data["currency"]]);
|
|
fputcsv($fp, ['', '', '', '']);
|
|
}
|
|
|
|
|
|
fclose($fp);
|
|
exit;
|
|
}
|
|
|
|
}
|
|
?> |