From abd5049db08a3136b5e5e85a63d45cb8255aa0e5 Mon Sep 17 00:00:00 2001 From: "venbatechnologies@gmail.com" Date: Thu, 2 Aug 2018 11:59:08 +0530 Subject: [PATCH] income expense report --- Apollo/api/application/config/routes.php | 12 + .../controllers/DayBook_Controller.php | 156 +++++++ .../api/application/models/DayBook_model.php | 113 +++++ Apollo/assets/i18n/en.json | 6 +- Apollo/assets/js/config.constant.js | 16 + Apollo/assets/js/config.router.js | 16 + Apollo/assets/js/controllers/incomeCtrl.js | 269 +++++++++++ .../js/controllers/income_reportCtrl.js | 432 ++++++++++++++++++ Apollo/assets/views/add_income_expense.html | 96 ++++ .../views/daybook/daybooksuperadmin.html | 19 +- .../assets/views/income_expense_report.html | 232 ++++++++++ .../views/income_expense_report_pdf.html | 159 +++++++ Apollo/assets/views/partials/nav.html | 40 ++ 13 files changed, 1561 insertions(+), 5 deletions(-) create mode 100644 Apollo/assets/js/controllers/incomeCtrl.js create mode 100644 Apollo/assets/js/controllers/income_reportCtrl.js create mode 100644 Apollo/assets/views/add_income_expense.html create mode 100644 Apollo/assets/views/income_expense_report.html create mode 100644 Apollo/assets/views/income_expense_report_pdf.html diff --git a/Apollo/api/application/config/routes.php b/Apollo/api/application/config/routes.php index 2b30e564..e0821fab 100755 --- a/Apollo/api/application/config/routes.php +++ b/Apollo/api/application/config/routes.php @@ -176,6 +176,18 @@ $route['deleteSetFeesDetails'] = 'Fees_Status_Controller/deleteSetFeesDetails'; /*update fees details for student*/ $route['updateFeesDetails'] = 'Fees_Status_Controller/updateFeesDetails'; $route['getUniversityCourseForFees'] = 'Fees_Status_Controller/getUniversityCourseForFees'; + + +/*account type*/ +$route['getAccounttypes'] = 'DayBook_Controller/getAccounttypes'; +$route['addAccountnameDetails'] = 'DayBook_Controller/addAccountnameDetails'; +$route['IncomeExpenseDetails'] = 'DayBook_Controller/getIncomeExpenseDetails'; +$route['ViewFullIncomeDetails'] = 'DayBook_Controller/ViewFullIncomeDetails'; +$route['GetSubTypes'] = 'DayBook_Controller/GetSubTypes'; + + + + /* * get default activity details * */ diff --git a/Apollo/api/application/controllers/DayBook_Controller.php b/Apollo/api/application/controllers/DayBook_Controller.php index b7f3fc13..818009c5 100755 --- a/Apollo/api/application/controllers/DayBook_Controller.php +++ b/Apollo/api/application/controllers/DayBook_Controller.php @@ -30,8 +30,61 @@ class DayBook_Controller extends REST_Controller { parent::__construct(); // load the university model $this->load->model('DayBook_model', 'daybook_model'); + + + $this->methods['addAccountnameDetails_get']['limit'] = 500; // 500 requests per hour per user/key + $this->methods['addAccountnameDetails_post']['limit'] = 100; // 100 requests per hour per user/key + $this->methods['addAccountnameDetails_delete']['limit'] = 50; // 50 requests per hour per user/key + $this->load->model('Status_model', 'status_model'); + + $this->methods['GetSubTypes']['limit'] = 500; } + + + + public function addAccountnameDetails_post() + { + + + $now = new DateTime(); + $now->setTimezone(new DateTimezone('Asia/Kolkata')); + $details['ListName'] = $this->post('statusName'); + $details['ListGroup'] = "10"; + $details['CreatedBy'] = $this->post('createdBy'); + $details['IsActive'] = $this->post('status'); + $details['BranchCode'] = $this->post('branch'); + $details['CreatedOn'] = $now->format('Y-m-d H:i:s'); + $statusDetails = $this->status_model->addstatus($details);// Check if the users data store contains users (in case the database result returns NULL) + if ($statusDetails) + { + $statusDetails['status'] = REST_Controller::HTTP_OK; + // Set the response and exit + $this->response($statusDetails, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code + } + else + { + // Set the response and exit + $this->response([ + 'message' => 'Something went wrong.please try again!', + 'status' => REST_Controller::HTTP_NOT_FOUND + ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code + } + + + } + + + + + + + + + + + + //get income expese type, name details public function getIncomeExpenseTypeState_post() { $reqData = $this->post('localReqDetails'); @@ -293,5 +346,108 @@ class DayBook_Controller extends REST_Controller { ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } } + + + + + public function getAccounttypes_post() + { + $requestedBy = $this->post('requestedBy'); + $requestedBranch = $this->post('requestBranch'); + //echo $requestedBy; + $getStatus = $this->daybook_model->getAccounttype($requestedBy,$requestedBranch); +// print_r($getStatus); +// die(); + if ($getStatus) + { + $getStatus['status'] = REST_Controller::HTTP_OK; + // Set the response and exit + $this->response($getStatus, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code + } + else + { + // Set the response and exit + $this->response([ + 'message' => 'No records found!', + 'status' => REST_Controller::HTTP_NOT_FOUND + ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code + } + + + } + + public function ViewFullIncomeDetails_post() + { + $from = $this->post('from'); + $to = $this->post('to'); + $incid = 'I002'; + + $getincomedetails = $this->daybook_model->getIncome_Details($from,$to,$incid); + + // print_r($getincomedetails); + // die(); + if ($getincomedetails) + { + $getincomedetails['status'] = REST_Controller::HTTP_OK; + // Set the response and exit + $this->response($getincomedetails, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code + } + + + } + + + + public function getIncomeExpenseDetails_post() + { + $from = $this->post('from'); + $to = $this->post('to'); + $br = $this->post('branch'); + // echo $from.'from'; + // echo $to.'to'; + $getStatus = $this->daybook_model->Income_expense($from,$to,$br); + //print_r($getStatus); + if ($getStatus) + { + $getStatus['status'] = REST_Controller::HTTP_OK; + // Set the response and exit + $this->response($getStatus, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code + } + else + { + // Set the response and exit + $this->response([ + 'message' => 'No records found!', + 'status' => REST_Controller::HTTP_NOT_FOUND + ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code + } + + } + + + public function GetSubTypes_post() + { +//echo 'in'; + + $getsubtypes = $this->daybook_model->Income_expenseSubtype(); + + // print_r($getsubtypes); + // die(); + + if($getsubtypes) + { + + $getsubtypes['status'] = REST_Controller::HTTP_OK; + // Set the response and exit + $this->response($getsubtypes, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code + } + else + { + $this->response([ + 'message' => 'No records found!', + 'status' => REST_Controller::HTTP_NOT_FOUND + ], REST_Controller::HTTP_NOT_FOUND); + } + } } diff --git a/Apollo/api/application/models/DayBook_model.php b/Apollo/api/application/models/DayBook_model.php index 26a2b1ec..f1c08f6b 100755 --- a/Apollo/api/application/models/DayBook_model.php +++ b/Apollo/api/application/models/DayBook_model.php @@ -626,4 +626,117 @@ class DayBook_model extends CI_Model $results['dayBookListDetails'] = $dayBookDetailsList; return $results; } + + + public function getAccounttype($requestedBy,$requestedBranch) + { + $this->db->select('ListCode,ListName,IsActive'); + $this->db->where('ListGroup','10'); + //$this->db->where('BranchCode', $reqBranch); + $this->db->order_by('ListCode','DESC'); + $statusDetails = $this->db->get(PICK_LIST_DETAILS); + if($statusDetails->result()){ + + $result['Status'] = true; + $result['details'] = $statusDetails->result(); + } + else { + $result['Status'] = false; + $result['message'] = "No records found!"; + } + + return $result; + } + + + public function Income_expense($from,$to,$br) + { + $incomecode='I002'; + $expensecode='I001'; + + $fromd= date("d-m-Y",strtotime($from)); + $tod=date("d-m-Y",strtotime($to)); + + $subQuery= 'SELECT + DISTINCT(p.Name) AS TID,ListName, + SUM(IF(p.Name=?,Amount,0)) AS Income, + SUM(IF(p.Name=?,Amount,0)) AS Expense, + SUM( CASE Name + WHEN ? THEN Amount + WHEN ? THEN Amount + END) AS Total + FROM + T_DayBookMaster AS p + join T_PickListDetails on T_PickListDetails.ListCode = p.name + where Date>=? and Date<=? and p.IsActive=? and (p.Name=? or p.Name=?) + GROUP BY p.`Name`'; + $query = $this->db->query($subQuery,array($incomecode,$expensecode,$incomecode,$expensecode,$fromd,$tod,'1','I001','I002')); + $expense = $query->result(); + + if(count($query)>0) + { + $results['expense_data'] = $expense; + } + + return $results; + + } + + + public function getIncome_Details($from,$to,$incid) + { + $fromd= date("d-m-Y",strtotime($from)); + $tod=date("d-m-Y",strtotime($to)); + $expid = 'I001'; + + // $subQuery = 'select T_DayBookMaster.ID,TypeName,Amount,T_DayBookMaster.Date,Reason,Description from T_DayBookMaster + // join T_Income_Outcome_Master on T_Income_Outcome_Master.TypeID=T_DayBookMaster.Name and + // T_Income_Outcome_Master.ID = T_DayBookMaster.Type where Name=? and date>=? and date<=?'; + + $subQuery = 'select Name,T_DayBookMaster.ID,T_Income_Outcome_Master.TypeID as OrgType,T_Income_Outcome_Master.TypeName,Amount,T_DayBookMaster.Date,Reason,T_DayBookMaster.Description,ListName from T_DayBookMaster left join T_Income_Outcome_Master on + T_Income_Outcome_Master.ID = T_DayBookMaster.Type + join T_PickListDetails on T_PickListDetails.ListCode = T_Income_Outcome_Master.TypeID + where Name in (?,?) and date>=? and date<=?'; + + $query = $this->db->query($subQuery,array($incid,$expid,$fromd,$tod)); + + + // print_r( $this->db->last_query()); + // die(); + + $expense = $query->result(); + + if(count($query)>0) + { + $results['fullexpense_detail'] = $expense; + } + + return $results; + + //return $query->result_array(); + + + } + + + public function Income_expenseSubtype() + { + $this->db->select('ListCode,ListName,IsActive'); + $this->db->where('ListGroup','10'); + + $this->db->order_by('ListCode','DESC'); + $statusDetails = $this->db->get(PICK_LIST_DETAILS); + if($statusDetails->result()){ + + $result['Status'] = true; + $result['details'] = $statusDetails->result(); + } + else { + $result['Status'] = false; + $result['message'] = "No records found!"; + } + + return $result; + + } } \ No newline at end of file diff --git a/Apollo/assets/i18n/en.json b/Apollo/assets/i18n/en.json index 35f88782..548b628a 100755 --- a/Apollo/assets/i18n/en.json +++ b/Apollo/assets/i18n/en.json @@ -75,7 +75,8 @@ "SESSIONMASTER":"SESSION DETAILS", "SESSIONSCHEDULE": "SESSION SCHEDULE", "HALLTICKET": "GENERATE HALLTICKET", - "REREGISTRATION":"RE REGISTRATION" + "REREGISTRATION":"RE REGISTRATION", + "ACCOUNTTYPE":"ACCOUNT TYPE" }, "report": { "TITLE": "REPORTS", @@ -136,7 +137,8 @@ "DAYBOOK": "DAY BOOK ", "APPROVAL": "APPROVE EXPENSE", "DAYBOOKDETAILS": "DAYBOOK DETAILS", - "DAYBOOKAPPROVAL": "DAYBOOK APPROVAL" + "DAYBOOKAPPROVAL": "DAYBOOK APPROVAL", + "INCOMEEXPENSEREPORT" : "INCOME EXPENSE REPORT" }, "mydetails": { "MAIN": "MY DETAILS" diff --git a/Apollo/assets/js/config.constant.js b/Apollo/assets/js/config.constant.js index 13c8a568..16a9188a 100755 --- a/Apollo/assets/js/config.constant.js +++ b/Apollo/assets/js/config.constant.js @@ -122,6 +122,22 @@ app.constant('JS_REQUIRES', { * */ 'statusCtrl': 'assets/js/controllers/statusCtrl.js', /* + + + * status + * */ + 'incomeCtrl': 'assets/js/controllers/incomeCtrl.js', + /* + + * */ + 'income_reportCtrl': 'assets/js/controllers/income_reportCtrl.js', + /* + + + + + + * student status updation * */ 'studyMaterialStatusCtrl': 'assets/js/controllers/studyMaterialStatusCtrl.js', diff --git a/Apollo/assets/js/config.router.js b/Apollo/assets/js/config.router.js index bbcf3cb5..02c96bfa 100755 --- a/Apollo/assets/js/config.router.js +++ b/Apollo/assets/js/config.router.js @@ -154,6 +154,14 @@ app.config(['$stateProvider', '$urlRouterProvider', '$controllerProvider', '$com label: 'Course' }, // resolve: loadSequence('iconsCtrl') + }).state('app.master.accounttype', { + url: '/accounttype', + templateUrl: "assets/views/add_income_expense.html", + resolve: loadSequence('incomeCtrl','ngTable', 'ladda', 'angular-ladda'), + title: 'income_expense', + ncyBreadcrumb: { + label: 'income_expense' + }, }).state('app.master.status', { url: '/status', templateUrl: "assets/views/status.html", @@ -162,6 +170,14 @@ app.config(['$stateProvider', '$urlRouterProvider', '$controllerProvider', '$com ncyBreadcrumb: { label: 'Status' }, + }).state('app.master.incomeexpensereport', { + url: '/incomeexpensereport', + templateUrl: "assets/views/income_expense_report.html", + resolve: loadSequence('income_reportCtrl','ngTable', 'ladda', 'angular-ladda'), + title: 'IncomeExpense', + ncyBreadcrumb: { + label: 'income_expense' + }, }).state('app.master.studentStatusUpdate', { url: '/default activity', templateUrl: "assets/views/studentStatusUpdate.html", diff --git a/Apollo/assets/js/controllers/incomeCtrl.js b/Apollo/assets/js/controllers/incomeCtrl.js new file mode 100644 index 00000000..b6dd89c8 --- /dev/null +++ b/Apollo/assets/js/controllers/incomeCtrl.js @@ -0,0 +1,269 @@ +'use strict'; +/** + * controllers for ng-table + * Simple table with sorting and filtering on AngularJS + */ +// var helloApp = angular.module("helloApp", []); +app.controller("incomeCtrl", ["$scope", "toaster", "$filter", "API_POINTS", "$localStorage", "$http", "$state", 'ipCookie', function ($scope, toaster, $filter, apiPoint, $localStorage, $http, $state, ipCookie) { + + $scope.myModel = { + "StatusName": "", + "switchsetting": true + }; + + // get local client details + var localDetail = JSON.parse(localStorage.getItem('localObj')); + var localDetails = ipCookie('cookiechk'); + + $scope.initHead = function() { + // alert(); + const LOCALTYPE = localDetail.localType; + if (localDetail != null && (LOCALTYPE == 'R003' || LOCALTYPE == 'R004' )) { + }else { + if(localDetail != null) { + $state.go('app.dashboard'); + } else { + ipCookie.remove('cookiechk'); + $window.localStorage.clear(); + $state.go('login.signin'); + } + } + } + + /* + * edit status details + * created by Surendiran + * */ + $scope.editId = -1; + $scope.setEditId = function (pid) { + $scope.editId = pid; + $scope.viewId = -1; + }; + + /* + * cancel edit div + * created by Surendiran + * */ + $scope.cancel = function () { + $scope.init(); + $scope.editId = -1; + + }; + + // sorting function for table params + $scope.sort = function (keyname) { + $scope.sortKey = keyname; //set the sortKey to the param passed + $scope.reverse = !$scope.reverse; //if true make it false and vice versa + } + + + $scope.statusForm = { + submit: function (form, myModel, loading) { + var firstError = null; + if (form.$invalid) { + var field = null, firstError = null; + for (field in form) { + if (field[0] != '$') { + if (firstError === null && !form[field].$valid) { + firstError = form[field].$name; + } + if (form[field].$pristine) { + form[field].$dirty = true; + } + } + } + angular.element('.ng-invalid[name=' + firstError + ']').focus(); + // swal("The form cannot be submitted because it contains validation errors!", "Errors are marked with a red, dashed border!", "error"); + } else { + + $scope.ldloading1 = {}; + + $scope.ldloading1[loading.replace('-', '_')] = true; + + + var addstatus = { + method: 'POST', + url: apiPoint.url + 'addAccountnameDetails/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + statusName: myModel.StatusName, + status: myModel.switchsetting, + createdBy: JSON.parse(localStorage.getItem('localObj')).localUserID, + branch : localDetail.localBranchID + } + }; + + $http(addstatus).then(function (response) { + if (response.data.status == 200 && response.data.Status) { + $scope.ldloading1[loading.replace('-', '_')] = false; + $scope.init(); + swal(" ", "Status added successfully.", "success"); + $state.go($state.current, {}, { reload: true }); + } else { + $scope.ldloading1[loading.replace('-', '_')] = false; + swal("", response.data.message, "error"); + } + }); + + + } + }, + + reset: function (form) { + + $scope.myModel = angular.copy($scope.master); + form.$setPristine(true); + $scope.myModel = { + "StatusName": "", + "switchsetting": true + }; + + } + }; + /* + *get status details when page loading called from view file + * + * + * created by Surendiran + * */ + $scope.loader = ''; + $scope.emptyData = ''; + $scope.init = function () { + + var getStatus = { + method: 'POST', + url: apiPoint.url + 'getAccounttypes/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + requestBranch: localDetail.localBranchID, + requestedBy: JSON.parse(localStorage.getItem('localObj')).localUserID + } + }; + + $http(getStatus).then(function (response) { + if (response.data.status == 200 && response.data.Status) { + + // console.log(response.data.details); + $scope.emptyData = true; + $scope.loader = true; + + $scope.statusInfo = response.data.details; + //console.log($scope.statusInfo); + + } else { + $scope.emptyData = false; + $scope.loader = true; + + $scope.statusInfo = ''; + + } + }); + + // var getBranchList = { + // method: 'POST', + // url: apiPoint.url + 'getBranchListStatusUpdate/', + // headers: { + // 'Content-Type': 'application/json' + // }, + // data: { + // requestedBy: JSON.parse(localStorage.getItem('localObj')).localUserID + // } + // }; + + // $http(getBranchList).then(function (response) { + // if (response.data.branchListStatus == true) { + // $scope.branchList = response.data.branch_list_details; + // } else { + // $scope.branchListMessage = response.data.message; + // } + // }); + + }; + + /* + * update the status details + * created by Surendiran + * */ + $scope.updatestatus = function (myModel, form, loading) { + + var firstError = null; + if (form.$invalid) { + var field = null, firstError = null; + for (field in form) { + if (field[0] != '$') { + if (firstError === null && !form[field].$valid) { + firstError = form[field].$stop_name; + } + + if (form[field].$pristine) { + form[field].$dirty = true; + } + } + } + angular.element('.ng-invalid[name=' + firstError + ']').focus(); + } else { + $scope.ldloading = {}; + + $scope.ldloading[loading.replace('-', '_')] = true; + + + var update = { + method: 'POST', + url: apiPoint.url + 'updateStatusDetails/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + ListCode: myModel.ListCode, + ListName: myModel.ListName, + status: myModel.IsActive, + requestBranch: localDetail.localBranchID, + updatedBy: JSON.parse(localStorage.getItem('localObj')).localUserID + } + }; + $http(update).then(function (response) { + if (response.data.Status) { + $scope.ldloading[loading.replace('-', '_')] = false; + swal("", "Updated Successfully", "success"); + $scope.editId = -1; + $scope.init(); + } else { + $scope.ldloading[loading.replace('-', '_')] = false; + $scope.init(); + swal("", response.data.message, "error"); + } + }); + } + }; + + $scope.localBranchDetails = ''; + + $scope.selectBranch = function(branchCode) { + // alert(branchCode); + + var getBranchStatusList = { + method: 'POST', + url: apiPoint.url + 'getBranchStatusList/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + requestedBy: localDetail, + branchCode: branchCode + } + }; + + $http(getBranchStatusList).then(function (response) { + if (response.data.branchListStatus == true) { + $scope.branchList = response.data.branch_list_details; + } else { + $scope.branchListMessage = response.data.message; + } + }); + + } +}]); \ No newline at end of file diff --git a/Apollo/assets/js/controllers/income_reportCtrl.js b/Apollo/assets/js/controllers/income_reportCtrl.js new file mode 100644 index 00000000..bd7831c9 --- /dev/null +++ b/Apollo/assets/js/controllers/income_reportCtrl.js @@ -0,0 +1,432 @@ +'use strict'; +/*** controller***/ +app.controller('income_reportCtrl', ["$scope","$rootScope","toaster", "$filter", "ngTableParams", "API_POINTS", "$localStorage", "$http", "$state","$modal","$log", + function ($scope,$rootScope,toaster, $filter, ngTableParams, apiPoint, $localStorage, $http, $state,$modal,$log){ + + //function ($scope, apiPoint, $http, SweetAlert, $state,$modal, md5, ipCookie, $window, dateListDescService) { + + // DataTables configurable options + + + $scope.filters = { + + "from_date": "", + "to_date": "", + + }; + + // $scope.filters = function () { + // var filterlist = { + // method: 'POST', + // url: apiPoint.url + 'report_filters/', + // headers: { + // 'Content-Type': 'application/json' + // }, + // data: { + // branch : JSON.parse(localStorage.getItem('localObj')).localBranchID + + // } + + // }; + // $http(filterlist).then(function (response) { + // if (response.data) { + // $scope.batch=[]; + // $scope.batchlist = response.data.batch; + // $scope.university = response.data.university; + // //Desc order Batchlist + // angular.forEach($scope.batchlist,function (values,key) { + // var parts = values.BatchDate.split("-"); + // $scope.batch.push({ + // // "batchcode":values.batchcode, + // // "batch":values.batch + '('+ values.batchcode + ')', + // "BatchDate":values.BatchDate, + // "givenDateObject":new Date(parts[2], parts[1] - 1, parts[0]) + // }) + // }); + // // call service for make a list in desc order based on date + // $scope.batch=dateListDescService.getOrderByList($scope.batch); + // //console.log($scope.branch); + // } else { + // } + // }); + // } + + $scope.onSubmit = function () { + + + //alert($scope.batch.name); + $scope.expense_data = ''; + $scope.message = ''; + $scope.incomedetail = ''; + $scope.Subtypes = ''; + + var response_data = { + method: 'POST', + url: apiPoint.url + 'IncomeExpenseDetails/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + branch: JSON.parse(localStorage.getItem('localObj')).localBranchID, + from : $scope.filters.from_date, + to : $scope.filters.to_date + } + + }; + + $http(response_data).then(function (response) { + //console.log(response.data); + if (response.data.status == '200') { + + $scope.expense_data = response.data.expense_data; + //console.log($scope.expense_data) + + + } else { + $scope.message = response.data.message; + } + + }); + + + + var income_data = { + method: 'POST', + url: apiPoint.url + 'ViewFullIncomeDetails/', + headers: { + 'Content-Type': 'application/json' + }, + data: { + branch: JSON.parse(localStorage.getItem('localObj')).localBranchID, + from : $scope.filters.from_date, + to : $scope.filters.to_date + } + + }; + + + $http(income_data).then(function (response) { + //console.log(response.data); + if (response.data.status == '200') + { + $scope.incomedetail = response.data; + $scope.fullincomedetail = response.data.fullexpense_detail; + //console.log($scope.fullincomedetail); + + + } + else + { + $scope.message = response.data.message; + } + + }); + + + + + var getsubdivision = { + method: 'POST', + url: apiPoint.url + 'GetSubTypes/', + headers: { + 'Content-Type': 'application/json' + + }, + data: { + branch: JSON.parse(localStorage.getItem('localObj')).localBranchID, + from : $scope.filters.from_date, + to : $scope.filters.to_date + } + + + }; + + + $http(getsubdivision).then(function (response) { + // console.log(response.data); + if (response.data.status == '200') + { + $scope.Subtypes = response.data.details; + + // console.log($scope.Subtypes); + + } + else + { + $scope.message = response.data.message; + } + + }); + + + } + + + + + var mystyle = { + sheetid: 'EXPENSE REPORT', + headers: true, + caption: { + title:'EXPENSE REPORT', + width: '300px', + style:'font-size:50px;' + }, + // style:'background:#00FF00', + column: { + style:'font-size:10px' + }, + + }; + + + + $scope.exportData = function () + { + //alert() + + angular.forEach(($scope.fullincomedetail),function(fullincomedetail,key) + { + //console.log($scope.fullincomedetail[key].TypeName); + if($scope.fullincomedetail[key].Name == 'I001') + { + $scope.fullincomedetail[key]['Type'] = 'Expense'; + + } + + else if($scope.fullincomedetail[key].Name == 'I002') + { + $scope.fullincomedetail[key]['Type'] = 'Income'; + } + + + //console.log($scope.fullincomedetail); + + // alasql('SELECT Type,ListName,TypeName,Date,Amount INTO XLS("Income_Expense_report.xls",?) FROM ?',[mystyle,$scope.fullincomedetail]); + + + }); + +//console.log($scope.fullincomedetail); + alasql('SELECT Type,ListName,TypeName,Date,Amount INTO XLS("Income Expense report.xls",?) FROM ?',[mystyle,$scope.fullincomedetail]); + + }; + + + $scope.OpenWindowStatus = false; + $scope.editId = -1; + $scope.setEditId = function (P) + { + //alert(P); + $scope.editId = P; + + } + + $scope.close = function () + { + + $scope.editId = -1; + + } + +$scope.fdate =''; +$scope.tdate =''; +//$scope.Subtypes = ''; + + + $scope.changeSem = function() + { + + $scope.open($scope.fullincomedetail,$scope.expense_data,$scope.Subtypes); + } + + +var fm_date= ''; +var Total_inc = 0; +var Total_exp = 0; + $scope.open = function(incomeexpensedetails,incomeexpenselist,Subtypes) + { + + //Total_inc === incomeexpenselist[1].Total + if(incomeexpenselist[1] == 'undefined' || incomeexpenselist[1] == null) + { + Total_exp=0; + } + else + { + Total_exp = incomeexpenselist[1].Total; + } + + if(incomeexpenselist[0] == 'undefined' || incomeexpenselist[0] == null) + { + Total_inc=0; + } + else + { + Total_inc = incomeexpenselist[0].Total; + } + //console.log(incomeexpenselist[1]); + +// + var formate = "dd-MM-yyyy"; + + $scope.fdate = $filter('date')(new Date($scope.filters.from_date), formate); + $scope.tdate = $filter('date')(new Date($scope.filters.to_date), formate); + + // fm_date = $scope.fdate; + // console.log(fm_date); + + incomeexpensedetails['fdate'] = $scope.fdate; + incomeexpensedetails['tdate'] = $scope.tdate; + // console.log(incomeexpensedetails); + // console.log(Subtypes); + + $rootScope.income_expendelist = incomeexpenselist; + $rootScope.income_expensedetails = incomeexpensedetails; + $rootScope.listdetails = Subtypes; + $rootScope.fdate = $scope.fdate; + $rootScope.tdate = $scope.tdate + //$rootScope.sum = incomeexpenselist[1].Total - incomeexpenselist[0].Total; + + $rootScope.sum = Total_inc -Total_exp; + //console.log($rootScope.sum); + //console.log($rootScope.listdetails); + + var modalInstance = $modal.open({ + templateUrl: 'assets/views/income_expense_report_pdf.html', + controller: 'income_reportCtrl', + // size: size, + resolve: { + pdfitems: function () { + //return $scope.FeesName; + return incomeexpensedetails; + } + } + }); + + + + modalInstance.result.then(function (selectedItem) { + $scope.selected = selectedItem; + }, function () { + $log.info('Modal dismissed at: ' + new Date()); + }); + + + + }; + + + + + + + $scope.generatePDF = function() + { + + + kendo.drawing.drawDOM($("#income_expensepdf")).then(function(group) { + kendo.drawing.pdf.saveAs(group, "income_expensepdf"+".pdf"); + }); + + + } + + // alert('in'); + // //console.log($scope.income_expensedetails.fdate); + // // return false; + + // var doc = new jsPDF('A4'); + // var canvas = document.createElement("canvas"); + // canvas.width = 100; + // canvas.height = 100; + // var ctx = canvas.getContext("2d"); + // doc.line(10,240,200,240); + // doc.setFontSize(20); + // doc.text(70,32,"Apollo Distance Education"); + // doc.setFontSize(15); + // doc.text(85,40,"Profit and Loss Report"); + // doc.setFontSize(12); + // doc.text(83,48,"From "+$scope.income_expensedetails.fdate+" to "+$scope.income_expensedetails.tdate ); + // doc.setFontSize(10); + // // doc.text(11,55,"Income"); + + // var TypeName= ''; + // var row=15; + // var column=60; + // var columnam=''; + // var rowam=60; + + // doc.rect(10, 10, 190, 280); + // var col = 45; + + // // var elem = document.getElementById('myCanvas'); + // // var two = new Two({ + // // type: Two.Types.canvas, + // // fullscreen: true + // // }).appendTo(elem); + // // two.update(); + + // var line = two.makeLine(450, 140, 900, 140); + // line.linewidth = 5; + // line.stroke = "blue"; + // // doc.rect(col,57,5,5); + // //console.log(JSON.parse($scope.income_expensedetails).length);return false; + // angular.forEach(($scope.income_expensedetails),function(income_expensedetails,key) + // { + // //console.log(income_expensedetails.TypeName); + // TypeName = income_expensedetails.TypeName; + // //console.log(income_expensedetails.Amount); + // row= row+10; + // // column= column+10; + // rowam=rowam+10; + // columnam = columnam+10; + // if(income_expensedetails.Name == 'I002') + // { + + // doc.setFontSize(11); + // doc.text(11,55,"Income"); + // doc.setFontSize(8); + // column= column+15; + // console.log(income_expensedetails.TypeName) + + // doc.text(row,column,income_expensedetails.TypeName); + // doc.text(rowam,column,income_expensedetails.Amount); + // } + + // }); + + + + // angular.forEach(($scope.income_expensedetails),function(income_expensedetails,key) + // { + // //console.log(income_expensedetails.TypeName); + // TypeName = income_expensedetails.TypeName; + // //console.log(income_expensedetails.Amount); + // row= row+10; + // // column= column+10; + // rowam=rowam+10; + // columnam = columnam+10; + // if(income_expensedetails.Name == 'I001') + // { + // doc.setFontSize(10); + // doc.text(11,105,"Expense"); + // doc.setFontSize(8); + // column= column+15; + // console.log(income_expensedetails.TypeName) + + // doc.text(row,column,income_expensedetails.TypeName); + // doc.text(rowam,column,income_expensedetails.Amount); + // } + + // }); + + + // doc.save('sample.pdf'); + + + }]); + + + + diff --git a/Apollo/assets/views/add_income_expense.html b/Apollo/assets/views/add_income_expense.html new file mode 100644 index 00000000..464e8e3e --- /dev/null +++ b/Apollo/assets/views/add_income_expense.html @@ -0,0 +1,96 @@ + +
+
+
+

+ + Add New Income Expense Types. + +
+
+
+
+
+
+ + +
+
+ Add New +
+
+
+
+ + + Account Name is required + Invalid Account Name +
+
+
+ +
+
+
+
+
+
+
+
+
+ +

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Status ID + + Status Name + + Status
{{p.ListCode}}{{p.ListName}} Active In-Active + + +
+ + +
+ +
+
+
\ No newline at end of file diff --git a/Apollo/assets/views/daybook/daybooksuperadmin.html b/Apollo/assets/views/daybook/daybooksuperadmin.html index 72fdbaa9..c7cd7109 100755 --- a/Apollo/assets/views/daybook/daybooksuperadmin.html +++ b/Apollo/assets/views/daybook/daybooksuperadmin.html @@ -313,6 +313,7 @@ Enter a Valid Date +
+
@@ -359,17 +364,25 @@
+
Type is Required
+