angular.module('kalgudiApp.profile').controller('offlineProfileUpdateController', ["$scope", "$rootScope", "$state", "kalgudiLiterals", "programsFactory", "pageServices", "$injector", "NgMap","$timeout", function($scope, $rootScope, $state, kalgudiLiterals, assistServices, pageServices, $injector, NgMap,$timeout) { //For mobile App only if((window.location.pathname.indexOf('mobile_index')>-1)){ cordovaLocationServices = $injector.get("cordovaLocationServices"); $ionicPopup = $injector.get("$ionicPopup"); } $scope.geoFenceLiterals = kalgudiLiterals; // On page reload, storing program ID to $rootScope for further use $rootScope.programId = $state.params.programId; // Form data structure $scope.cropData = { crop: '', cropId: '', type: '', typeId: '', year: '', season: '', acres: '', nurseryDate: '', } /** documents Declarations*/ $scope.documents =[] $scope.document ={ 'title': '', 'description':'', 'images': [], 'attachments':[] }; $scope.resetDocument = function(){ $scope.document ={ 'title': '', 'description':'', 'images': [], 'attachments':[] }; } $scope.addDocument = function(){ $scope.documents.push($scope.document); $scope.enableDocument(); $scope.resetDocument(); } $scope.deleteDocument = function(index) { $scope.documents.splice(index, 1); } //openAddDocument function it will load Form section /** * Toggle display of answer attachments box. */ $scope.toggleAttachments = function () { // $scope.isAnsAttachmentsVisible = !$scope.isAnsAttachmentsVisible; // if ($scope.isAttachOpen) // $('.attach-toggle').closeFAB(); // else // $('.attach-toggle').openFAB(); $scope.isAttachOpen = !$scope.isAttachOpen; } // To hide attachment options on elsewhere click angular.element(document).on("click", function (e) { $scope.$apply(function () { if (e.toElement.className != 'material-icons') { if ($scope.isAttachOpen) { // $('.attach-toggle').closeFAB(); $scope.isAttachOpen = false; } } if (e.toElement.name !== 'quote-modal') $scope.isQuoteShown = false; }); }); $scope.enableDocument = function() { $scope.opendoc = !$scope.opendoc; } /** -----------------------------upload Attachments Starts-----------------*/ if (IS_MOBILE_DEVICE) { $rootScope.$on("uploadedS3URL", function (event, objectS3URL) { if(objectS3URL) { if(objectS3URL.msgType == 'IMAGE'){ $scope.document.images.push(objectS3URL); console.log("Image=="+objectS3URL); } else if(objectS3URL.msgType == 'DOCUMENT') { $scope.document.attachments.push(objectS3URL); console.log("Image=="+objectS3URL); } } }); } /** -----------------------------upload Attachments ends-----------------*/ // Will be called to update crop detail $scope.updateCrop = function() { if (validateForm()) { $scope.cropData.cropId = getCropId($scope.cropData.crop) || ""; $scope.cropData.typeId = ''; if (detectmob()) { $scope.cropData.nurseryDate = $scope.datepickerObject.nurseryDate || ''; } else { $scope.cropData.nurseryDate = $scope.AvailableProgramsDate; } saveCropDetails($scope.cropData); } } // To get list of crops available for current program $scope.getCropList = function() { if (!$rootScope.networkAvaliable && window.localStorage['cropFor' + $state.params.programId]) { $scope.cropList = JSON.parse(window.localStorage['cropFor' + $state.params.programId]); return; } $scope.crops = {} var cropList = []; pageServices.getRangeToFilterSubscribers($state.params.programId).then(function(response) { $scope.rangeData = JSON.parse(response.data); $scope.crops = $scope.rangeData.products; $scope.cropList = _.toArray($scope.crops); window.localStorage['cropFor' + $state.params.programId] = JSON.stringify($scope.cropList); }); } $scope.isFormDirty = function() { $rootScope.commentValidationFlag = true; } // To initialize the work $scope.init = function() { if (detectmob()) { lazysync = $injector.get('lazysync'); } $scope.getCropList(); } // Callback method on date selection var datePickerCallback = function(val) { if (typeof(val) === 'undefined') {; } else { if (typeof(val) === "number") { $scope.datepickerObject.nurseryDate.setHours(0); $scope.datepickerObject.nurseryDate.setMinutes(0); var date = $scope.datepickerObject.nurseryDate.getTime(); $scope.datepickerObject.nurseryDate = new Date(date + (val * 1000)); } else { $scope.datepickerObject.nurseryDate = val; } $scope.datepickerObject.inputEpochTime = (($scope.datepickerObject.nurseryDate.getHours() * 60 * 60) + ($scope.datepickerObject.nurseryDate.getMinutes() * 60)); if (!$scope.datepickerObject.inputEpochTime) { $scope.datepickerObject.inputEpochTime = 60; } } }; var date = new Date(); // Date picker object $scope.datepickerObject = { /*from : new Date(),*/ to: date, todayLabel: 'Today', closeLabel: 'Close', inputDate: "", step: "1", format: "12", callback: function(val) { //Mandatory datePickerCallback(val); } } /*date object for thr webapp*/ $scope.AvailableProgramsDate = new Date(); $scope.ExpireDate = new Date(); $scope.dateFormat = 'dd-MMM-yy'; $scope.availableProgramsDateOptions = { formatYear: 'yy', startingDay: 1, minDate: new Date(1995, 5, 22), maxDate: $scope.ExpireDate }; $scope.ProramsavailableDatePopupForToDate = { opened: false } $scope.openDatePrograms = function() { $scope.ProramsavailableDatePopupForToDate.opened = !$scope.ProramsavailableDatePopupForToDate.opened; } /*date object for thr webapp*/ // To show 21 years in dropDown select box $scope.cropData.year = date.getFullYear(); // Selecting current year as cultivation year var start = $scope.cropData.year - 10; // Minus 10 years from current year var end = $scope.cropData.year + 10; // Plus 10 years to current year $scope.yearArray = []; for (var i = start; i <= end; i++) { $scope.yearArray.push(i); } // Will check for input status and enable error flag, if any function validateForm() { // Checking crop selection status if (!$scope.cropData.crop) { $scope.cropNameErrorFlag = true; return false; } else { $scope.cropNameErrorFlag = false; } // Checking seed verity selection status if (!$scope.cropData.type) { $scope.cropTypeErrorFlag = true; return false; } else { $scope.cropTypeErrorFlag = false; } // Checking cultivation season selection status if (!$scope.cropData.season) { $scope.cropSeasonErrorFlag = true; return false; } else { $scope.cropSeasonErrorFlag = false; } // Checking cultivation acreage if (!$scope.cropData.acres) { $scope.cropAreaErrorFlag = true; return false; } else { $scope.cropAreaErrorFlag = false; } return true; } // Will get an ID of given crop name function getCropId(cropName) { for (crop in $scope.crops) { if ($scope.crops[crop] == cropName) { return crop; } } return undefined; } function saveCropDetails(cropDetails) { $rootScope.spinerisActive = true; if($scope.documents.length > 0){ $scope.landDetails.documents = $scope.documents; $scope.documents = []; } var requestObj = { "cropId": cropDetails.cropId, "cropName": cropDetails.crop, "varietyId": cropDetails.typeId, "varietyName": cropDetails.type, "season": cropDetails.season, "acres": cropDetails.acres, "year": cropDetails.year, "nurseryDate": cropDetails.nurseryDate, "assistantDetails": { "profileKey": $rootScope.loggedInUserBusinessProfile.profileKey, "firstName": $rootScope.loggedInUserBusinessProfile.firstName, "profilePicURL": $rootScope.loggedInUserBusinessProfile.profilePicUrl }, "userLandDetails": $scope.landDetails } if ($rootScope.networkAvaliable || !detectmob()) { // Calling save method to store crop details on server. var profilekey = $state.params.userId || $scope.selectedSubscriber.profileKey; assistServices.updateCropDetails($rootScope.programId, profilekey, requestObj) .then(function(response) { $rootScope.spinerisActive = false; if (response.code == 201) { $rootScope.commentValidationFlag = false; if (detectmob()) { $rootScope.commonTopErrorAlert('Crop details added successfully'); history.back(); } else { $rootScope.showSuccessMessage('Crop details', 'Crop details added successfully'); $scope.toggleCropdetails(); $scope.getCropDetails($scope.request.offset, $scope.request.limit); } } else if (response.code == 400) { $rootScope.showErrorMessage('Crop details', 'Faild to save crop details'); $rootScope.commonTopErrorAlert('Faild to save crop details'); } }); } else { // Storing crop details on localStorage, will be synced when device gets connected to Internet. requestObj.programId = $rootScope.programId; requestObj.userId = $state.params.userId; $rootScope.commentValidationFlag = false; lazysync.addToStaging(requestObj, lazysync.STAGING_TYPE.CROP_DETAIL); $rootScope.commonTopErrorAlert('Your updates will be synced later when network comes back.'); $rootScope.spinerisActive = false; history.back(); return; $rootScope.spinerisActive = false; var cropList = []; if (window.localStorage['crop' + $state.params.userId]) { cropList = JSON.parse(window.localStorage['crop' + $state.params.userId]); } cropList.push(cropDetails); window.localStorage['crop' + $state.params.userId] = JSON.stringify(cropList); } } $scope.landDetails = { "landArea": "", "landRegNumber": "", "location": "", "soilType": "", "lat": "", "lng": "", "geoLocation": "", "descriptionForLand": "", "areaOfGeoFence": "", "locationOfGeoFence": "", "geoFencelatlngs": [], "markerGeofence": [], "documents":[], Flag: false, view: false } var optionsmaps = { enableHighAccuracy: false, timeout: 3000, maximumAge: 1000 }; $scope.resetMapDetails = function() { $scope.landDetails.landArea = ""; $scope.landDetails.landRegNumber = ""; $scope.landDetails.landfarmerRegNumber = ""; $scope.landDetails.location = ""; $scope.landDetails.soilType = ""; $scope.landDetails.geoLocation = ""; $scope.landDetails.Flag = false; $scope.landDetails.view = false; $scope.landDetails.geoFencelatlngsArray = []; $scope.landDetails.areaOfGeoFence = ""; $scope.landDetails.locationOfGeoFence = ""; $scope.landDetails.geoFencelatlngs = []; $scope.landDetails.markerGeofence = []; } if ((window.location.pathname.indexOf('mobile_index') > -1)) { $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_START_FENCE'); $ionicModal = $injector.get("$ionicModal"); $ionicModal.fromTemplateUrl('app/themes/mobile_app/myprofile/templates/view/tapPointsToFence.html', { scope: $scope, animation: 'slide-in-up' }).then(function(modal) { $scope.fencemodal = modal; }); $ionicModal.fromTemplateUrl('app/themes/mobile_app/myprofile/templates/view/drawfenceonmap.html', { scope: $scope, animation: 'slide-in-up' }).then(function(modal) { $scope.fenceonmapmodal = modal; }); //navigator.geolocation.getCurrentPosition(onSuccessMap, onErrorMap,optionsmaps); }; $scope.openFenceModal = function() { $scope.landDetails.geoFencelatlngs = []; $scope.landDetails.geoFencelatlngsArray = []; $scope.fencemodal.show(); }; $scope.deleteFence = function() { $scope.landDetails.geoFencelatlngs = []; $scope.landDetails.geoFencelatlngsArray = []; $scope.landDetails.markerGeofence = []; }; $scope.resetTapPoints = function() { $scope.isStart = false; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_START_FENCE'); if (myinterval) clearInterval(myinterval); } var myinterval; $scope.isStart = false; $scope.isVerifying = true; $scope.canAccessLocation = true; $scope.startMode = false; $scope.verifyGpsAuthority = function(){ $scope.openFenceModal(); if(!cordova || !cordova.plugins || !cordova.plugins.diagnostic || !cordova.plugins.locationAccuracy){ $scope.startMode = true; $scope.canAccessLocation = true; $scope.isVerifying = true; $scope.gpsTurnedOff = true; console.log('cordova.plugins.diagnostic not available'); }else{ cordovaLocationServices.isLocationAuthorized().then(function(locationStatus){ $scope.isVerifying = false; $scope.helpText = ''; if(!locationStatus){ $scope.canAccessLocation = false; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_ACCESS_LOCATION'); }else{ $scope.canAccessLocation = true; $scope.checkGpsStatus(); } }); } }; $scope.checkGpsStatus = function(){ $scope.isVerifying = true; cordovaLocationServices.isLocationEnabled().then(function(status){ $scope.isVerifying = false; if(status){ $scope.startMode = true; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_START_FENCE'); $scope.gpsTurnedOff = false; }else{ $scope.gpsTurnedOff = true; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_ENABLE_GPS'); } }); }; $scope.getMyCurrentPositionTime = function() { $scope.isStart = true; $scope.count = 0; $scope.buttonText = "FETCHING"; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_STOP_FENCE'); $scope.getLocation(); } $scope.allowKagudiToAccessLocation = function(){ cordovaLocationServices.requestForAccessLocation().then(function(response){ console.log(response); if(response == 'GRANTED'){ $scope.canAccessLocation = true; $scope.checkGpsStatus(); } }); }; $scope.requestForTurnOnGPS = function(){ cordovaLocationServices.requestForTurnOnGPS().then(function(response){ if(response){ $scope.startMode = true; $scope.gpsTurnedOff = false; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_START_FENCE'); } }); }; var onSuccessMap = function(position) { var geoFencelatlngs = []; var latlng = { "lat": "", "lng": "" } latlng.lat = position.coords.latitude; latlng.lng = position.coords.longitude; //geoFencelatlngs.push(latlng); console.log('lat: ' + position.coords.latitude); console.log('lat: ' + position.coords.longitude); $scope.landDetails.geoFencelatlngs.push(latlng); $rootScope.spinnerActiveblock = false; }; function onErrorMap(error) { if (error.code == 3) { } else { alert(error.message); } } $scope.getLocation=function(){ $scope.errorCount = 0; $scope.alertIcon = false; navigator.geolocation.getCurrentPosition(successCallback, errorCallback, optionsmaps); function successCallback(position) { $scope.errorCount = 0; console.log('sucess '+position); myinterval = setInterval(function(){ navigator.geolocation.getCurrentPosition(onSuccessMap, onErrorMap,optionsmaps); $scope.count += 1; }, 2000); } function errorCallback(error) { console.log('Error '+error); $scope.errorCount += 1; if($scope.errorCount > 3){ $scope.errorCount = 0; $scope.$apply(function () { $scope.resetTapPoints(); }); if(error.code==3){ $scope.alertIcon = true; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_ERROR_MSG'); }else{ $scope.helpText = error.message; } }else{ $timeout(function(){ navigator.geolocation.getCurrentPosition(successCallback, errorCallback, optionsmaps); },400); } }; } $scope.endGeoLocationTime=function(){ $scope.isStart=false; console.log('length of latlag Array is '+$scope.landDetails.geoFencelatlngs.length); if($scope.landDetails.geoFencelatlngs.length > 2){ $scope.closFenceeModal(); $scope.openfenceonmapmodal(); }else{ $scope.alertIcon = true; $scope.helpText = $scope.geoFenceLiterals.searchByKey('GEO_ERROR_MSG'); } clearInterval(myinterval); } $scope.closFenceeModal = function() { if ($scope.landDetails.geoFencelatlngs.length > 2) $scope.landDetails.geoFencelatlngs.push($scope.landDetails.geoFencelatlngs[0]); $scope.fencemodal.hide(); $scope.resetTapPoints(); }; $scope.addressNameusingCoordinate = function(latlng) { var geocoder = new google.maps.Geocoder; var latlng = { lat: parseFloat(latlng[0]), lng: parseFloat(latlng[1]) }; geocoder.geocode({ 'location': latlng }, function(results, status) { if (status === 'OK') { if (results[0]) { $scope.landDetails.locationOfGeoFence = results[0].formatted_address; if (results[0].address_components[0] && results[0].address_components[0].long_name == "Unnamed Road") { if ($scope.landDetails.locationOfGeoFence.includes(results[0].address_components[1].long_name)) { $scope.landDetails.locationOfGeoFence = $scope.landDetails.locationOfGeoFence.replace("Unnamed Road,", ""); } else { $scope.landDetails.locationOfGeoFence = $scope.landDetails.locationOfGeoFence.replace("Unnamed Road", results[0].address_components[1].long_name); } } } } }); } $scope.centerforpolygon = function() { var center = []; for (var i in $scope.landDetails.geoFencelatlngs) { var center1 = [$scope.landDetails.geoFencelatlngs[i].lat, $scope.landDetails.geoFencelatlngs[i].lng]; center.push(center1); } //$scope.landDetails.drawpolygon=center; return center; } $scope.openfenceonmapmodal = function(view) { NgMap.getMap().then(function(map) { var currCenter = map.getCenter(); google.maps.event.trigger(map, 'resize'); map.setCenter(currCenter); }); if (view) { if (view != 'true') $scope.landDetails = Object.assign({}, view); $scope.landDetails.view = true; } else { var ploygonCenter = mobilepolygonCenter(createpatharray()); var area = google.maps.geometry.spherical.computeArea(createpatharray()); $scope.landDetails.areaOfGeoFence = (0.000022957 * area).toFixed(3) + " acres"; $scope.landDetails.markerGeofence = [ploygonCenter.lat(), ploygonCenter.lng()]; $scope.addressNameusingCoordinate($scope.landDetails.markerGeofence); } $scope.landDetails.geoFencelatlngsArray = $scope.centerforpolygon(); $scope.fenceonmapmodal.show(); }; function mobilepolygonCenter(poly) { var lowx, highx, lowy, highy, lats = [], lngs = [], vertices = poly for (var i = 0; i < vertices.length; i++) { lngs.push(vertices[i].lng()); lats.push(vertices[i].lat()); } lats.sort(); lngs.sort(); lowx = lats[0]; highx = lats[vertices.length - 1]; lowy = lngs[0]; highy = lngs[vertices.length - 1]; center_x = lowx + ((highx - lowx) / 2); center_y = lowy + ((highy - lowy) / 2); return (new google.maps.LatLng(center_x, center_y)); } function createpatharray() { var center = []; for (var i in $scope.landDetails.geoFencelatlngs) { var center1 = new google.maps.LatLng($scope.landDetails.geoFencelatlngs[i].lat, $scope.landDetails.geoFencelatlngs[i].lng); center.push(center1); } return center; } $scope.confirmResetFence = function() { var confirmPopup = $ionicPopup.confirm({ title: $scope.geoFenceLiterals.searchByKey('GEO_CONFIRM_TEXT'), template: $scope.geoFenceLiterals.searchByKey('GEO_CONFIRM_FENCE') }); confirmPopup.then(function(res) { if (res) { $scope.resetMapDetails(); $scope.closfenceonmapmodal(); } }); }; $scope.closfenceonmapmodal = function() { if ($scope.landDetails.view && $scope.hasOwnProperty('resetLand')) { $scope.resetLand(); } $scope.fenceonmapmodal.hide(); }; $scope.gotoFenceSelection = function() { $scope.selectTypeOfGeolocation = true; }; $scope.closeFenceSelection = function() { $scope.selectTypeOfGeolocation = false; } $scope.block_fencedetails = false; $scope.expandfencedetails = function(argument) { $scope.block_fencedetails = !$scope.block_fencedetails; $scope.maps_modal = false; // body... } $scope.maps_modal = false; $scope.maps_modalFlag = function() { $scope.maps_modal = !$scope.maps_modal; }; // Will begin the execution $scope.init(); } ]);