Files
brewman/brewman/static/scripts/issue.js

287 lines
12 KiB
JavaScript

'use strict';
var IssueCtrl = ['$scope', '$routeParams', '$location', 'dateFilter', 'voucher', 'cost_centers', 'issue_grid', 'IssueGrid', 'Voucher', '$modal', 'Batch', function ($scope, $routeParams, $location, dateFilter, voucher, cost_centers, issue_grid, IssueGrid, Voucher, $modal, Batch) {
$scope.voucher = voucher;
$scope.cost_centers = cost_centers;
$scope.smallGrid = issue_grid;
if (typeof $routeParams.Source === 'undefined' && typeof $routeParams.Destination === 'undefined' && typeof $routeParams.id === 'undefined') {
var date = $scope.voucher.Date;
var source = getDebitCredit($scope.voucher.Journals, -1);
var destination = getDebitCredit($scope.voucher.Journals, 1);
$location.path('/Issue/' + date).search({Source: source, Destination: destination});
}
function getOldInventory(productID, inventories) {
for (var i = 0, l = inventories.length; i < l; i++) {
if (inventories[i].Product.ProductID === productID) {
return inventories[i];
}
}
}
$scope.add = function () {
var oldInventory = getOldInventory($scope.batch.Product.ProductID, this.voucher.Inventories),
quantity = Number($scope.quantity),
consumption = (getDebitCredit($scope.voucher.Journals, -1) === '7b845f95-dfef-fa4a-897c-f0baf15284a3');
if (!$scope.batch || !$scope.batch.Product.ProductID || !quantity) {
return;
}
if (typeof oldInventory !== 'undefined' &&
oldInventory.Batch.BatchID === $scope.batch.BatchID &&
(!consumption || oldInventory.Quantity + quantity <= $scope.batch.QuantityRemaining)) {
oldInventory.Quantity += quantity;
delete $scope.batch;
delete $scope.quantity;
$('#txtBatch').focus();
}
if (typeof oldInventory === 'undefined' && (!consumption || quantity <= $scope.batch.QuantityRemaining)) {
this.voucher.Inventories.push(
{
Product: $scope.batch.Product,
Quantity: quantity,
Rate: $scope.batch.Rate,
Tax: $scope.batch.Tax,
Discount: $scope.batch.Discount,
Amount: quantity * $scope.batch.Rate * (1 + $scope.batch.Tax) * (1 - $scope.batch.Discount),
Batch: $scope.batch
});
delete $scope.batch;
delete $scope.quantity;
$('#txtBatch').focus();
}
};
$scope.removeInventory = function (inventory) {
var index = this.voucher.Inventories.indexOf(inventory);
this.voucher.Inventories.splice(index, 1);
};
$scope.$watch('voucher.Date', function (newDate, oldDate) {
var nDate = angular.isDate(newDate) ? dateFilter(newDate, 'dd-MMM-yyyy') : newDate,
oDate = angular.isDate(oldDate) ? dateFilter(oldDate, 'dd-MMM-yyyy') : oldDate;
if (nDate !== oDate && typeof nDate !== 'undefined') {
if (typeof $routeParams.Source !== 'undefined' && typeof $routeParams.Destination !== 'undefined' && typeof $routeParams.id !== 'undefined') {
$location.path('/Issue/' + nDate).search({Source: $routeParams.Source, Destination: $routeParams.Destination});
} else {
$scope.smallGrid = IssueGrid.query({date: nDate, Source: $routeParams.Source, Destination: $routeParams.Destination});
}
}
}, true);
function getDebitCredit(journals, type) {
for (var i = 0, l = journals.length; i < l; i++) {
if (journals[i].Debit === type) {
return journals[i].CostCenter.CostCenterID;
}
}
}
$scope.$watch('voucher.Journals', function (newJournals, oldJournals) {
if (typeof newJournals === 'undefined' || angular.equals(newJournals, oldJournals)) {
return;
}
if (typeof oldJournals !== 'undefined') {
if (getDebitCredit(oldJournals, -1) === getDebitCredit(newJournals, -1) && getDebitCredit(oldJournals, 1) === getDebitCredit(newJournals, 1)) {
return;
}
}
if (typeof $routeParams.Source !== 'undefined' && typeof $routeParams.Destination !== 'undefined' && typeof $routeParams.id !== 'undefined') {
$location.path('/Issue/' + $scope.voucher.Date).search({Source: getDebitCredit(newJournals, -1), Destination: getDebitCredit(newJournals, 1)});
} else {
$scope.smallGrid = IssueGrid.query({date: $scope.voucher.Date, Source: getDebitCredit(newJournals, -1), Destination: getDebitCredit(newJournals, 1)});
}
}, true);
$scope.$watch('voucher.Inventories', function (newInventories, oldInventories) {
if (typeof newInventories === 'undefined' || typeof oldInventories === 'undefined') {
return;
}
var amount = 0;
for (var i = 0, l = newInventories.length; i < l; i++) {
amount += newInventories[i].Amount;
}
for (i = 0, l = $scope.voucher.Journals.length; i < l; i++) {
$scope.voucher.Journals[i].Amount = amount;
}
}, true);
$scope.resetVoucher = function () {
var date = $scope.voucher.Date;
var source = getDebitCredit($scope.voucher.Journals, -1);
var destination = getDebitCredit($scope.voucher.Journals, 1);
$location.path('/Issue/' + date).search({Source: source, Destination: destination});
};
$scope.preventAlteration = function (voucher) {
if (typeof voucher.VoucherID === 'undefined') {
return !$scope.perms['Issue'];
} else if (voucher.Posted && !$scope.perms['Edit Posted Vouchers']) {
return true;
} else if (voucher.User.UserID != $scope.auth.UserID && !$scope.perms["Edit Other User's Vouchers"]) {
return true;
} else {
return false;
}
};
$scope.get = function (voucherid) {
$scope.voucher = Voucher.get({id: voucherid}, function (u, putResponseHeaders) {
$location.path('/Issue/' + u.VoucherID);
}, function (data, status) {
$scope.toasts.push({Type: 'Danger', Message: data.data});
});
};
$scope.save = function () {
if (angular.isDate($scope.voucher.Date)) {
$scope.voucher.Date = dateFilter($scope.voucher.Date, 'dd-MMM-yyyy');
}
$scope.voucher.$save({type: 'Issue'}, function (u, putResponseHeaders) {
$scope.toasts.push({Type: 'Success', Message: ''});
$scope.redirectOnSave(u);
}, function (data, status) {
$scope.toasts.push({Type: 'Danger', Message: data.data});
});
};
$scope.delete = function () {
return $scope.voucher.$delete(function (u, putResponseHeaders) {
$scope.toasts.push({Type: 'Success', Message: ''});
var date = u.Date;
var source = getDebitCredit(u.Journals, -1);
var destination = getDebitCredit(u.Journals, 1);
$location.path('/Issue/' + date).search({Source: source, Destination: destination}).replace();
}, function (data, status) {
$scope.toasts.push({Type: 'Danger', Message: data.data});
});
};
$scope.redirectOnSave = function (voucher) {
if (typeof $routeParams.Source !== 'undefined' && typeof $routeParams.Destination !== 'undefined' && typeof $routeParams.id !== 'undefined') {
Voucher.get({type: 'Issue', Date: $routeParams.id, Source: $routeParams.Source, Destination: $routeParams.Destination}, function (u, putResponseHeaders) {
$scope.voucher = u;
});
$scope.smallGrid = IssueGrid.query({date: $routeParams.id, Source: $routeParams.Source, Destination: $routeParams.Destination});
} else {
var date = voucher.Date;
var source = getDebitCredit(voucher.Journals, -1);
var destination = getDebitCredit(voucher.Journals, 1);
$location.path('/Issue/' + date).search({Source: source, Destination: destination});
}
};
$scope.modal = function (inventory) {
$scope.selectedInventory = inventory;
var edit = {};
angular.copy($scope.selectedInventory, edit);
var modalInstance = $modal.open({
backdrop: true,
templateUrl: '/partial/issue-modal.html',
controller: IssueModalCtrl,
resolve: {edit: function () {
return edit;
}}
});
modalInstance.result.then(function (updated) {
if (updated.Product.ProductID !== $scope.selectedInventory.Batch.Product.ProductID) {
var oldInventory = getOldInventory(updated.Batch.Product.ProductID, $scope.voucher.Inventories);
if (typeof oldInventory !== 'undefined') {
delete $scope.selectedInventory;
return false;
}
}
angular.copy(updated, $scope.selectedInventory);
delete $scope.selectedInventory;
}, function () {
delete $scope.selectedInventory;
});
};
$scope.confirm = function () {
var modalInstance = $modal.open({
backdrop: true,
templateUrl: '/template/modal/confirm.html',
controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) {
$scope.title = "Delete Voucher";
$scope.body = "Are you sure? This cannot be undone.";
$scope.isDelete = true;
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
}]
});
modalInstance.result.then(function () {
return $scope.delete();
});
return modalInstance;
};
$scope.batches = function ($viewValue) {
var params = {term: $viewValue, count: 20};
if (angular.isDate($scope.voucher.Date)) {
params.date = dateFilter($scope.voucher.Date, 'dd-MMM-yyyy');
} else {
params.date = $scope.voucher.Date;
}
return Batch.autocomplete(params).$promise;
};
}];
IssueCtrl.resolve = {
voucher: ['$route', 'Voucher', function ($route, Voucher) {
var id = $route.current.params.id,
source = $route.current.params.Source,
destination = $route.current.params.Destination;
if (typeof source !== 'undefined' && typeof destination !== 'undefined' && typeof id !== 'undefined') {
return Voucher.get({type: 'Issue', Date: id, Source: source, Destination: destination}).$promise;
} else if (typeof source === 'undefined' && typeof destination === 'undefined' && typeof id !== 'undefined') {
return Voucher.get({id: id}).$promise;
} else {
return Voucher.get({type: 'Issue'}).$promise;
}
}],
issue_grid: ['$route', 'IssueGrid', function ($route, IssueGrid) {
var id = $route.current.params.id,
source = $route.current.params.Source,
destination = $route.current.params.Destination;
if (typeof source !== 'undefined' && typeof destination !== 'undefined' && typeof id !== 'undefined') {
return IssueGrid.query({date: id, Source: source, Destination: destination}).$promise;
} else if (typeof source === 'undefined' && typeof destination === 'undefined' && typeof id !== 'undefined') {
return IssueGrid.query({date: id}).$promise;
} else {
return [];
}
}],
cost_centers: ['CostCenter', function (CostCenter) {
return CostCenter.query({}).$promise;
}]
};
var IssueModalCtrl = ['$scope', '$modalInstance', 'edit', 'Batch', function ($scope, $modalInstance, edit, Batch) {
$scope.edit = edit;
$scope.ok = function () {
$scope.edit.Product = $scope.edit.Batch.Product;
$scope.edit.Quantity = Number($scope.edit.Quantity);
$scope.edit.Tax = $scope.edit.Batch.Tax;
$scope.edit.Discount = $scope.edit.Batch.Discount;
$scope.edit.Rate = $scope.edit.Batch.Rate;
$scope.edit.Amount = $scope.edit.Quantity * $scope.edit.Rate * (1 + $scope.edit.Tax) * (1 - $scope.edit.Discount);
$modalInstance.close($scope.edit);
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
$scope.batches = function ($viewValue) {
return Batch.autocomplete({term: $viewValue, count: 20}).$promise;
};
}];