1// Generated by CoffeeScript 1.12.7 2(function() { 3 var CollateralHistoryController, CollateralHistoryGridController, CollateralHistoryItemController, CollateralLoanStatusDialogController, CollateralNoteDialogController, EditCollateralHistoryController, UpdateValuationDialogController, base, module, 4 indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; 5 6 if (this.spreadnet == null) { 7 this.spreadnet = {}; 8 } 9 10 this.spreadnet.collateralFilesDialogCtrl = function($scope, $http, Upload, $timeout, CollateralHistoryModel, PendingRequests, feedback, MessiService) { 11 var alreadyNames, attachmentByName, buildNewAttachments, collateralItem, editionFocus, emptyItem, eventBus, finishScreen, hide, nextSDtimeout, nextUEWtimeout, save, saveImmediately, signalDeleted, triggerUploadErrorWarning, uploadErrorWarning; 12 eventBus = spreadnet.eventBus; 13 editionFocus = spreadnet.editionFocus; 14 emptyItem = { 15 attachments: [] 16 }; 17 alreadyNames = []; 18 collateralItem = emptyItem; 19 saveImmediately = false; 20 $scope.collateralItem = emptyItem; 21 $scope.attachments = []; 22 $scope.showing = false; 23 $scope.show = function(payload) { 24 var item; 25 item = (payload != null ? payload.item : void 0) || emptyItem; 26 saveImmediately = !!(payload != null ? payload.immediate : void 0); 27 collateralItem = item; 28 $scope.collateralItem = collateralItem; 29 $scope.attachments = angular.copy(collateralItem.attachments || []); 30 return $scope.showing = true; 31 }; 32 $scope.splitJoin = function(str, len) { 33 var re; 34 re = new RegExp(".{1," + len + "}", 'g'); 35 return str.match(re).join('â'); 36 }; 37 hide = function() { 38 $scope.showing = false; 39 return editionFocus.close(); 40 }; 41 finishScreen = function() { 42 hide(); 43 return $timeout(function() { 44 $scope.attachments = []; 45 collateralItem = emptyItem; 46 return $scope.collateralItem = emptyItem; 47 }); 48 }; 49 buildNewAttachments = function() { 50 var attachment, newAttachments; 51 newAttachments = (function() { 52 var i, len1, ref, results; 53 ref = $scope.attachments; 54 results = []; 55 for (i = 0, len1 = ref.length; i < len1; i++) { 56 attachment = ref[i]; 57 if (!attachment.status) { 58 results.push({ 59 _id: attachment._id, 60 name: attachment.name.replaceCharsForUpload(), 61 date: attachment.date 62 }); 63 } 64 } 65 return results; 66 })(); 67 newAttachments.sort(function(a, b) { 68 var s; 69 s = function(a, b) { 70 if (a === b) { 71 return 0; 72 } else if (a < b) { 73 return -1; 74 } else { 75 return 1; 76 } 77 }; 78 return s(a.name, b.name); 79 }); 80 return newAttachments; 81 }; 82 save = function() { 83 var failedUploads, performSave; 84 performSave = function() { 85 var saveError, saveSuccess; 86 collateralItem.attachments = buildNewAttachments(); 87 if (saveImmediately) { 88 saveSuccess = function(savedItem) { 89 collateralItem = savedItem; 90 finishScreen(); 91 return feedback.timedSuccess("Documentos atualizados com sucesso."); 92 }; 93 saveError = function(error) { 94 return feedback.timedError(error.message); 95 }; 96 return CollateralHistoryModel.save(collateralItem, false, saveSuccess, saveError); 97 } else { 98 return finishScreen(); 99 } 100 }; 101 failedUploads = function() { 102 var attachment, i, len1, ref; 103 ref = $scope.attachments; 104 for (i = 0, len1 = ref.length; i < len1; i++) { 105 attachment = ref[i]; 106 if (attachment.status === 'uploadError') { 107 return true; 108 } 109 } 110 }; 111 if (saveImmediately && failedUploads()) { 112 return MessiService.confirmDialog("Os arquivos cujo carregamento falhou serão excluÃdos. Continuar?").then(function(answer) { 113 if (answer) { 114 return performSave(); 115 } 116 }); 117 } else { 118 return performSave(); 119 } 120 }; 121 $scope.ok = function() { 122 return save(); 123 }; 124 $scope.cancel = function() { 125 return finishScreen(); 126 };
127 eventBus.subscribe('collateralFilesDialog', $scope.show, $scope); 128 $scope.uploading = function() { 129 return PendingRequests.pending(function(url) { 130 return url === 'upload_collateral'; 131 }); 132 }; 133 $scope.notDeleted = function(attachment) { 134 var ref; 135 return (ref = attachment.status) !== 'deleted' && ref !== 'deleted2'; 136 }; 137 attachmentByName = function(name) { 138 var att, i, len1, ref; 139 ref = $scope.attachments; 140 for (i = 0, len1 = ref.length; i < len1; i++) { 141 att = ref[i]; 142 if (att.name === name) { 143 return att; 144 } 145 } 146 }; 147 $scope.onFileSelect = function($files) { 148 var file, largeFiles, largeFilesStr, message, uploadFiles; 149 if (!$files) { 150 return; 151 } 152 uploadFiles = function() { 153 var file, i, inputFile, len1, process, results, upload; 154 results = []; 155 for (i = 0, len1 = $files.length; i < len1; i++) { 156 inputFile = $files[i]; 157 if (!(inputFile.size <= 15728640)) { 158 continue; 159 } 160 file = new File([inputFile], inputFile.name.replaceCharsForUpload()); 161 upload = function(file, already) { 162 var addToAttachments, upItem; 163 addToAttachments = function() { 164 var att, withUploadError, withoutUploadError; 165 $scope.attachments.unshift({ 166 _id: sn.u.UUID(), 167 name: file.name, 168 date: sn.d.fileLastModifiedDate(file).toYMD() 169 }); 170 withUploadError = (function() { 171 var j, len2, ref, results1; 172 ref = $scope.attachments; 173 results1 = []; 174 for (j = 0, len2 = ref.length; j < len2; j++) { 175 att = ref[j]; 176 if (att.status === 'uploadError') { 177 results1.push(att); 178 } 179 } 180 return results1; 181 })(); 182 withoutUploadError = (function() { 183 var j, len2, ref, results1; 184 ref = $scope.attachments; 185 results1 = []; 186 for (j = 0, len2 = ref.length; j < len2; j++) { 187 att = ref[j]; 188 if (att.status !== 'uploadError') { 189 results1.push(att); 190 } 191 } 192 return results1; 193 })(); 194 if (withUploadError.length) { 195 return $scope.attachments = withUploadError.concat(withoutUploadError); 196 } 197 }; 198 return upItem = Upload.upload({ 199 url: 'upload_collateral', 200 data: { 201 collateralId: collateralItem._id, 202 date: sn.d.fileLastModifiedDate(file).toYMD() 203 }, 204 file: file 205 }).success(function() { 206 var att; 207 if (!already) { 208 addToAttachments(); 209 } 210 if (att = attachmentByName(file.name)) { 211 return att.status = ''; 212 } 213 }).error(function() { 214 var att; 215 if (!already) { 216 addToAttachments(); 217 } 218 if (att = attachmentByName(file.name)) { 219 att.status = 'uploadError'; 220 } 221 return triggerUploadErrorWarning(); 222 }); 223 }; 224 results.push((process = function(file) { 225 var att, attachment, confirmReplace, invalidCharMsg, ref, ref1; 226 alreadyNames = (function() { 227 var j, len2, ref, results1; 228 ref = $scope.attachments; 229 results1 = []; 230 for (j = 0, len2 = ref.length; j < len2; j++) { 231 att = ref[j]; 232 results1.push(att.name); 233 } 234 return results1; 235 })(); 236 attachment = attachmentByName(file.name); 237 confirmReplace = function() { 238 return MessiService.confirmDialog("Já existe o arquivo " + file.name + ". Deseja substituÃ-lo?").then(function(answer) { 239 if (answer) { 240 return upload(file, true); 241 } 242 }); 243 }; 244 invalidCharMsg = function() { 245 if (inputFile.name !== file.name) { 246 return MessiService.alertDialog("<b>Foram alterados caracteres não permitidos no nome do arquivo</b><br><br><b>Nome anterior:</b><br>" + inputFile.name + "<br><br><b>Nome novo:</b><br>" + file.name); 247 } 248 }; 249 if (ref = file.name, indexOf.call(alreadyNames, ref) >= 0) { 250 if (attachment.status === 'deleted') { 251 MessiService.confirmDialog("O arquivo " + file.name + " foi removido. Deseja restaurá-lo?").then(function(answer) { 252 if (answer) { 253 attachment.status = ''; 254 return confirmReplace(); 255 } 256 }); 257 } else if ((ref1 = attachment.status) === 'deleted2' || ref1 === 'uploadError') { 258 upload(file, true); 259 } else if (!attachment.status) { 260 confirmReplace(); 261 } 262 } else { 263 upload(file); 264 } 265 return invalidCharMsg(); 266 })(file)); 267 } 268 return results; 269 }; 270 largeFiles = (function() { 271 var i, len1, results; 272 results = []; 273 for (i = 0, len1 = $files.length; i < len1; i++) { 274 file = $files[i]; 275 if (file.size > 15728640) { 276 results.push(file.name.replaceCharsForUpload()); 277 } 278 } 279 return results; 280 })(); 281 if (largeFiles.length) { 282 largeFilesStr = largeFiles.join("<br/>"); 283 message = largeFiles.length > 1 ? "Os arquivos<br/>" + largeFilesStr + "<br/>tem mais de 15MB e não serão carregados." : "O arquivo<br/>" + largeFiles[0] + "<br/>tem mais de 15MB e não será carregado."; 284 feedback.timedWarning(message); 285 } 286 return uploadFiles(); 287 }; 288 uploadErrorWarning = false;
289 nextUEWtimeout = ''; 290 triggerUploadErrorWarning = function() { 291 uploadErrorWarning = true; 292 if (nextUEWtimeout) { 293 $timeout.cancel(nextUEWtimeout); 294 } 295 return nextUEWtimeout = $timeout((function() { 296 return uploadErrorWarning = false; 297 }), 5000); 298 }; 299 $scope.uploadError = function(att) { 300 return att.status === 'uploadError'; 301 }; 302 $scope.uploadErrorWarning = function() { 303 return uploadErrorWarning; 304 }; 305 $scope.removeAttachment = function(todel) { 306 var att, i, len1, ref, results; 307 ref = $scope.attachments; 308 results = []; 309 for (i = 0, len1 = ref.length; i < len1; i++) { 310 att = ref[i]; 311 if (att._id === todel._id) { 312 if (att.status === 'uploadError') { 313 results.push(att.status = 'deleted2'); 314 } else { 315 att.status = 'deleted'; 316 results.push(signalDeleted(att)); 317 } 318 } 319 } 320 return results; 321 }; 322 $scope.lastDeleted = {}; 323 nextSDtimeout = ''; 324 signalDeleted = function(att) { 325 if (nextSDtimeout) { 326 $timeout.cancel(nextSDtimeout); 327 } 328 $scope.lastDeleted = att; 329 return nextSDtimeout = $timeout((function() { 330 return $scope.lastDeleted = {}; 331 }), 5000); 332 }; 333 $scope.recoverDeleted = function() { 334 if ($scope.lastDeleted._id) { 335 $scope.lastDeleted.status = ''; 336 return $scope.lastDeleted = {}; 337 } 338 }; 339 return $scope.download = function(att) { 340 var downloadErrorResponse, param; 341 downloadErrorResponse = function() { 342 return feedback.timedError("Erro na obtenção do arquivo " + att.name + "."); 343 }; 344 if (!att.status) { 345 param = { 346 collateralId: collateralItem._id, 347 name: att.name 348 }; 349 return $http.post('download_collateral', param).success(function(data) { 350 var link, trimmedData; 351 trimmedData = (data != null ? data.trim() : void 0) || ''; 352 if (/^http/.test(trimmedData)) { 353 link = $("#collateralFilesDownload"); 354 link.attr('href', data); 355 return link[0].click(); 356 } else { 357 return downloadErrorResponse(); 358 } 359 }).error(function() { 360 return downloadErrorResponse(); 361 }); 362 } 363 }; 364 }; 365 366 module = this.angular.module('snCollateralHistory'); 367 368 CollateralHistoryController = function($scope, CollateralHistoryModel, CollateralHistorySettings, feedback) { 369 var editionFocus, scroller; 370 scroller = spreadnet.utils.scroll.Scroller(); 371 editionFocus = spreadnet.editionFocus; 372 $scope.settings = CollateralHistorySettings; 373 $scope.mode = "grid"; 374 $scope.calculating = false; 375 $scope.exporting = false; 376 $scope.collateralCurrentHistory = null; 377 $scope.startCalculation = function() { 378 return $scope.calculating = true; 379 }; 380 $scope.stopCalculation = function() { 381 return $scope.calculating = false; 382 }; 383 $scope.newCollateralHistory = function() { 384 $scope.collateralCurrentHistory = null; 385 return $scope.inEditMode(); 386 }; 387 $scope.editCollateralHistory = function(collateralHistory) { 388 $scope.collateralCurrentHistory = collateralHistory; 389 return $scope.inEditMode(); 390 }; 391 $scope.inEditMode = function() { 392 if ($scope.gridMode) { 393 scroller.saveTop(); 394 } 395 $scope.mode = "edit"; 396 return editionFocus.show(); 397 }; 398 $scope.inGridMode = function() { 399 editionFocus.close(); 400 if ($scope.editMode) { 401 scroller.restore(); 402 } 403 return $scope.mode = "grid"; 404 }; 405 return $scope["export"] = function() { 406 $scope.exporting = CollateralHistoryModel.calculating; 407 return CollateralHistoryModel.reportFile().then(function(result) { 408 var link, trimmedResult; 409 trimmedResult = (result != null ? result.trim() : void 0) || ''; 410 if (/^http/.test(trimmedResult)) { 411 link = $("#collateralHistoryFileDownload"); 412 link.attr('href', result); 413 link[0].click();
414 return $scope.exporting = false; 415 } 416 }); 417 }; 418 }; 419 420 (function() { 421 var config; 422 config = ['$scope', 'CollateralHistoryModel', 'CollateralHistorySettings', 'feedback', CollateralHistoryController]; 423 return module.controller('spreadnet.collateralHistoryCtrl', config); 424 })(); 425 426 module = this.angular.module('snCollateralHistory'); 427 428 CollateralHistoryGridController = function($scope, CollateralHistoryModel, feedback, $timeout, CollateralHistorySettings, UserModel, Debounce, cellWidth) { 429 var cellWidths, filterError, initCollateralHistory, reorder, updateFilterClass; 430 $scope.model = CollateralHistoryModel; 431 $scope.settings = CollateralHistorySettings; 432 $scope.previousIdentifier = ""; 433 $scope.filterChanged = true; 434 $scope.filterParams = CollateralHistoryModel.filterParams; 435 $scope.filterSpec = CollateralHistoryModel.filterSpec; 436 $scope.filterFirstTime = true; 437 $scope.isAllCustomers = function() { 438 return UserModel.isAllCustomers(); 439 }; 440 $scope.filterHeightClass = function() { 441 var height; 442 height = $scope.isAllCustomers() ? 'h130' : 'h110'; 443 return "filter cf flexColumn flexAroundSpacing " + height; 444 }; 445 $scope.verticalDividerClass = function() { 446 var height; 447 height = $scope.isAllCustomers() ? 'h128' : 'h108'; 448 return "verticalDivider " + height; 449 }; 450 (updateFilterClass = function() { 451 return $scope.filterClass = $scope.filterChanged ? "button" : "button dark"; 452 })(); 453 $scope.filter = function() { 454 var checked, code; 455 $scope.startCalculation(); 456 $scope.filterParams.status = (function() { 457 var ref, results; 458 ref = $scope.filterSpec.statusOptions; 459 results = []; 460 for (code in ref) { 461 checked = ref[code]; 462 if (checked) { 463 results.push(code); 464 } 465 } 466 return results; 467 })(); 468 $scope.filterParams.kind = $scope.filterSpec.kind != null ? $scope.filterSpec.kind : ''; 469 $scope.filterParams.subKind = $scope.filterSpec.subKind != null ? $scope.filterSpec.subKind : []; 470 $scope.filterParams.bank = $scope.filterSpec.bank != null ? $scope.filterSpec.bank : []; 471 $scope.filterParams.identifier = $scope.filterSpec.identifier != null ? $scope.filterSpec.identifier : ''; 472 $scope.filterParams.customers = $scope.isAllCustomers() ? $scope.filterSpec.customers : []; 473 $scope.filterChanged = false; 474 updateFilterClass(); 475 return $timeout(function() { 476 return CollateralHistoryModel.filterByParam($scope.filterParams, initCollateralHistory, filterError); 477 }); 478 }; 479 $scope.filterButtonClick = function() { 480 return $scope.filter(); 481 }; 482 filterError = function() { 483 $scope.stopCalculation(); 484 $scope.filterFirstTime = false; 485 return feedback.timedServerError(); 486 }; 487 initCollateralHistory = function() { 488 $scope.settings.orderedBy = $scope.isAllCustomers() ? "customerName" : "kindName"; 489 $scope.settings.lastOrderedBy = $scope.settings.orderedBy; 490 reorder(); 491 $scope.filterFirstTime = false; 492 return $scope.stopCalculation(); 493 }; 494 $scope.changeFilter = function() { 495 $scope.filterChanged = true; 496 return updateFilterClass(); 497 }; 498 $scope.changeKind = function() { 499 $scope.filterSpec.subKind = []; 500 return $scope.changeFilter(); 501 }; 502 $scope.changeIdentifier = function() { 503 if ($scope.filterSpec.identifier !== $scope.previousIdentifier) { 504 $scope.previousIdentifier = $scope.filterSpec.identifier; 505 return $scope.changeFilter(); 506 } 507 }; 508 $scope.changeIdentifierWithLag = Debounce($scope.changeIdentifier, 1000); 509 $scope.changeOrder = function(order) { 510 $scope.settings.orderedBy = order; 511 if ($scope.settings.lastOrderedBy === $scope.settings.orderedBy) { 512 $scope.settings.lastOrderedBy = ""; 513 CollateralHistoryModel.orderBy(order, 1); 514 } else { 515 $scope.settings.lastOrderedBy = $scope.settings.orderedBy; 516 CollateralHistoryModel.orderBy(order, -1); 517 } 518 return $scope.stopCalculation(); 519 }; 520 reorder = function() { 521 var sign; 522 sign = $scope.settings.lastOrderedBy ? -1 : 1; 523 return CollateralHistoryModel.orderBy($scope.settings.orderedBy, sign); 524 }; 525 $scope["delete"] = function(collateralHistory) { 526 return CollateralHistoryModel["delete"](collateralHistory, $scope.deleteCollateralHistorySuccess, feedback.timedServerError); 527 }; 528 $scope.deleteCollateralHistorySuccess = function(index) { 529 return feedback.timedSuccess("Garantia removida com sucesso."); 530 }; 531 $scope.collateralHistorySize = function() { 532 var length; 533 length = CollateralHistoryModel.collection.length; 534 if (length !== 1) { 535 return length + " garantias"; 536 } else { 537 return "1 garantia"; 538 } 539 }; 540 $scope.getThClass = function(order) { 541 if (order === $scope.settings.orderedBy) { 542 return 'orderedBy'; 543 } else { 544 return ''; 545 } 546 }; 547 $scope.getIconOrderClass = function() { 548 if ($scope.settings.lastOrderedBy) { 549 return 'fa fa-caret-up'; 550 } else { 551 return 'fa fa-caret-down'; 552 } 553 };
554 cellWidths = [[6, 0], [4, 4], [5, 6], [6, 6], [14, 15], [12, 13], [9, 10], [6, 6], [7, 8], [7, 7], [7, 7], [2, 2], [2, 2]]; 555 return $scope.cellWidth = cellWidth.setWidths(cellWidths, $scope.isAllCustomers); 556 }; 557 558 (function() { 559 var config; 560 config = ['$scope', 'CollateralHistoryModel', 'feedback', '$timeout', 'CollateralHistorySettings', 'UserModel', 'Debounce', 'cellWidth', CollateralHistoryGridController]; 561 return module.controller('spreadnet.collateralHistoryGridCtrl', config); 562 })(); 563 564 module = this.angular.module('snCollateralHistory'); 565 566 CollateralHistoryItemController = function($scope, UserModel, CollateralHistoryModel, feedback) { 567 var duplicateError, duplicateSuccess, eventBus, events, hasAttachment, item, numbers; 568 numbers = spreadnet.utils.numbers; 569 eventBus = spreadnet.eventBus; 570 events = spreadnet.events; 571 item = $scope.item; 572 $scope.isAllCustomers = function() { 573 return UserModel.isAllCustomers(); 574 }; 575 $scope.customerName = function() { 576 return item.customerName; 577 }; 578 $scope.updateValuation = function() { 579 return eventBus.fire('updateValuationDialog', item); 580 }; 581 $scope.editItem = function() { 582 return $scope.editCollateralHistory($scope.item); 583 }; 584 $scope.deleteItem = function() { 585 var loanInfo, loanInfoHtml; 586 loanInfo = item.loanInfo; 587 loanInfoHtml = loanInfo ? "<br/>\nEsta garantia possui um contrato vinculado: <strong>" + loanInfo.modalityShortName + "</strong>,\n" + loanInfo.currency + " <strong>" + (numbers.format(loanInfo.value, 2)) + "</strong>,\ncontrato <strong>" + loanInfo.contractNumber + "</strong>." : ""; 588 return eventBus.fire(events.MODAL, { 589 ok: function() { 590 return $scope.$parent["delete"]($scope.item); 591 }, 592 okLabel: 'Excluir garantia', 593 cancelLabel: 'Cancelar', 594 title: 'Exclusão de garantia', 595 html: "Ao excluir uma garantia, todos seus dados serão permanentemente removidos.<br/>\nTem certeza que deseja excluir a garantia <strong>" + item.identifier + "</strong>?" + loanInfoHtml 596 }); 597 }; 598 $scope.filesDialog = function() { 599 $scope.kmqRecord('Documentos'); 600 return eventBus.fire('collateralFilesDialog', { 601 item: item, 602 immediate: true 603 }); 604 }; 605 $scope.noteDialog = function() { 606 if (!$scope.isReadOnlyUserOrAllCustomers()) { 607 $scope.kmqRecord('Observações'); 608 return eventBus.fire('collateralNoteDialog', item); 609 } 610 }; 611 $scope.changeLoanStatusDialog = function() { 612 return eventBus.fire('collateralLoanStatusDialog', item); 613 }; 614 duplicateSuccess = function() { 615 return feedback.timedSuccess("Garantia duplicada com sucesso."); 616 }; 617 duplicateError = function() { 618 return feedback.timedError("Erro ao duplicar garantia."); 619 }; 620 $scope.duplicateItem = function() { 621 return CollateralHistoryModel.duplicate($scope.item, duplicateSuccess, duplicateError); 622 }; 623 hasAttachment = function() { 624 var ref; 625 return ((ref = $scope.item.attachments) != null ? ref.length : void 0) > 0; 626 }; 627 $scope.warningMessages = []; 628 $scope.buildWarningMessages = function() { 629 var ref; 630 $scope.warningMessages = []; 631 if (!hasAttachment()) { 632 $scope.warningMessages.push({ 633 title: "Pendente", 634 label: "Documento", 635 disable: function() { 636 return false; 637 }, 638 action: function() { 639 return $scope.filesDialog(); 640 } 641 }); 642 } 643 if ((ref = item.loanInfo) != null ? ref.settled : void 0) { 644 return $scope.warningMessages.push({ 645 title: "Contrato liquidado", 646 label: "Alterar status", 647 disable: function() { 648 return UserModel.isReadOnlyUserOrAllCustomers(); 649 }, 650 action: function() { 651 return $scope.changeLoanStatusDialog(); 652 } 653 }); 654 } 655 }; 656 $scope.showUpdateValuationMenuItem = function() { 657 return !UserModel.isReadOnlyUserOrAllCustomers(); 658 }; 659 $scope.showEditMenuItem = function() { 660 return !UserModel.isReadOnlyUserOrAllCustomers(); 661 }; 662 $scope.showDuplicateMenuItem = function() { 663 return !UserModel.isReadOnlyUserOrAllCustomers(); 664 }; 665 $scope.showDeleteMenuItem = function() { 666 return !UserModel.isReadOnlyUserOrAllCustomers(); 667 }; 668 return $scope.getTooltipHtml = function() { 669 var html; 670 $scope.buildWarningMessages(); 671 if ($scope.warningMessages.length) { 672 html = $scope.warningMessages.map(function(msg, idx) { 673 var clickContents; 674 clickContents = "<br /><span class='link' ng-class='{disabled: warningMessages[" + idx + "].disable()}' ng-click='!warningMessages[" + idx + "].disable() && warningMessages[" + idx + "].action()'>- " + msg.label + "</span>"; 675 return "<b>" + msg.title + "</b>" + clickContents; 676 }).join("<br />"); 677 return html; 678 } else { 679 return ""; 680 } 681 }; 682 }; 683 684 (function() { 685 var config; 686 config = ['$scope', 'UserModel', 'CollateralHistoryModel', 'feedback', CollateralHistoryItemController]; 687 return module.controller('spreadnet.collateralHistoryItemCtrl', config); 688 })(); 689 690 if ((base = this.spreadnet).services == null) { 691 base.services = this.angular.module('spreadnetServices', ['ngResource']); 692 } 693 694 this.spreadnet.services.factory('CollateralHistorySettings', function() { 695 return (function() { 696 return { 697 orderedBy: "kindName", 698 lastOrderedBy: "kindName" 699 }; 700 })(); 701 }); 702 703 if (this.spreadnet == null) { 704 this.spreadnet = {}; 705 } 706 707 this.spreadnet.collateralLoanLinkDialogCtrl = function($scope, HistoryModel, LoanModalityModel, cellWidth) {
708 var cellWidths, collateralForm, editionFocus, eventBus, findLoan, hide, hm, labels, savedHistoryState; 709 eventBus = spreadnet.eventBus; 710 editionFocus = spreadnet.editionFocus; 711 labels = spreadnet.utils.labels; 712 hm = HistoryModel; 713 collateralForm = {}; 714 $scope.warrantyLinkOnly = true; 715 $scope.showing = false; 716 $scope.selected = { 717 selected: null 718 }; 719 savedHistoryState = null; 720 findLoan = function(id) { 721 var i, item, len1, ref; 722 if (!id) { 723 return null; 724 } 725 ref = hm.collection; 726 for (i = 0, len1 = ref.length; i < len1; i++) { 727 item = ref[i]; 728 if (item._id.$oid === id) { 729 return item; 730 } 731 } 732 return null; 733 }; 734 hide = function() { 735 $scope.showing = false; 736 if (savedHistoryState) { 737 angular.copy(savedHistoryState.filterSpec, HistoryModel.filterSpec); 738 angular.copy(savedHistoryState.filterParams, HistoryModel.filterParams); 739 HistoryModel.collection = savedHistoryState.collection; 740 HistoryModel.isFiltered = savedHistoryState.isFiltered; 741 savedHistoryState = null; 742 } 743 return editionFocus.close(); 744 }; 745 $scope.show = function(form) { 746 var ref; 747 collateralForm = form; 748 savedHistoryState = { 749 filterSpec: angular.copy(HistoryModel.filterSpec), 750 filterParams: angular.copy(HistoryModel.filterParams), 751 collection: HistoryModel.collection, 752 isFiltered: HistoryModel.isFiltered 753 }; 754 HistoryModel.resetFilter(); 755 eventBus.fire('historyFilterReset'); 756 $scope.selected.selected = findLoan((ref = collateralForm.loanInfo) != null ? ref.loanId : void 0); 757 return $scope.showing = true; 758 }; 759 $scope.ok = function() { 760 var item, ref, ref1; 761 item = $scope.selected.selected; 762 if (item) { 763 collateralForm.loanInfo = { 764 loanId: item._id.$oid, 765 bankInfo: { 766 id: item.offer.bank.id, 767 branch: item.offer.bank.branch, 768 account: item.offer.bank.account 769 }, 770 modalityShortName: ((ref = labels.loanModality[item.offer.loanModality]) != null ? ref.short : void 0) || '', 771 value: item.offer.value, 772 currency: ((ref1 = labels.loanModality[item.offer.loanModality]) != null ? ref1.currency : void 0) || 'R$', 773 contractNumber: item.contractNumber, 774 creditDate: item.offer.outlayDate 775 }; 776 collateralForm.loanLinkKind = "L"; 777 eventBus.fire('collateralLoanLinkSelected', collateralForm); 778 } 779 return hide(); 780 }; 781 $scope.cancel = function() { 782 return hide(); 783 }; 784 $scope.modality = function(modality) { 785 var ref; 786 return ((ref = labels.loanModality[modality]) != null ? ref.short : void 0) || ''; 787 }; 788 $scope.currency = function(offer) { 789 return LoanModalityModel.currencyFor(offer.loanModality); 790 }; 791 cellWidths = [[3, 3], [5, 5], [5, 5], [6, 6], [5, 5], [5, 5], [5, 5], [6, 6], [6, 6]]; 792 $scope.cellWidthPopUp = cellWidth.setWidths(cellWidths, function() { 793 return false; 794 }); 795 return eventBus.subscribe('collateralLoanLinkDialog', $scope.show, $scope); 796 }; 797 798 module = this.angular.module('snCollateralHistory'); 799 800 CollateralLoanStatusDialogController = function($scope, CollateralHistoryModel, feedback, MessiService) { 801 var STATUS_CODE_COLLATERAL_PENDING_PERFECTION, STATUS_CODE_DISCONTINUED, STATUS_CODE_PERFECTED_COLLATERAL, STATUS_CODE_RELEASED_COLLATERAL, collateralItem, doSave, eventBus, isLoanLinkStatus, removesLoanLink, saveError, saveSuccess; 802 eventBus = spreadnet.eventBus; 803 STATUS_CODE_RELEASED_COLLATERAL = "L"; 804 STATUS_CODE_DISCONTINUED = "D"; 805 STATUS_CODE_COLLATERAL_PENDING_PERFECTION = "E"; 806 STATUS_CODE_PERFECTED_COLLATERAL = "C"; 807 collateralItem = {}; 808 $scope.showing = false; 809 $scope.form = {}; 810 $scope.show = function(item) { 811 collateralItem = item; 812 $scope.form = { 813 status: item.status 814 }; 815 return $scope.showing = true; 816 }; 817 removesLoanLink = function() { 818 var ref; 819 return (ref = $scope.form.status) === STATUS_CODE_RELEASED_COLLATERAL || ref === STATUS_CODE_DISCONTINUED; 820 }; 821 saveSuccess = function() { 822 feedback.timedSuccess("Status da garantia atualizado com sucesso."); 823 return $scope.showing = false;
824 }; 825 saveError = function(error) { 826 return feedback.timedError(error.message); 827 }; 828 doSave = function() { 829 var itemToSave; 830 itemToSave = angular.copy(collateralItem); 831 itemToSave.status = $scope.form.status; 832 if (removesLoanLink()) { 833 itemToSave.loanInfo = void 0; 834 } 835 return CollateralHistoryModel.save(itemToSave, false, saveSuccess, saveError); 836 }; 837 isLoanLinkStatus = function() { 838 var ref; 839 return (ref = $scope.form.status) === STATUS_CODE_PERFECTED_COLLATERAL || ref === STATUS_CODE_COLLATERAL_PENDING_PERFECTION; 840 }; 841 $scope.save = function() { 842 if (isLoanLinkStatus()) { 843 return feedback.timedError("O contrato vinculado está finalizado. Favor selecionar status Liberada ou Descontinuada."); 844 } else { 845 if (removesLoanLink()) { 846 return MessiService.confirmDialog("O contrato vinculado será removido desta garantia. Deseja continuar?").then(function(answer) { 847 if (answer) { 848 return doSave(); 849 } 850 }); 851 } else { 852 return doSave(); 853 } 854 } 855 }; 856 $scope.cancel = function() { 857 return $scope.showing = false; 858 }; 859 return eventBus.subscribe('collateralLoanStatusDialog', $scope.show, $scope); 860 }; 861 862 (function() { 863 var config; 864 config = ['$scope', 'CollateralHistoryModel', 'feedback', 'MessiService', CollateralLoanStatusDialogController]; 865 return module.controller('spreadnet.collateralLoanStatusDialogCtrl', config); 866 })(); 867 868 module = this.angular.module('snCollateralHistory'); 869 870 CollateralNoteDialogController = function($scope, CollateralHistoryModel, feedback) { 871 var collateralItem, eventBus, saveError, saveSuccess; 872 eventBus = spreadnet.eventBus; 873 $scope.noteDescription = ""; 874 $scope.showing = false; 875 collateralItem = {}; 876 $scope.show = function(item) { 877 collateralItem = item; 878 $scope.noteDescription = collateralItem.note ? collateralItem.note : ""; 879 return $scope.showing = true; 880 }; 881 saveSuccess = function(savedItem) { 882 feedback.timedSuccess("As observações foram salvas"); 883 return $scope.showing = false; 884 }; 885 saveError = function() { 886 return feedback.timedError("Erro ao salvar observações"); 887 }; 888 $scope.save = function() { 889 collateralItem.note = $scope.noteDescription; 890 return CollateralHistoryModel.save(collateralItem, false, saveSuccess, saveError); 891 }; 892 $scope.cancel = function() { 893 return $scope.showing = false; 894 }; 895 return eventBus.subscribe('collateralNoteDialog', $scope.show, $scope); 896 }; 897 898 (function() { 899 var config; 900 config = ['$scope', 'CollateralHistoryModel', 'feedback', CollateralNoteDialogController]; 901 return module.controller('spreadnet.collateralNoteController', config); 902 })(); 903 904 module = this.angular.module('snCollateralHistory'); 905 906 EditCollateralHistoryController = function($scope, $http, CollateralHistoryModel, ConfigurationService, FipeBrands, FipeReferences, FipeService, feedback, $timeout, MessiService, CustomerBankModel, Debounce) { 907 var AREA_UNIT_CODE_BUSCHEL, AREA_UNIT_CODE_HECTARE, AREA_UNIT_CODE_SQUARE_METER, FIPE_QUERY_KIND_BRAND_MODEL, FIPE_QUERY_KIND_CODE, KIND_CODE_PROPERTY, KIND_CODE_VEHICLE, SOURCE_CODE_PROPERTY_ESTIMATION, SOURCE_CODE_PROPERTY_REPORT, SOURCE_CODE_VEHICLE_FIPE, SOURCE_CODE_VEHICLE_MANUAL, STATUS_CODE_COLLATERAL_PENDING_PERFECTION, STATUS_CODE_DISCONTINUED, STATUS_CODE_PERFECTED_COLLATERAL, STATUS_CODE_RELEASED_COLLATERAL, SUB_KIND_CODE_CAR_VEHICLE, SUB_KIND_CODE_COMMERCIAL_PROPERTY, SUB_KIND_CODE_INDUSTRIAL_PROPERTY, SUB_KIND_CODE_LAND_PROPERTY, SUB_KIND_CODE_MOTORCYCLE_VEHICLE, SUB_KIND_CODE_OTHER_VEHICLE, SUB_KIND_CODE_RESIDENTIAL_PROPERTY, SUB_KIND_CODE_RURAL_PROPERTY, SUB_KIND_CODE_TRUCK_VEHICLE, YEAR_CODE_NEW_VEHICLE, blankAddress, blankProperty, blankVehicle, brandName, clearYearFuelSelection, confirmSaveWithoutLoanLink, defaultAreaUnit, defaultSourceForKind, doSaveCollateralHistory, eventBus, fillIdentifier, fipeCodeChangedDebounced, fipeCodeParam, fipeCodeValue, fipeCodeYearsFuelsError, fipeError, fipeModelsSuccess, fipeParam, fipePriceError, fromForm, hasLoanLinkSelected, isNewVehicleYear, isRemovingLoanLink, loadFipeOptionsForEdit, loadYearFuelOptionsByCode, newCollateralForm, originalLoanId, parseFipeValue, performFipeCodeChanged, populateModelOptions, populateYearFuelOptions, populateYearFuelOptionsKeepingSelection, referenceDate, refreshFipeValueSuccess, removeLoanLink, resetFipeValue, resolveBrandModelCodes, save, saveCollateralHistoryError, saveCollateralHistorySuccess, savingCollateralHistory, setFipeResult, setFipeValue, setHistory, statusForbidsLoanLink, statusName, statusNameInPast, statusRequiresLoanLink, toForm, validateCollateral, validateIdentifier; 908 eventBus = spreadnet.eventBus; 909 $scope.config = {}; 910 savingCollateralHistory = false;
911 $scope.isNewRecord = true; 912 $scope.ufList = [ 913 { 914 code: 'AC', 915 name: 'Acre' 916 }, { 917 code: 'AL', 918 name: 'Alagoas' 919 }, { 920 code: 'AP', 921 name: 'Amapá' 922 }, { 923 code: 'AM', 924 name: 'Amazonas' 925 }, { 926 code: 'BA', 927 name: 'Bahia' 928 }, { 929 code: 'CE', 930 name: 'Ceará' 931 }, { 932 code: 'DF', 933 name: 'Distrito Federal' 934 }, { 935 code: 'ES', 936 name: 'EspÃrito Santo' 937 }, { 938 code: 'GO', 939 name: 'Goiás' 940 }, { 941 code: 'MA', 942 name: 'Maranhão' 943 }, { 944 code: 'MT', 945 name: 'Mato Grosso' 946 }, { 947 code: 'MS', 948 name: 'Mato Grosso do Sul' 949 }, { 950 code: 'MG', 951 name: 'Minas Gerais' 952 }, { 953 code: 'PA', 954 name: 'Pará' 955 }, { 956 code: 'PB', 957 name: 'ParaÃba' 958 }, { 959 code: 'PR', 960 name: 'Paraná' 961 }, { 962 code: 'PE', 963 name: 'Pernambuco' 964 }, { 965 code: 'PI', 966 name: 'PiauÃ' 967 }, { 968 code: 'RJ', 969 name: 'Rio de Janeiro' 970 }, { 971 code: 'RN', 972 name: 'Rio Grande do Norte' 973 }, { 974 code: 'RS', 975 name: 'Rio Grande do Sul' 976 }, { 977 code: 'RO', 978 name: 'Rondônia' 979 }, { 980 code: 'RR', 981 name: 'Roraima' 982 }, { 983 code: 'SC', 984 name: 'Santa Catarina' 985 }, { 986 code: 'SP', 987 name: 'São Paulo' 988 }, { 989 code: 'SE', 990 name: 'Sergipe' 991 }, { 992 code: 'TO', 993 name: 'Tocantins' 994 } 995 ]; 996 $scope.modelOptions = []; 997 $scope.yearFuelOptions = []; 998 $scope.yearFuelSelector = ""; 999 $scope.allBrands = FipeBrands.query(); 1000 $scope.allReferences = FipeReferences.query(); 1001 $scope.saving = CollateralHistoryModel.pendingHistorySave; 1002 $scope.processing = function() { 1003 return ConfigurationService.identifierPendingRequest(); 1004 }; 1005 STATUS_CODE_COLLATERAL_PENDING_PERFECTION = "E"; 1006 STATUS_CODE_PERFECTED_COLLATERAL = "C"; 1007 STATUS_CODE_RELEASED_COLLATERAL = "L"; 1008 STATUS_CODE_DISCONTINUED = "D"; 1009 KIND_CODE_PROPERTY = "I"; 1010 KIND_CODE_VEHICLE = "V"; 1011 SUB_KIND_CODE_RURAL_PROPERTY = "U"; 1012 SUB_KIND_CODE_RESIDENTIAL_PROPERTY = "R"; 1013 SUB_KIND_CODE_INDUSTRIAL_PROPERTY = "I"; 1014 SUB_KIND_CODE_COMMERCIAL_PROPERTY = "C"; 1015 SUB_KIND_CODE_LAND_PROPERTY = "T"; 1016 SUB_KIND_CODE_CAR_VEHICLE = "1"; 1017 SUB_KIND_CODE_MOTORCYCLE_VEHICLE = "2"; 1018 SUB_KIND_CODE_TRUCK_VEHICLE = "3"; 1019 SUB_KIND_CODE_OTHER_VEHICLE = "9"; 1020 AREA_UNIT_CODE_SQUARE_METER = "M"; 1021 AREA_UNIT_CODE_HECTARE = "H"; 1022 AREA_UNIT_CODE_BUSCHEL = "A"; 1023 SOURCE_CODE_PROPERTY_ESTIMATION = "E"; 1024 SOURCE_CODE_PROPERTY_REPORT = "L"; 1025 SOURCE_CODE_VEHICLE_FIPE = "F"; 1026 SOURCE_CODE_VEHICLE_MANUAL = "M"; 1027 YEAR_CODE_NEW_VEHICLE = "32000"; 1028 FIPE_QUERY_KIND_BRAND_MODEL = "B"; 1029 FIPE_QUERY_KIND_CODE = "C"; 1030 $scope.isFipeQueryByCode = function() { 1031 return $scope.collateralForm.vehicle.fipeQueryKind === FIPE_QUERY_KIND_CODE; 1032 }; 1033 blankAddress = function() { 1034 return { 1035 street: "", 1036 number: "", 1037 complement: "", 1038 district: "", 1039 city: "", 1040 state: "", 1041 zipCode: "" 1042 }; 1043 }; 1044 defaultAreaUnit = function(subKind) { 1045 if (subKind === SUB_KIND_CODE_RURAL_PROPERTY) { 1046 return AREA_UNIT_CODE_HECTARE; 1047 } else { 1048 return AREA_UNIT_CODE_SQUARE_METER; 1049 } 1050 }; 1051 blankProperty = function(subKind) { 1052 return { 1053 name: "", 1054 area: 0, 1055 areaUnit: defaultAreaUnit(subKind), 1056 address: blankAddress(), 1057 titleNumber: "", 1058 titleRegistration: "", 1059 municipalTaxId: "" 1060 }; 1061 }; 1062 blankVehicle = function() { 1063 return { 1064 referenceDate: "", 1065 brandName: "", 1066 modelName: "", 1067 yearFuelType: "", 1068 referenceDateCode: "", 1069 brandCode: "", 1070 modelCode: "", 1071 year: "", 1072 fuelTypeCode: "", 1073 fipeCode: "", 1074 renavam: "", 1075 licensePlate: "", 1076 chassis: "", 1077 fipeQueryKind: FIPE_QUERY_KIND_BRAND_MODEL 1078 }; 1079 }; 1080 defaultSourceForKind = function(kind) { 1081 if (kind === KIND_CODE_VEHICLE) { 1082 return SOURCE_CODE_VEHICLE_FIPE; 1083 } else { 1084 return SOURCE_CODE_PROPERTY_ESTIMATION; 1085 } 1086 }; 1087 newCollateralForm = function() { 1088 return { 1089 operationLabel: "", 1090 _id: sn.u.mongoObjectId(), 1091 identifier: "", 1092 status: STATUS_CODE_RELEASED_COLLATERAL, 1093 kind: KIND_CODE_PROPERTY, 1094 kindName: "", 1095 subKind: SUB_KIND_CODE_RURAL_PROPERTY, 1096 subKindName: "", 1097 value: 0, 1098 valuationDate: "", 1099 source: defaultSourceForKind(KIND_CODE_PROPERTY), 1100 sourceName: "", 1101 updateDate: sn.u.dates.dateToYMD(new Date()), 1102 property: blankProperty(SUB_KIND_CODE_RURAL_PROPERTY), 1103 vehicle: blankVehicle(), 1104 description: [], 1105 individualization: [], 1106 loanInfo: null, 1107 loanLinkKind: "", 1108 customerId: "", 1109 customerName: "", 1110 statusName: "", 1111 note: "", 1112 attachments: [] 1113 }; 1114 }; 1115 $scope.collateralForm = newCollateralForm(); 1116 $scope.propertyValue = 0; 1117 $scope.vehicleOtherValue = 0; 1118 $scope.vehicleFipeValue = 0; 1119 $scope.currentValue = function() { 1120 var form; 1121 form = $scope.collateralForm; 1122 if (form.kind === KIND_CODE_PROPERTY) { 1123 return $scope.propertyValue; 1124 } else if (form.subKind === SUB_KIND_CODE_OTHER_VEHICLE) { 1125 return $scope.vehicleOtherValue; 1126 } else { 1127 return $scope.vehicleFipeValue; 1128 } 1129 }; 1130 $scope.propertyValuationDate = ""; 1131 $scope.vehicleOtherReferenceDate = ""; 1132 $scope.propertySource = SOURCE_CODE_PROPERTY_ESTIMATION; 1133 $scope.changeKind = function() { 1134 $scope.collateralForm.subKind = $scope.collateralForm.kind === KIND_CODE_VEHICLE ? SUB_KIND_CODE_TRUCK_VEHICLE : SUB_KIND_CODE_RURAL_PROPERTY; 1135 return $scope.changeSubKind(); 1136 }; 1137 $scope.changeSubKind = function() { 1138 var form; 1139 form = $scope.collateralForm; 1140 switch (form.kind) { 1141 case KIND_CODE_VEHICLE: 1142 form.source = form.subKind === SUB_KIND_CODE_OTHER_VEHICLE ? SOURCE_CODE_VEHICLE_MANUAL : SOURCE_CODE_VEHICLE_FIPE; 1143 $scope.modelOptions = []; 1144 return $scope.yearFuelOptions = []; 1145 case KIND_CODE_PROPERTY: 1146 if (form.subKind !== SUB_KIND_CODE_RURAL_PROPERTY) { 1147 return form.property.areaUnit = AREA_UNIT_CODE_SQUARE_METER; 1148 } else if (form.property.areaUnit === AREA_UNIT_CODE_SQUARE_METER) { 1149 return form.property.areaUnit = AREA_UNIT_CODE_HECTARE; 1150 } 1151 } 1152 }; 1153 $scope.selectLoanLink = function() { 1154 return eventBus.fire('collateralLoanLinkDialog', $scope.collateralForm); 1155 }; 1156 $scope.nextIdentifier = function() { 1157 return ConfigurationService.nextIdentifier().then(function(result) { 1158 return $scope.collateralForm.identifier = result.trim(); 1159 }); 1160 }; 1161 fillIdentifier = function() { 1162 if ($scope.collateralForm.identifier.trim() === "" && $scope.config.contractNumbering.automatic) { 1163 return $scope.nextIdentifier(); 1164 } 1165 }; 1166 $scope.isManualNumbering = function() { 1167 var ref, ref1; 1168 if ((ref = $scope.config) != null ? (ref1 = ref.contractNumbering) != null ? ref1.automatic : void 0 : void 0) { 1169 return false;
1170 } else { 1171 return true; 1172 } 1173 }; 1174 $scope.isNewIdentifierButtonDisabled = function() { 1175 return $scope.collateralForm.identifier.trim() !== ''; 1176 }; 1177 $scope.newIdentifierButtonClass = function() { 1178 if ($scope.isNewIdentifierButtonDisabled()) { 1179 return "button dark ml10 disabled"; 1180 } else { 1181 return "button dark ml10"; 1182 } 1183 }; 1184 brandName = function(code, kind) { 1185 var brand; 1186 brand = _.find($scope.allBrands, function(b) { 1187 return b.code === code && b.kind === Number(kind); 1188 }); 1189 if (brand) { 1190 return brand.name; 1191 } else { 1192 return ""; 1193 } 1194 }; 1195 referenceDate = function(code) { 1196 var reference; 1197 reference = _.find($scope.allReferences, function(r) { 1198 return ("" + r._id) === ("" + code); 1199 }); 1200 if (reference) { 1201 return reference.date; 1202 } else { 1203 return ""; 1204 } 1205 }; 1206 fipeParam = function() { 1207 return { 1208 vehicleTypeCode: Number($scope.collateralForm.subKind), 1209 refDateCode: Number($scope.collateralForm.vehicle.referenceDateCode), 1210 brandCode: $scope.collateralForm.vehicle.brandCode, 1211 modelCode: $scope.collateralForm.vehicle.modelCode 1212 }; 1213 }; 1214 fipeCodeValue = function() { 1215 return ($scope.collateralForm.vehicle.fipeCode || "").trim(); 1216 }; 1217 fipeCodeParam = function() { 1218 return { 1219 vehicleTypeCode: Number($scope.collateralForm.subKind), 1220 refDateCode: Number($scope.collateralForm.vehicle.referenceDateCode), 1221 fipeCode: fipeCodeValue() 1222 }; 1223 }; 1224 fipeError = function() { 1225 return feedback.timedError("Erro ao consultar a tabela FIPE"); 1226 }; 1227 $scope.referenceChanged = function() { 1228 $scope.collateralForm.vehicle.referenceDate = referenceDate($scope.collateralForm.vehicle.referenceDateCode); 1229 return $scope.updateFipeValueFromCombos(); 1230 }; 1231 $scope.brandChanged = function() { 1232 var vehicle; 1233 vehicle = $scope.collateralForm.vehicle; 1234 vehicle.brandName = brandName(vehicle.brandCode, $scope.collateralForm.subKind); 1235 vehicle.modelCode = ""; 1236 vehicle.modelName = ""; 1237 vehicle.fipeCode = ""; 1238 $scope.yearFuelSelector = ""; 1239 vehicle.year = ""; 1240 vehicle.fuelTypeCode = ""; 1241 vehicle.yearFuelType = ""; 1242 $scope.modelOptions = []; 1243 $scope.yearFuelOptions = []; 1244 if (vehicle.brandCode) { 1245 FipeService.models(fipeParam()).then(populateModelOptions, fipeError); 1246 } 1247 return $scope.updateFipeValueFromCombos(); 1248 }; 1249 populateModelOptions = function(result) { 1250 return $timeout(function() { 1251 return $scope.modelOptions = _.map(result.Modelos, function(item) { 1252 return { 1253 value: "" + item.Value, 1254 label: item.Label 1255 }; 1256 }); 1257 }); 1258 }; 1259 $scope.modelChanged = function() { 1260 var modelOption, vehicle; 1261 vehicle = $scope.collateralForm.vehicle; 1262 modelOption = _.find($scope.modelOptions, function(opt) { 1263 return opt.value === ("" + vehicle.modelCode); 1264 }); 1265 vehicle.modelName = modelOption ? modelOption.label : ""; 1266 vehicle.fipeCode = ""; 1267 $scope.yearFuelSelector = ""; 1268 vehicle.year = ""; 1269 vehicle.fuelTypeCode = ""; 1270 vehicle.yearFuelType = ""; 1271 $scope.yearFuelOptions = []; 1272 if (vehicle.modelCode) { 1273 FipeService.yearsFuelsByBrandModel(fipeParam()).then(populateYearFuelOptions, fipeError); 1274 } 1275 return $scope.updateFipeValueFromCombos(); 1276 }; 1277 isNewVehicleYear = function(item) { 1278 var yearFuelSplitted; 1279 yearFuelSplitted = /^(\d+)\-\d+.*$/.exec("" + item.Value); 1280 return ((yearFuelSplitted != null) && yearFuelSplitted[1] === YEAR_CODE_NEW_VEHICLE) || ("" + item.Value) === YEAR_CODE_NEW_VEHICLE; 1281 }; 1282 populateYearFuelOptions = function(result) { 1283 return $timeout(function() { 1284 var withoutZeroKm; 1285 withoutZeroKm = _.reject(result, isNewVehicleYear); 1286 return $scope.yearFuelOptions = _.map(withoutZeroKm, function(item) { 1287 return { 1288 value: item.Value, 1289 label: item.Label 1290 }; 1291 }); 1292 }); 1293 }; 1294 $scope.yearFuelChanged = function() { 1295 var vehicle, yearFuelOption, yearFuelSplitted;
1296 vehicle = $scope.collateralForm.vehicle; 1297 yearFuelOption = _.find($scope.yearFuelOptions, function(opt) { 1298 return ("" + opt.value) === ("" + $scope.yearFuelSelector); 1299 }); 1300 vehicle.yearFuelType = yearFuelOption ? yearFuelOption.label : ""; 1301 yearFuelSplitted = /^(\d+)\-(\d+).*$/.exec("" + $scope.yearFuelSelector); 1302 if ((yearFuelSplitted != null) && yearFuelSplitted.length > 2) { 1303 vehicle.year = yearFuelSplitted[1]; 1304 vehicle.fuelTypeCode = yearFuelSplitted[2]; 1305 } else { 1306 vehicle.year = ""; 1307 vehicle.fuelTypeCode = ""; 1308 } 1309 return $scope.updateFipeValueFromCombos(); 1310 }; 1311 clearYearFuelSelection = function() { 1312 var vehicle; 1313 vehicle = $scope.collateralForm.vehicle; 1314 $scope.yearFuelSelector = ""; 1315 vehicle.year = ""; 1316 vehicle.fuelTypeCode = ""; 1317 vehicle.yearFuelType = ""; 1318 return $scope.yearFuelOptions = []; 1319 }; 1320 fipeCodeYearsFuelsError = function() { 1321 return feedback.timedError("Código FIPE (" + (fipeCodeValue()) + ") é inválido."); 1322 }; 1323 loadYearFuelOptionsByCode = function(onSuccess) { 1324 if (fipeCodeValue() && $scope.collateralForm.vehicle.referenceDateCode) { 1325 return FipeService.yearsFuelsByCode(fipeCodeParam()).then(onSuccess, fipeCodeYearsFuelsError); 1326 } 1327 }; 1328 performFipeCodeChanged = function() { 1329 clearYearFuelSelection(); 1330 resetFipeValue(); 1331 return loadYearFuelOptionsByCode(populateYearFuelOptions); 1332 }; 1333 fipeCodeChangedDebounced = Debounce(performFipeCodeChanged, 1500); 1334 $scope.fipeCodeChanged = function() { 1335 return fipeCodeChangedDebounced(); 1336 }; 1337 resolveBrandModelCodes = function(brandLabel, modelLabel) { 1338 var brand, vehicle; 1339 vehicle = $scope.collateralForm.vehicle; 1340 brand = _.find($scope.allBrands, function(b) { 1341 return b.name === brandLabel && b.kind === Number($scope.collateralForm.subKind); 1342 }); 1343 vehicle.brandCode = brand ? brand.code : ""; 1344 vehicle.modelCode = ""; 1345 $scope.modelOptions = []; 1346 if (vehicle.brandCode && modelLabel) { 1347 return FipeService.models(fipeParam()).then(function(result) { 1348 return $timeout(function() { 1349 var model; 1350 $scope.modelOptions = _.map(result.Modelos, function(item) { 1351 return { 1352 value: "" + item.Value, 1353 label: item.Label 1354 }; 1355 }); 1356 model = _.find(result.Modelos, function(item) { 1357 return item.Label === modelLabel; 1358 }); 1359 return vehicle.modelCode = model ? "" + model.Value : ""; 1360 }); 1361 }); 1362 } 1363 }; 1364 $scope.canRefreshFipeValue = function() { 1365 var vehicle; 1366 vehicle = $scope.collateralForm.vehicle; 1367 if ($scope.isFipeQueryByCode()) { 1368 return !!(vehicle.referenceDateCode && fipeCodeValue() && $scope.yearFuelSelector); 1369 } else { 1370 return !!(vehicle.referenceDateCode && vehicle.brandCode && vehicle.modelCode && $scope.yearFuelSelector); 1371 } 1372 }; 1373 setFipeValue = function(value) { 1374 $scope.vehicleFipeValue = value; 1375 return $scope.collateralForm.updateDate = sn.u.dates.dateToYMD(new Date()); 1376 }; 1377 setFipeResult = function(value, result) { 1378 var vehicle; 1379 if (result == null) { 1380 result = null; 1381 } 1382 vehicle = $scope.collateralForm.vehicle; 1383 setFipeValue(value); 1384 if ($scope.isFipeQueryByCode()) { 1385 vehicle.brandName = (result != null ? result.Marca : void 0) || ""; 1386 vehicle.modelName = (result != null ? result.Modelo : void 0) || ""; 1387 return resolveBrandModelCodes(vehicle.brandName, vehicle.modelName); 1388 } else { 1389 return vehicle.fipeCode = (result != null ? result.CodigoFipe : void 0) || ""; 1390 } 1391 }; 1392 resetFipeValue = function() { 1393 return setFipeResult(0); 1394 }; 1395 $scope.updateFipeValueFromCombos = function() { 1396 if ($scope.canRefreshFipeValue()) { 1397 return $scope.refreshFipeValue(); 1398 } else { 1399 return resetFipeValue(); 1400 } 1401 }; 1402 parseFipeValue = function(valorStr) { 1403 var cleaned; 1404 cleaned = ("" + valorStr).replace(/[R$\s.]/g, '').replace(',', '.'); 1405 return parseFloat(cleaned) || 0; 1406 }; 1407 refreshFipeValueSuccess = function(result) { 1408 return $timeout(function() { 1409 return setFipeResult(parseFipeValue(result.Valor), result); 1410 }); 1411 }; 1412 fipePriceError = function() {
1413 feedback.timedError("Não foi possÃvel obter o preço do veÃculo com os valores informados. Favor conferir os parâmetros e tentar novamente"); 1414 return resetFipeValue(); 1415 }; 1416 $scope.refreshFipeValue = function() { 1417 var param, yearFuelSplitted; 1418 if ($scope.canRefreshFipeValue()) { 1419 yearFuelSplitted = /^(\d+)\-(\d+).*$/.exec("" + $scope.yearFuelSelector); 1420 param = $scope.isFipeQueryByCode() ? fipeCodeParam() : fipeParam(); 1421 if ((yearFuelSplitted != null) && yearFuelSplitted.length > 2) { 1422 param.yearModel = yearFuelSplitted[1]; 1423 param.fuelCode = yearFuelSplitted[2]; 1424 } 1425 if ($scope.isFipeQueryByCode()) { 1426 return FipeService.valueByCode(param).then(refreshFipeValueSuccess, fipePriceError); 1427 } else { 1428 return FipeService.valueByBrandModel(param).then(refreshFipeValueSuccess, fipePriceError); 1429 } 1430 } 1431 }; 1432 $scope.updateFipeValue = function() { 1433 var vehicle; 1434 vehicle = $scope.collateralForm.vehicle; 1435 if ($scope.allReferences.length) { 1436 vehicle.referenceDateCode = $scope.allReferences[0]._id; 1437 vehicle.referenceDate = referenceDate(vehicle.referenceDateCode); 1438 } 1439 return $scope.updateFipeValueFromCombos(); 1440 }; 1441 $scope.cepBlur = function() { 1442 var cep; 1443 cep = ($scope.collateralForm.property.address.zipCode || "").replace(/\D/g, ''); 1444 if (cep.length === 8) { 1445 return $http.get("https://viacep.com.br/ws/" + cep + "/json/").then(function(response) { 1446 var addr, data; 1447 data = response.data; 1448 if (!(data != null ? data.erro : void 0)) { 1449 addr = $scope.collateralForm.property.address; 1450 addr.street = data.logradouro; 1451 addr.district = data.bairro; 1452 addr.city = data.localidade; 1453 addr.state = data.uf; 1454 addr.number = ""; 1455 return addr.complement = ""; 1456 } 1457 }); 1458 } 1459 }; 1460 $scope.municipalTaxIdLabel = function() { 1461 if ($scope.collateralForm.subKind === SUB_KIND_CODE_RURAL_PROPERTY) { 1462 return 'CCIR'; 1463 } else { 1464 return 'Inscrição'; 1465 } 1466 }; 1467 $scope.loanInfoOptionName = function() { 1468 if ($scope.collateralForm.loanInfo != null) { 1469 return "Operação vinculada:"; 1470 } else { 1471 return "Contrato de crédito a ser vinculado"; 1472 } 1473 }; 1474 $scope.loanBankName = function() { 1475 return CustomerBankModel.nameById($scope.collateralForm.loanInfo.bankInfo.id); 1476 }; 1477 $scope.filesDialog = function() { 1478 return eventBus.fire('collateralFilesDialog', { 1479 item: $scope.collateralForm, 1480 immediate: false 1481 }); 1482 }; 1483 populateYearFuelOptionsKeepingSelection = function(yfResult) { 1484 var vehicle; 1485 populateYearFuelOptions(yfResult); 1486 vehicle = $scope.collateralForm.vehicle; 1487 return $scope.yearFuelSelector = vehicle.year + "-" + vehicle.fuelTypeCode; 1488 }; 1489 fipeModelsSuccess = function(result) { 1490 var vehicle; 1491 populateModelOptions(result); 1492 vehicle = $scope.collateralForm.vehicle; 1493 if (vehicle.modelCode) { 1494 return FipeService.yearsFuelsByBrandModel(fipeParam()).then(populateYearFuelOptionsKeepingSelection, fipeError); 1495 } 1496 }; 1497 loadFipeOptionsForEdit = function() { 1498 var vehicle; 1499 vehicle = $scope.collateralForm.vehicle; 1500 if ($scope.collateralForm.kind === KIND_CODE_VEHICLE && $scope.collateralForm.source === SOURCE_CODE_VEHICLE_FIPE && vehicle.brandCode) { 1501 return FipeService.models(fipeParam()).then(fipeModelsSuccess, fipeError); 1502 } 1503 }; 1504 $scope.fipeQueryKindChanged = function() { 1505 if ($scope.isFipeQueryByCode()) { 1506 if ($scope.collateralForm.kind === KIND_CODE_VEHICLE && $scope.collateralForm.source === SOURCE_CODE_VEHICLE_FIPE) { 1507 return loadYearFuelOptionsByCode(populateYearFuelOptionsKeepingSelection); 1508 } 1509 } else { 1510 return loadFipeOptionsForEdit(); 1511 } 1512 }; 1513 originalLoanId = ""; 1514 toForm = function(collateralHistory) { 1515 var form, ref; 1516 form = angular.copy(collateralHistory); 1517 form.operationLabel = "Edição"; 1518 form.property = form.property || blankProperty(); 1519 form.property.address = form.property.address || blankAddress(); 1520 form.vehicle = form.vehicle || blankVehicle(); 1521 form.vehicle.fipeQueryKind = form.vehicle.fipeQueryKind || FIPE_QUERY_KIND_BRAND_MODEL; 1522 form.loanLinkKind = form.loanInfo ? "L" : ""; 1523 if (form.vehicle.referenceDateCode) { 1524 form.vehicle.referenceDateCode = Number(form.vehicle.referenceDateCode); 1525 } 1526 $scope.collateralForm = form; 1527 $scope.propertyValue = form.value; 1528 $scope.vehicleOtherValue = form.value; 1529 $scope.vehicleFipeValue = form.value; 1530 $scope.propertyValuationDate = form.valuationDate; 1531 $scope.vehicleOtherReferenceDate = form.vehicle.referenceDate; 1532 $scope.propertySource = form.kind === KIND_CODE_PROPERTY ? form.source : SOURCE_CODE_PROPERTY_ESTIMATION; 1533 originalLoanId = ((ref = form.loanInfo) != null ? ref.loanId : void 0) || ""; 1534 return $scope.fipeQueryKindChanged(); 1535 }; 1536 fromForm = function() { 1537 var collateralDisplay, form; 1538 form = $scope.collateralForm; 1539 collateralDisplay = angular.copy(form); 1540 collateralDisplay.statusName = ""; 1541 collateralDisplay.kindName = ""; 1542 collateralDisplay.subKindName = ""; 1543 collateralDisplay.sourceName = ""; 1544 collateralDisplay.description = []; 1545 collateralDisplay.individualization = []; 1546 if (collateralDisplay.loanLinkKind !== "L") { 1547 collateralDisplay.loanInfo = null; 1548 } 1549 delete collateralDisplay.loanLinkKind; 1550 collateralDisplay.value = $scope.currentValue(); 1551 if (form.kind === KIND_CODE_VEHICLE) { 1552 collateralDisplay.property = void 0; 1553 collateralDisplay.vehicle.referenceDateCode = "" + form.vehicle.referenceDateCode; 1554 if (form.subKind === SUB_KIND_CODE_OTHER_VEHICLE) { 1555 collateralDisplay.vehicle.referenceDate = $scope.vehicleOtherReferenceDate; 1556 } 1557 collateralDisplay.valuationDate = collateralDisplay.vehicle.referenceDate; 1558 } else if (form.kind === KIND_CODE_PROPERTY) { 1559 collateralDisplay.vehicle = void 0; 1560 collateralDisplay.valuationDate = $scope.propertyValuationDate; 1561 collateralDisplay.source = $scope.propertySource; 1562 } 1563 collateralDisplay.updateDate = sn.u.dates.dateToYMD(new Date()); 1564 return collateralDisplay; 1565 }; 1566 setHistory = function() { 1567 if ($scope.collateralCurrentHistory) { 1568 $scope.isNewRecord = false;
1569 toForm($scope.collateralCurrentHistory); 1570 } else { 1571 $scope.isNewRecord = true; 1572 $scope.collateralForm = newCollateralForm(); 1573 $scope.collateralForm.operationLabel = "Inclusão"; 1574 } 1575 return fillIdentifier(); 1576 }; 1577 validateIdentifier = function(collateralHistoryToSave, callback) { 1578 var id, identifierInfo; 1579 if (collateralHistoryToSave.identifier.trim() !== "") { 1580 id = collateralHistoryToSave._id ? collateralHistoryToSave._id : "_"; 1581 identifierInfo = { 1582 id: id, 1583 identifier: collateralHistoryToSave.identifier 1584 }; 1585 return ConfigurationService.identifierAlreadyInUse(identifierInfo).then(function(result) { 1586 if (result.trim() === "YES") { 1587 return feedback.timedError("O identificador " + collateralHistoryToSave.identifier + " já está em uso. Favor alterar o identificador."); 1588 } else { 1589 return callback(collateralHistoryToSave); 1590 } 1591 }, function(error) { 1592 return feedback.timedServerError(); 1593 }); 1594 } else { 1595 return callback(collateralHistoryToSave); 1596 } 1597 }; 1598 saveCollateralHistorySuccess = function(savedCollateralHistory) { 1599 var newLoanId, ref; 1600 savingCollateralHistory = false; 1601 $scope.isNewRecord = false; 1602 newLoanId = ((ref = savedCollateralHistory.loanInfo) != null ? ref.loanId : void 0) || ""; 1603 if (newLoanId !== originalLoanId) { 1604 eventBus.fire('collateralHistoryLoanLinkChanged', { 1605 collateralId: savedCollateralHistory._id, 1606 previousLoanId: originalLoanId, 1607 newLoanId: newLoanId 1608 }); 1609 originalLoanId = newLoanId; 1610 } 1611 $scope.inGridMode(); 1612 return feedback.timedSuccess("Garantia salva com sucesso."); 1613 }; 1614 saveCollateralHistoryError = function(error) { 1615 savingCollateralHistory = false; 1616 return feedback.timedError(error.message); 1617 }; 1618 save = function(collateralDisplay) { 1619 savingCollateralHistory = true; 1620 return CollateralHistoryModel.save(collateralDisplay, $scope.isNewRecord, saveCollateralHistorySuccess, saveCollateralHistoryError); 1621 }; 1622 validateCollateral = function(collateralDisplay) { 1623 return save(collateralDisplay); 1624 }; 1625 isRemovingLoanLink = function() { 1626 return !$scope.isNewRecord && originalLoanId !== "" && !$scope.collateralForm.loanInfo; 1627 }; 1628 statusName = function(statusCode) { 1629 switch (statusCode) { 1630 case STATUS_CODE_RELEASED_COLLATERAL: 1631 return "Liberada"; 1632 case STATUS_CODE_COLLATERAL_PENDING_PERFECTION: 1633 return "Em constituição"; 1634 case STATUS_CODE_PERFECTED_COLLATERAL: 1635 return "ConstituÃda"; 1636 case STATUS_CODE_DISCONTINUED: 1637 return "Descontinuada"; 1638 default: 1639 return ""; 1640 } 1641 }; 1642 statusNameInPast = function(statusCode) { 1643 switch (statusCode) { 1644 case STATUS_CODE_RELEASED_COLLATERAL: 1645 return "liberou"; 1646 case STATUS_CODE_COLLATERAL_PENDING_PERFECTION: 1647 return "deixou em constituição"; 1648 case STATUS_CODE_PERFECTED_COLLATERAL: 1649 return "constituiu"; 1650 case STATUS_CODE_DISCONTINUED: 1651 return "descontinuou"; 1652 default: 1653 return ""; 1654 } 1655 }; 1656 hasLoanLinkSelected = function() { 1657 return $scope.collateralForm.loanLinkKind === "L"; 1658 }; 1659 statusForbidsLoanLink = function() { 1660 var ref; 1661 return (ref = $scope.collateralForm.status) === STATUS_CODE_RELEASED_COLLATERAL || ref === STATUS_CODE_DISCONTINUED; 1662 }; 1663 statusRequiresLoanLink = function() { 1664 var ref; 1665 return (ref = $scope.collateralForm.status) === STATUS_CODE_COLLATERAL_PENDING_PERFECTION || ref === STATUS_CODE_PERFECTED_COLLATERAL; 1666 }; 1667 removeLoanLink = function() { 1668 $scope.collateralForm.loanLinkKind = ""; 1669 return $scope.collateralForm.loanInfo = null; 1670 }; 1671 doSaveCollateralHistory = function() { 1672 var collateralToSave; 1673 collateralToSave = fromForm(); 1674 return validateIdentifier(collateralToSave, save); 1675 }; 1676 confirmSaveWithoutLoanLink = function(message) { 1677 return MessiService.confirmDialog(message).then(function(answer) { 1678 if (answer) { 1679 removeLoanLink(); 1680 return doSaveCollateralHistory(); 1681 } 1682 }); 1683 };
1684 $scope.saveCollateralHistory = function() { 1685 if ($scope.currentValue() === 0) { 1686 return feedback.timedError("à necessário informar o valor da garantia."); 1687 } else if (statusRequiresLoanLink() && !hasLoanLinkSelected()) { 1688 return feedback.timedError("Status " + (statusName($scope.collateralForm.status)) + " requer um contrato vinculado. Favor vincular contrato."); 1689 } else if (statusForbidsLoanLink() && hasLoanLinkSelected()) { 1690 return confirmSaveWithoutLoanLink("Você " + (statusNameInPast($scope.collateralForm.status)) + " esta garantia. O vÃnculo da mesma será removido do contrato a que estava vinculado. Deseja continuar ?"); 1691 } else if (isRemovingLoanLink()) { 1692 return MessiService.confirmDialog("O vÃnculo com a operação de crédito será removido. Deseja continuar?").then(function(answer) { 1693 if (answer) { 1694 return doSaveCollateralHistory(); 1695 } 1696 }); 1697 } else { 1698 return doSaveCollateralHistory(); 1699 } 1700 }; 1701 $scope.cancelEditCollateralHistory = function() { 1702 feedback.reset(); 1703 return $scope.inGridMode(); 1704 }; 1705 return ConfigurationService.load().$promise.then(function(config) { 1706 $scope.config = config; 1707 return setHistory(); 1708 }); 1709 }; 1710 1711 (function() { 1712 var config; 1713 config = ['$scope', '$http', 'CollateralHistoryModel', 'ConfigurationService', 'FipeBrands', 'FipeReferences', 'FipeService', 'feedback', '$timeout', 'MessiService', 'CustomerBankModel', 'Debounce', EditCollateralHistoryController]; 1714 return module.controller('spreadnet.collateralHistoryEditCtrl', config); 1715 })(); 1716 1717 module = this.angular.module('snCollateralHistory'); 1718 1719 UpdateValuationDialogController = function($scope, CollateralHistoryModel, FipeReferences, FipeService, feedback) { 1720 var FIPE_QUERY_KIND_BRAND_MODEL, FIPE_QUERY_KIND_CODE, KIND_CODE_VEHICLE, SUB_KIND_CODE_OTHER_VEHICLE, allReferences, blankVehicle, canUpdateFipeValue, collateralItem, editionFocus, eventBus, fipeParam, fipePriceError, hasBrandModelCodes, hasFipeCode, hide, isQueryByCode, parseFipeValue, referenceDateFor, refreshFipeValueSuccess, resetFipeValue, saveError, saveSuccess, updateReferenceMonthYear; 1721 eventBus = spreadnet.eventBus; 1722 editionFocus = spreadnet.editionFocus; 1723 KIND_CODE_VEHICLE = "V"; 1724 SUB_KIND_CODE_OTHER_VEHICLE = "9"; 1725 FIPE_QUERY_KIND_BRAND_MODEL = "B"; 1726 FIPE_QUERY_KIND_CODE = "C"; 1727 allReferences = FipeReferences.query(); 1728 collateralItem = {}; 1729 $scope.showing = false; 1730 $scope.form = {}; 1731 $scope.referenceMonthYear = ""; 1732 $scope.currentReferenceMonthYear = ""; 1733 $scope.currentValue = 0; 1734 $scope.fipeValueUpdated = false; 1735 $scope.isVehicle = function() { 1736 return $scope.form.kind === KIND_CODE_VEHICLE; 1737 }; 1738 $scope.isVehicleOther = function() { 1739 return $scope.isVehicle() && $scope.form.subKind === SUB_KIND_CODE_OTHER_VEHICLE; 1740 }; 1741 $scope.isVehicleFipe = function() { 1742 return $scope.isVehicle() && $scope.form.subKind !== SUB_KIND_CODE_OTHER_VEHICLE; 1743 }; 1744 blankVehicle = function() { 1745 return { 1746 referenceDate: "", 1747 brandName: "", 1748 modelName: "", 1749 yearFuelType: "", 1750 referenceDateCode: "", 1751 brandCode: "", 1752 modelCode: "", 1753 year: "", 1754 fuelTypeCode: "", 1755 fipeCode: "", 1756 renavam: "", 1757 licensePlate: "", 1758 chassis: "", 1759 fipeQueryKind: FIPE_QUERY_KIND_BRAND_MODEL 1760 }; 1761 }; 1762 updateReferenceMonthYear = function() { 1763 return $scope.referenceMonthYear = $scope.form.vehicle.referenceDate !== "" ? "" + ($scope.form.vehicle.referenceDate.toDate().toXDate().toString("MM/yyyy")) : ""; 1764 }; 1765 hide = function() { 1766 $scope.showing = false; 1767 return editionFocus.close(); 1768 }; 1769 $scope.show = function(item) { 1770 var ref; 1771 collateralItem = item; 1772 $scope.form = { 1773 kind: item.kind, 1774 subKind: item.subKind, 1775 value: item.value, 1776 valuationDate: item.valuationDate, 1777 vehicle: angular.copy(item.vehicle || blankVehicle()) 1778 }; 1779 updateReferenceMonthYear(); 1780 $scope.currentValue = item.value; 1781 $scope.currentReferenceMonthYear = $scope.referenceMonthYear; 1782 $scope.fipeValueUpdated = false;
1783 if ((ref = $scope.valuationForm) != null) { 1784 ref.$setPristine(); 1785 } 1786 return $scope.showing = true; 1787 }; 1788 referenceDateFor = function(code) { 1789 var reference; 1790 reference = _.find(allReferences, function(r) { 1791 return ("" + r._id) === ("" + code); 1792 }); 1793 if (reference) { 1794 return reference.date; 1795 } else { 1796 return ""; 1797 } 1798 }; 1799 parseFipeValue = function(valorStr) { 1800 var cleaned; 1801 cleaned = ("" + valorStr).replace(/[R$\s.]/g, '').replace(',', '.'); 1802 return parseFloat(cleaned) || 0; 1803 }; 1804 fipeParam = function() { 1805 var vehicle; 1806 vehicle = $scope.form.vehicle; 1807 return { 1808 vehicleTypeCode: Number($scope.form.subKind), 1809 refDateCode: Number(vehicle.referenceDateCode), 1810 brandCode: vehicle.brandCode, 1811 modelCode: vehicle.modelCode, 1812 fipeCode: (vehicle.fipeCode || "").trim(), 1813 yearModel: vehicle.year, 1814 fuelCode: vehicle.fuelTypeCode 1815 }; 1816 }; 1817 hasBrandModelCodes = function() { 1818 var vehicle; 1819 vehicle = $scope.form.vehicle; 1820 return !!(vehicle.brandCode && vehicle.modelCode); 1821 }; 1822 hasFipeCode = function() { 1823 return !!($scope.form.vehicle.fipeCode || "").trim(); 1824 }; 1825 isQueryByCode = function() { 1826 if ($scope.form.vehicle.fipeQueryKind === FIPE_QUERY_KIND_CODE) { 1827 return hasFipeCode() || !hasBrandModelCodes(); 1828 } else { 1829 return !hasBrandModelCodes(); 1830 } 1831 }; 1832 canUpdateFipeValue = function() { 1833 var vehicle; 1834 vehicle = $scope.form.vehicle; 1835 return !!((hasBrandModelCodes() || hasFipeCode()) && vehicle.year); 1836 }; 1837 resetFipeValue = function() { 1838 $scope.form.value = 0; 1839 return $scope.fipeValueUpdated = false; 1840 }; 1841 fipePriceError = function() { 1842 updateReferenceMonthYear(); 1843 feedback.timedError("Não existe o preço na tabela FIPE com o mês/ano de referência (" + referenceMonthYear + ") para a marca/modelo/ano selecionada."); 1844 return resetFipeValue(); 1845 }; 1846 refreshFipeValueSuccess = function(result) { 1847 $scope.form.value = parseFipeValue(result.Valor); 1848 $scope.form.vehicle.fipeCode = result.CodigoFipe || $scope.form.vehicle.fipeCode; 1849 updateReferenceMonthYear(); 1850 return $scope.fipeValueUpdated = true; 1851 }; 1852 $scope.updateFipeValue = function() { 1853 var vehicle; 1854 if (canUpdateFipeValue()) { 1855 if (allReferences.length) { 1856 vehicle = $scope.form.vehicle; 1857 vehicle.referenceDateCode = "" + allReferences[0]._id; 1858 vehicle.referenceDate = referenceDateFor(allReferences[0]._id); 1859 } 1860 if (isQueryByCode()) { 1861 return FipeService.valueByCode(fipeParam()).then(refreshFipeValueSuccess, fipePriceError); 1862 } else { 1863 return FipeService.valueByBrandModel(fipeParam()).then(refreshFipeValueSuccess, fipePriceError); 1864 } 1865 } 1866 }; 1867 saveSuccess = function() { 1868 feedback.timedSuccess("Avaliação atualizada com sucesso."); 1869 return hide(); 1870 }; 1871 saveError = function(error) { 1872 return feedback.timedError(error.message); 1873 }; 1874 $scope.save = function() { 1875 var itemToSave, today; 1876 if ($scope.form.value === 0) { 1877 return feedback.timedError("à necessário informar o valor da garantia."); 1878 } else { 1879 today = sn.u.dates.dateToYMD(new Date()); 1880 itemToSave = angular.copy(collateralItem); 1881 itemToSave.value = $scope.form.value; 1882 if ($scope.isVehicleFipe()) { 1883 itemToSave.valuationDate = $scope.form.vehicle.referenceDate; 1884 } else { 1885 itemToSave.valuationDate = $scope.form.valuationDate; 1886 } 1887 itemToSave.updateDate = today; 1888 if ($scope.isVehicle()) { 1889 itemToSave.vehicle = angular.copy($scope.form.vehicle); 1890 } 1891 return CollateralHistoryModel.save(itemToSave, false, saveSuccess, saveError); 1892 } 1893 }; 1894 $scope.cancel = function() { 1895 return hide(); 1896 }; 1897 $scope.canSave = function() { 1898 if ($scope.isVehicleFipe()) { 1899 return $scope.fipeValueUpdated; 1900 } else { 1901 return !!($scope.valuationForm && $scope.valuationForm.$dirty); 1902 } 1903 };
1904 return eventBus.subscribe('updateValuationDialog', $scope.show, $scope); 1905 }; 1906 1907 (function() { 1908 var config; 1909 config = ['$scope', 'CollateralHistoryModel', 'FipeReferences', 'FipeService', 'feedback', UpdateValuationDialogController]; 1910 return module.controller('spreadnet.updateValuationDialogCtrl', config); 1911 })(); 1912 1913}).call(this);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.