{"version":3,"sources":["scripts/app.js"],"names":["config","$stateProvider","msNavigationServiceProvider","state","abstract","url","saveItem","title","group","weight","icon","$inject","angular","module","PartnersPartnerRentableShowDialogController","$mdDialog","Rentable","_init","vm","rentable","id","dateFrom","Date","zoneId","rentableZone","cancel","hide","this","controller","PartnersPartnerRentableDialogController","api","msg","FamilyId","RefreshTable","$scope","partners","getByFamily","familyId","response","family","periodicities","catalogs","query","applyDiscount","calculationModes","filter","m","save","rentableId","rentables","success","error","PartnersPartnerLevelDialogController","Level","employees","e","employeeTypeId","levels","levelScores","activities","today","moment","years","push","year","i","evaluations","level","copy","PartnersPartnerFamilyDialogController","Familiar","Partner","utils","Catalogs","isLocked","$document","$state","partner","minBirthdate","subtract","toDate","maxBirthdate","duePrices","get","partnerId","parentPartnerId","familiar","agreements","forEach","x","a","branches","ca","branch","birthdate","birthdateChange","dueChange","inscriptionDate","initPayDate","isFamily","active","dues","current","name","reload","go","age","calculateAge","date","month","dueId","searchType","searchId","duePeriodicityId","length","periodicity","duePeriodicityText","price","toFixed","showAutomaticPayment","ev","show","controllerAs","templateUrl","targetEvent","escapeToClose","clickOutsideToClose","locals","PartnersPartnerAddressDialogController","Address","PartnerID","addressTypes","satRegimenFiscales","sat","regimenFiscales","address","addressTypeId","isDefault","addresses","PartnersPartnerBecasDialogController","Beca","becas","beca","dateTo","discountPercentage","PartnersPartnerActivityDialogController","PartnerActivity","Callback","partnerActivity","activity","activityScheduleZone","activitySchedule","activityId","activityChange","schedule","schedules","s","scheduleChange","zoneChange","activityScheduleId","activitiesSchedules","activitiesSchedulesZones","scheduleId","activityZones","validatingQuota","verify","activityScheduleZoneId","quotaOk","errorResponse","Absence","absence","format","absences","getContractState","result","views","content@app","bodyClass","resolve","Item","apiResolver","$stateParams","isRecurrent","calculationModeId","payedDate","PartnerTypes","Dues","Media","Countries","Agreements","Professions","Genders","ClubAccess","Employees","CalculationModes","AccessTimeZones","Branches","Acciones","prospectId","partnerTypeId","Contract","isLastData","shortcuticon","PartnersChangePayedDatesController","Titular","callback","titular","close","selectPartner","item","newPayedDate","saveDues","confirm","applyAllPartners","_save","selectRentable","newPayedDateRentable","saveRentables","type","changeObject","newDate","applyAll","applyAllRentables","changeDates","partnersPartnerPictureController","CONST_DATATABLES","localStorageService","picturesUrl","baseUrl","replace","parentScope","$parent","saving","files","$","file","data","FormData","append","authData","ajax","contentType","processData","headers","Authorization","token","status","responseJSON","exceptionMessage","PartnersPartnerRentablesController","_refresh","detail","remove","partnersPartnerPaymentsController","BranchId","branchId","summary","groupBy","g","totalFolios","orderTypeGroups","items","orderTypeIn","total","InvoiceGroup","folio","isCanceled","orderType","key","count","map","reduce","b","partnersPartnerOtherChargesController","p","partnerChange","_getDues","inventory","products","quantity","product","isStockRequired","plannedNew","periodicalProductNew","_getPeriodicalProducts","_getPlannedProducts","d","isFamiliar","isTitular","invoices","plannedProducts","periodicalProducts","addPlanned","expirationDate","addType","addPeriodicity","isDue","productId","periodicalDueChange","fromEdit","periodicityId","plannedAccept","plannedRemove","groupId","_plannedRemove","periodicalAccept","periodicalRemove","periodicalEdit","PartnersPartnerLevelsController","PartnersPartnerFamilyController","partnerDue","familiarSelected","Locked","familiarMaxNumber","countries","professions","genders","clubAccess","partnerTypes","accessTimeZones","showClubAccess","PartnersPartnerInvoicesController","now","from","to","endOf","selected","_getOrders","_getInvoices","orders","getByPartner","getData","receipt","coupon","id2","id3","select","indexOf","splice","generateInvoice","alert","showOrderDetail","OrderId","PartnersPartnerBecaController","parent","element","find","partnersPartnerController","deleteAddress","PartnersPartnerActivitiesController","_getPartnersActivities","partnerActivities","_detailCallback","PartnersPartnerAbsenceController","partnersPartnerDialogSignatureMouseController","signature","clearSignature","$broadcast","onClear","onDone","newSignature","partnersPartnerDialogSignatureController","onSign","ctx","document","getElementById","getContext","SetDisplayXSize","SetDisplayYSize","SetTabletState","tmr","SetJustifyMode","ClearTablet","NumberOfTabletPoints","SetSigCompressionMode","SetImageXSize","SetImageYSize","SetImagePenWidth","GetSigImageB64","SigImageCallback","str","value","accept","closingSigWeb","setTimeout","hdn","window","onunload","onbeforeunload","partnersPartnerDuesDialogController","minAge","maxAge","partnerType","due","automaticPayment","partnersPartnerDialogAccessController","selectedBranchesIds","getAll","timeZonesResponse","branchTimeZones","tz","timeZones","access","acc","clubAccessId","tzFilter","timeZoneId","groups","selectedClubAccess","accessChecked","partnersPartnerAddressDialogController","paymentMethods","paymentMethodOptions","isEnabled","isCreating","expirationMonth","parseInt","cardExpiration","substr","expirationYear","cardNumber","enable","disable","getDataFromTitular","extend","partnersPartnerDialogAccionesController","acciones","selectedAccion","partnersPartnerInfoDialogPassesController","pass","passes","passTypes","getPasses","selectedPass","add","passId","validFrom","validTo","generatePlannedProduct","productPrice","passNumber","completeName","email","print","isPrintable","isSendByEmail","checkPassNumber","isNaN","number","checkPassNumberOk","passType","showPrintable","partnersPartnerInfoDialogMessagesController","message","messages","_getMessages","filterIsView","selectedMessage","isviewed","read","isViewed","unread","partnersPartnerInfoDialogCredentialController","authService","appData","getAppData","logo","settings","logoFile","div","tempotal","createElement","qrcode","QRCode","makeCode","Partners","keyword","pageNumber","pageSize","PaymentMethods","PaymentMethodOptions","Tpvs","Order","invoicesOrdersOrderDialogController","order","invoicesOrdersInvoiceDialogController","Invoice","init","invoice","expeditionDateString","expeditionDate","viewMode","orderFolio","satZipcode","zipCode","code","zipCodeChange","targetSatZipcode","targetZipCodeChange","satInvoiceTypes","invoiceTypes","satCoins","coins","satPayments","payments","satPaymentMethods","satCfdiUses","cfdiUses","satCfdiUsesRegimenFiscal","sending","validatingZipCode","satZipcodeId","zipCodes","zipcode","validatingTargetZipCode","targetSatZipcodeId","usesCFDI","satRegimenFiscalId","invoicesOrdersCancelDialogController","InvoiceId","catInvoiceCancellationReason","invoiceId","paymentConditions","catInvoiceCancellationReasons","invoiceCancellationReasonId","UuidReference","controllerFunction","getTurns","dtInstance","dtOptions","OPTIONS","pageLength","filterOpenOptions","text","isOpen","turns","dateIni","dateEnd","closeDialog","closeTurn","turn","openTurn","invoicesOrderDialogMessagesController","Messages","setSelected","InvoicesInvoiceDialogIncompletePeriodsController","Periods","periods","invoicesInvoiceDialogEditController","Detail","subtotal","interest","discountAmmount","NotasCredito","invoicesNotasCreditoDialogController","NotaCredito","invoiceSerie","conceptos","conceptosNotaCredito","cfdiRelacionado","searchInvoiceLoading","searchInvoice","invoiceNumber","getByFolio","serie","invoiceFolio","xmlString","xmlPath","details","nCorderId","SatCfdiRelacionadoId","ncOrders","selectedOrder","remainingAmount","conceptoNotaCreditoId","conceptoNotaCredito","description","notasCredito","orderSelectedChange","ApplyDiscount","Product","discount","ammount","discountTypes","discountAccept","Inventory","cost","warehouseId","InventoryInventoriesDialogInventoryController","warehouses","RentableZones","RentableZone","matrixRows","matrixColumns","CatalogsRentableZonesPricesDialogController","PriceGroupId","RentableZoneId","settingsService","rentableZonePrices","rentableZoneId","header","priceHeader","interes","daysOfGrace","newPrices","pricePerDay","prices","Due","familiarMinNumber","Periodicities","Accounts","CatalogsDuePricesDialogController","DueId","pricePerClass","ReportGroups","Users","reportsSociosVigentesController","reportsService","$filter","reportData","getReportData","dueGroups","dueGroup","periodicityGroups","dg","pg","reportsSociosVendedorController","branchGroups","branchGroup","sellerGroup","bg","sg","sellerName","ageRange","reportsSociosTypeDueController","typePeriodo","reportsSociosTipoController","tipoCuota","masculino","femenino","vencido","vigente","menVencido","menVigente","biVencido","biVigente","triVencido","triVigente","cuaVencido","cuaVigente","semVencido","semVigente","anuVencido","anuVigente","semanalVencido","semanalVigente","genderName","periodicitiesName","vigencia","ReportsSociosStatusController","totalGroup","totalGroupRecurrente","membershipType","period","totalperiod","parentPartner","totalRecurrente","totalNoRecurrente","periodType","recurrent","totalPeriod","reportsSociosInvoicesOrdersController","y","reportsSociosInactivosController","reportsSociosGeneralController","totalActive","totalInactive","otg","estatus","reportsSociosGeneralPagoController","vigentes","vencidos","dueName","statusPartners","reportsSociosCupoController","activityGroups","ag","quota","reportsSocioConvenio","reportsSociosCargoAutomaticoBancoController","reportsSociosCargoAutomaticoController","paymentMethodGroups","pmg","paymentMethodOptionsGroups","pmog","pmName","pmoName","amount","reportsSociosByInscriptionDateController","mediaGroup","reportsSociosBirthdayController","reportsSociosBetweenDatesController","reportsSocioAusencia","reportsSociosaltasController","totalDomicialiado","totalNoDomicialiado","domiciliado","periodo","reportsSociosAgeRangesController","report","parameters","rangeGroups","rg","reportsSociosActivosController","reportsRentablesController","disponibles","ocupados","tipoCasillero","namePartner","reportsProspectosGeneralController","totalInscritos","totalNoInscritos","seller","inscrito","reportsExportsGeneralIntelisisReciptController","reportsExportsGeneralIntelisisController","reportsExportsGeneralController","reportsDocumentCancelController","ImporteTotal","IvaTotal","TotalTotal","orderTypes","importe","iva","reportsOtrosIngresosController","reportsCortesCajaIngresosGeneralesController","totalSeller","typeIncomeGroup","typeIncome","totalTypeIncomeGroup","reportsCortesCajaCorteProductsController","reportsNotasCreditoController","totalItems","totalItemsNoParciales","totalItemsParciales","noParciales","parciales","esTotal","ncTotal","reportsCortesCajaCorteFormaPagoController","Excel","$timeout","totalAll","branchPercentage","totalPercentage","reportsCorteTPVController","TPVS","TPV","cancelado","reportsCortesCajaCorteCobranzaController","totalFR","totalNC","fecha","receipts","receiptsSubtotal","receiptsDiscount","receiptsIva","invoicesSubtotal","invoicesDiscount","invoicesIva","ncs","ncsSubtotal","ncsIva","receiptTotal","receiptDiscountTotal","invoiceTotal","invoicesDiscountTotal","receip","invoiceDiscont","orderDiscont","nc","groupType","groupDate","allReceipts","allReceiptsDiscount","allInvoices","allInvoicesDiscount","allNc","Prospects","Seller","Prospect","partnersProspectsProspectDialogController","prospect","isSignedUp","sellers","user","userType","isShowAllProspects","userId","media","prospects","partnerProspectCallendarEventController","DialogData","calendars","calendarEvent","dialogData","start","end","startTime","endTime","dialogTitle","selectedSeller","employee","saveEvent","employeeCalendarEvents","employeeId","notes","visible","insertDate","insertUserId","partnersPartnerKardexController","partnerAutomaticPayment","MontoDomiciliado","FechaExpiracion","partnersPartnerContractController","signatureBase64","signatureSrc","sendingEmail","contracts","showSignature","controllerName","useSignatureMouse","showSignatureCallback","base64Sign","sendByEmail","prompt","emails","entityId","_","getLastData","getContract","logoSource","logoBase64String","partnersPartnersInfoPassPrintController","sendToApi","imageSaving","html2canvas","querySelector","then","canvas","toDataURL","passesFiles","base64String","console","log","emailSending","JsBarcode","displayValue","$on","pdfDownload","tst","sendMail","partnerPassId","partnersPartnerCredentialController","credentialCode","credentialFiles","PartnerCredentialId","QR","outerHTML","UserTypes","UserType","invoicesPlannedProductsDialogAddController","minExpiration","addTypes","ariaLabel","getByFilters","titulares","productChange","msApiProvider","productTypeId","isGenerateCoupons","ProductTypes","$sce","Refresh","msApi","productTypes","loadingTemplate","changeType","massiveTemplates","properties","prop","isAllChecked","addToDescription","html","trustAsHtml","checkAllChange","property","options","opt","massiveProducts","Passes","CatalogsPassesMassiveRemoveDialogController","ChangeStatus","massiveRemove","initNumber","endNumber","massiveDelete","CatalogsPassesMassiveAddDialogController","LastNumber","lastNumber","duesRulesConfig","DuesRules","catalogsDuesRulesDetailDialogController","DueRule","actions","action","newDues","dueCurrentId","duesRules","accionistasAccionesConfig","accionistasAccionesMassiveAddDialogController","accionistas","securityUserController","User","userTypes","gotoReturn","security","users","dom","columnDefs","targets","width","responsivePriority","filterable","sortable","initComplete","searchBox","on","event","search","target","draw","pagingType","lengthMenu","scrollY","responsive","gotoAdd","gotoDetail","resetPassword","change","dtUserTypesInstance","dtUserTypesOptions","edit","deleteItem","securityUserTypeController","msUtils","treeViewAccessData","originalAccess","isMenu","menu","label","children","fatherAccessId","subAcceso","submenu","control","subMenu","accessControl","selectAll","securityBranchesController","dtBranchInstance","dtBranchOptions","securityBranchController","Branch","Warehouses","discountOrders","satTaxes","taxes","satTaxTypes","taxTypes","invoicingModes","setting","satZipCode","satProduct","satUnit","satProductId","satUnitId","uploadFile","uploadImage","fileName","uploadCerFile","certificateFilePath","certificateFileName","certificateEdit","uploadKeyFile","keyFilePath","keyFileName","keyEdit","uploadXsltFile","satTransformationFilePath","xsltEdit","uploadPfxFile","pfxFilePath","pfxEdit","satZipCodeId","getPartners","getByFiltersPaginated","innerKeyword","pageIndex","showFamiliars","pageTotal","Math","ceil","selectedPartner","nextPage","previousPage","familiarsFilter","dtPartnersInstance","dtPartnersOptions","searchable","titularId","changePayedDatesShow","_changePayedDates","sendToOrder","accionistaId","accionId","accion","isNew","showAcciones","_accionesCallback","fatherLastname","accionista","motherLastname","searchAccion","accionesFilter","toUpperCase","partnerTypeChange","sendToContract","contractLayout","sendToKardex","partnersPartnersInfoController","filtersOptions","filterType","titulars","familiars","info","searchResult","partnerSelect","sequentialNumber","selectedFamiliar","selectedTitular","f","goToPartnerDetails","goToPartnerDgoToPartnerCredentialetails","showMessages","showPasses","showCredential","InvoicesOrdersReceiptController","copies","receiptCopies","invoiceGenerating","generate","disableParentScroll","chageSize","divLetter","divSeven","btnChangeSize","classList","contains","InvoicesOrdersController","getByPeriod","_getPartnersFromOrders","partnersInOrders","cancelOrder","ordersSelected","ordersFiltered","o","selectAllFlag","_generateInvoiceCallback","showInvoiceDetail","showInvoice","cancelInvoice","invoicesOrderController","_initStep1","_initStep2","calcDate","partnerSeachCode","calculate","searchPartnerByCode","calculating","_showTurns","_calculate","calculation","check","calculationDate","isIncomplete","__calculate","partnerMessages","isVisibleInOrder","checkByPartnerId","duesRulesResponse","incompletePeriods","_updateTotals","_turnsCallback","searchProductByCode","codeToSearch","_searchProductCallback","interests","payment","payed","_updatePayed","searchProduct","detailType","periodDate","initialPeriodDate","productQuantityChange","productRemove","deletable","serialDelete","showDiscountDialog","_discountAccept","_applyDiscount","discountType","cleanDiscount","cleanAll","cleanInterests","detailEditShow","_detailEditCallback","oldItem","newItem","productDetail","tpvs","partnerAddresses","modifyAddress","_newPayment","paymentMethod","paymentMethodChange","paymentMethodId","paymentMethodOption","addPayment","paymentFilter","toLowerCase","paymentRemove","generateNotes","monthsAbrevs","abrev","periodicityAbrev","periodNote","initPeriodDate","endPeriodDate","paymentAbrev","substring","reference","saveOrder","$watch","newValue","newPartner","InvoicesOrdersCouponController","range","Array","couponNumber","invoicesNotasCreditoController","getNotasCredito","showNotaCredito","nota","view","InventoryInventoriesController","_get","dtInventoryInstance","dtInventoryOptions","oldQuantity","oldPrice","CatalogsRentableZonesController","zones","rentableZones","rentableZoneController","rentablesGenerated","startNumber","_getPrices","getByRentableZone","assignedRentables","returnBack","each","attr","val","matrixId","generateMatrix","table","counter","height","row","htmlRow","col","cell","style","appendChild","index","l","addClass","partnerRentable","mousedown","isMouseDown","hasClass","posibleNumber","toggleClass","isHighlighted","mouseover","bind","configSelected","showPrices","priceGroupId","_priceCallback","priceDelete","_getProducts","massiveAdd","CatalogProductController","gotoProducts","templates","newOption","productPropertyId","filteredOptions","accounts","_getProductTypes","render","ProductType","catalogsProductTypeController","_getProperties","productProperties","propertyAdd","optionAdd","propertyEdit","isEditMode","_getOptions","propertySave","propertyDelete","productPropertyOptions","propertyId","option","optionSave","optionDelete","showCalendar","Employee","startDate","EmployeeTypes","catalogsEmployeeController","employeeTypes","openDetail","idDue","location","dueController","priceDtInstance","priceDtOptions","ConceptosNotaCredito","ConceptoNotaCredito","catalogsConceptosNotaCreditoController","dtConceptosInstance","dtConceptosOptions","catalogsConceptoNotaCreditoController","Activities","Activity","activityController","_getSchedule","scheduleDtInstance","scheduleDtOptions","scheduleAdd","isMonday","mondayInitHour","mondayEndHour","isTuesday","tuesdayInitHour","tuesdayEndHour","isWednesday","wednesdayInitHour","wednesdayEndHour","isThursday","thursdayInitHour","thursdayEndHour","isFriday","fridayInitHour","fridayEndHour","isSaturday","saturdayInitHour","saturdayEndHour","isSunday","sundayInitHour","sundayEndHour","zone","contentElement","scheduleAddCancel","scheduleSave","timeFrom","fromHour","fromMinutes","timeTo","toHour","toMinutes","scheduleEdit","currentZone","z","scheduleDelete","allQuotaChange","mondayQuota","allQuota","tuesdayQuota","wednesdayQuota","thursdayQuota","fridayQuota","saturdayQuota","sundayQuota","catalogsAccessTimeZonesController","dtAccessTimeZoneInstance","dtAccessTimeZoneOptions","catalogsAccessTimeZoneController","AccessTimeZone","reportsTstController","printContents","innerHTML","body","navigator","userAgent","popupWin","open","focus","write","onabort","reportsSelectorController","u","generating","selectedGroup","reports","selectedReport","viewModes","statusVigente","include","setReportData","viewModeFilter","itemId","pmid","selectedUsers","usersSelectUnselectAll","selectedProducts","productSelectUnselectAll","reportsDashboardController","_loadPopulation","_loadDebts","_loadPartnersByAge","_loadPartnersByGender","_loadInscriptions","_loadInscriptionsByWeek","_loadSales","_loadSalesByType","_loadSalesTop","_loadSalesTopByType","_loadSalesYear","_loadSalesYearByType","dashboard","population","labels","legend","display","position","debts","sumBy","byage","gender","bygender","inscriptions","k","series","inscriptionsbyweek","sales","split","scales","yAxes","ticks","currnecyYAxisTicksConfig","tooltips","currencyTooltipConfig","salesbytype","scaleShowVerticalLines","xAxes","stacked","salestop","salestopbytype","round","salesyear","monthName","salesyearbytype","currencyFriendlyFormat","decimals","callbacks","tooltipItem","partnersProspectsController","prospectComments","_getProspects","showDetail","selectProspect","fromSuccesComment","selectedProspect","selecting","comments","prospectRemove","_showDetailCallback","commentAdd","addingComment","comment","commentAccept","commentCancel","prospectSignup","prospectsFilter","prospectsFiltered","onlySignedUpFilter","partnerProspectCallendarController","events","_getEvents","calendarUiConfig","calendar","defaultView","editable","eventLimit","handleWindowResize","aspectRatio","dayNames","dayNamesShort","monthNames","viewRender","calendarView","currentMonthShort","getDate","columnFormat","week","day","selectable","selectHelper","eventClick","eventDetail","getByProspect","_getEventsResponse","eventList","next","prev","showEventFormDialog","addEvent","utc","selectedSellerChange","selectedProspectChange","main@","content@app.license","licenseLoginDialogController","app","license","invoicesTurnsController","invoicesReceiptController","pdfSaving","docDefinition","content","image","pdfMake","createPdf","getBase64","encodedString","pdf","convertirGrupo","n","texto","c","centenas","especiales","decenas","unidades","trim","convertirNumero","num","numStr","toString","entero","padStart","centavos","padEnd","millones","miles","qrCode","download","fileDownload","filePath","extension","getFile","link","setAttribute","click","numberToLetters","invoicesPlannedProductsController","PlannedProducts","_addCallback","_remove","invoicesComplementsController","fromFake","maxDate","pendingInvoices","invoiceComplements","includeCompletePayed","complement","banks","satBanks","cadenas","satCadenas","getPendingInvoices","balance","selectInvoice","selectedInvoice","rfcReceptor","targetRfc","rfcEmisorBeneficiario","rfc","paymentDate","satCoin","satCoinId","expeditionSatZipCode","expeditionSatZipCodeId","getcomplementsByInvoice","complements","complementsResponse","totalComplements","comp","MontoAnterior","Complement","saldoAnterior","saldoInsoluto","saveComplement","satPaymentId","satPayment","InvoicesBatchOrdersController","loading","$apply","responseText","apiUrl","catalogsPassesController","_getPasses","dtPassesInstance","dtPassesOptions","last","ordered","_changeStatus","deleting","catalogsDuesRulesController","_getDuesRules","dtDuesRulesInstance","dtDuesRulesOptions","accionistasPurchaseConfig","Accionistas","accionistasTransferController","transferToClub","accionesSource","accionistaSource","book","accionistaSourceChange","accionistasTaget","selectedAcciones","selectAccion","accionistaTarget","transfers","accionistasPurchaseController","isAccionista","step","purchaseFromClub","fromClubChange","newAccionista","unselectAllAcciones","goToStep","stepNumber","companyName","currentAcciones","availableAcciones","availableAccion","selectAllAcciones","unselectAccion","getAccionesFromAccionista","sellerAccionistaId","accionistasAccionesController","_getAcciones","dtAccionesInstance","dtAccionesOptions","removing","$translatePartialLoaderProvider","addPart","ChatTabController","excelController","excelExport","tableId","exportHref","tableToExcel","href","factory","$window","uri","template","base64","btoa","unescape","encodeURIComponent","worksheetName","worksheet","TestSelectionController","cols","rows","pagesProfileController","avatarsUrl","mainSave","username","updateUserData","mainAvatarSave","avatar","pwdSave","changePassword","content@app.login","LoginDialogController2","Password","contesena","cerrarSesiones","login","userName","password","closeSession","contrasena","accessResponse","$resolved","loginDialogController","controlsAccess","selectOnFocus","restrict","scope","attrs","focusedElement","self","directive","dynamicTemplate","$compile","$parse","parse","ngBindHtml","compareTo","require","otherModelValue","attributes","ngModel","$validators","modelValue","$validate","initSignaturePad","ratio","max","devicePixelRatio","clientWidth","clientHeight","scale","signaturePad","SignaturePad","backgroundColor","penColor","resizeCanvas","clear","addEventListener","fromDataURL","removeEventListener","onEnd","catalogSelect","mdSelectedItem","transclude","catalogCtrl","apiGroupName","apiName","apiList","apiService","required","undefined","dateFolioDirective","getNowUTC","changeEvent","getTime","getTimezoneOffset","cdReportDatePeriod","filterByDate","cdReportAgeRangesDirective","ageRanges","addRange","mainController","$element","assigned","partnerName","_generateMatrix","removeClass","$setViewValue","mouseup","priority","compile","regexp","patternExp","pre","elm","ctrl","$observe","regex","isString","RegExp","test","post","ngPattern","pattern","$isEmpty","isUndefined","partnersDirective","partnersRange","inputTime","processTable","$table","cells","cellContent","exportExcelDirective","exportToExcel","cdEnterDirective","$attrs","which","$eval","cdEnter","preventDefault","dirPaginateDirective","paginationService","dirPaginationCompileFn","tElement","tAttrs","expression","cdCustomGrid","match","filterPattern","itemsPerPageFilterRemoved","collectionGetter","addNoCompileAttributes","rawId","paginationId","DEFAULT_ID","registerInstance","repeatExpression","getRepeatExpression","addNgRepeatToElement","removeTemporaryAttributes","compiled","currentPageGetter","makeCurrentPageGetterFn","setCurrentPageParser","setAsyncModeTrue","setCollectionLength","setAsyncModeFalse","$watchCollection","collection","collectionLength","Object","keys","idDefinedInFilter","hasAttribute","$set","eq","el","nodeType","removeAttr","currentPage","defaultCurrentPage","terminal","multiElement","noCompileDirective","dirPaginationControlsTemplateInstaller","$templateCache","put","dirPaginationControlsDirective","paginationTemplate","dirPaginationControlsLinkFn","goToPage","isRegistered","isValidPageNumber","oldPageNumber","pagination","pages","generatePagesArray","getCollectionLength","getItemsPerPage","paginationRange","updateRangeValues","onPageChange","newPageNumber","generatePagination","page","getCurrentPage","setCurrent","itemsPerPage","lower","upper","min","numberRegex","idMessage","warn","maxSize","autoHide","directionLinks","isDefined","boundaryLinks","previous","setCurrentPage","tracker","rowsPerPage","totalPages","halfWay","ellipsesNeeded","calculatePageNumber","openingEllipsesNeeded","closingEllipsesNeeded","DDO","templateString","getString","elem","getPath","itemsPerPageFilter","isObject","isAsyncMode","setItemsPerPage","slice","slicedObject","obj","objKeys","hasOwnProperty","lastRegisteredInstance","instances","instanceId","asyncMode","deregisterInstance","getLastInstanceId","currentPageParser","context","assign","parser","paginationTemplateProvider","templatePath","setPath","path","setString","$get","moduleName","service","provider","run","listApiGroup","listApiSource","list","args","model","modelName","$emit","catalogInput","catalog","loadData","openDetailDialog","detailTitle","itemName","apiGroup","nombre","catalogCheck","MsWidgetController","flip","isFlippable","flipped","flippable","msWidgetDirective","iElement","iAttrs","MsWidgetCtrl","transcludeFn","clone","empty","msWidgetFrontDirective","flipWidget","msWidgetBackDirective","MsTimelineController","setScrollEl","scrollEl","getScrollEl","msTimelineDirective","msTimeline","loadMore","MsTimelineCtrl","onScroll","scrollTop","threshold","loadMoreEl","top","unregisterOnScroll","registerOnScroll","off","msTimelineItemDirective","$q","cardEl","testForImage","itemLoaded","testForVisibility","deferred","defer","imgEl","promise","itemInViewport","itemReadyWatcher","old","equals","MsShortcutsController","$cookies","msNavigationService","loadShortcuts","shortcuts","results","resultsLoading","populateResults","flatNavigation","getFlatNavigation","uisref","lowercase","hasShortcut","_id","selectedResultIndex","fromJson","toJson","saveShortcuts","addShortcut","removeShortcut","handleResultClick","absorbEvent","handleKeydown","keyCode","ensureSelectedResultIsVisible","handleMouseenter","ignoreMouseEvents","temporarilyIgnoreMouseEvents","mouseEventIgnoreTimeout","resultsEl","selectedItemEl","bottom","outerHeight","toggleMobileBar","mobileBarActive","queryOptions","debounce","sortableOptions","ghostClass","forceFallback","fallbackClass","onSort","msShortcutsDirective","bindToController","MsStepperController","setOrientation","orientation","registerMainForm","form","mainForm","registerStep","steps","stepTitle","stepTitleTranslate","sort","setupSteps","setCurrentStep","currentStepNumber","resetForm","$setPristine","$setUntouched","gotoFirstStep","isStepNumberValid","j","gotoStep","isStepHidden","gotoPreviousStep","gotoNextStep","gotoLastStep","isFirstStep","isLastStep","isStepCurrent","isStepDisabled","disabled","isStepValid","isStepOptional","optionalStep","hideStep","filterHiddenStep","$valid","isFormValid","currentStep","msHorizontalStepperDirective","ctrls","FormCtrl","MsStepperCtrl","msHorizontalStepperStepDirective","msVerticalStepperDirective","msVerticalStepperStepDirective","stepInfo","MsStepper","msSplashScreenDirective","$animate","splashScreenRemoveEvent","leave","msSidenavHelperDirective","MdSidenavCtrl","isLockedOpen","MsSearchBarController","collapsed","onSearchEvaluated","onSearch","isArray","isPromise","isNull","expand","onExpand","isFunction","collapse","onCollapse","onResultClick","msSearchBarDirective","inputEl","bodyEl","msScrollConfigProvider","configuration","defaultConfiguration","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","useKeyboard","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","stopPropagationOnClick","getConfig","msScrollDirective","msScrollConfig","fuseConfig","isMobile","updateScrollbar","PerfectScrollbar","update","msScroll","initialize","destroy","msResponsiveTableDirective","wrapper","after","msRandomClassDirective","msRandomClass","randomClass","floor","random","$log","parts","_findOrCreateParent","updateItem","_getUiSref","isNumber","_path","navigation","sortByWeight","_byWeight","pop","createParent","join","stateParams","injector","clearNavigation","navigationScope","setActiveItem","node","activeItem","getActiveItem","getNavigation","root","_flattenNavigation","setNavigationScope","setFolded","folded","getFolded","setFoldedOpen","foldedOpen","getFoldedOpen","toggleFolded","flatNav","navToPush","concat","MsNavigationController","toggleHorizontalMobileMenu","msNavigationDirective","$rootScope","$mdSidenav","setFoldExpander","removeFoldCollapser","foldExpanderEl","onFoldExpanderHover","setFoldCollapser","foldCollapserEl","onFoldCollapserHover","sidenav","MsNavigationNodeController","hasChildren","collapsable","includes","params","$evalAsync","givenPathParts","activePathParts","toggleCollapsed","collapseEl","offsetHeight","animate","animateHeightClass","css","expandEl","visibility","getClass","isHidden","hidden","msNavigationNodeDirective","MsNavigationNodeCtrl","msNavigationItemDirective","msNavigationHorizontalDirective","MsNavigationHorizontalNodeController","isActive","msNavigationHorizontalNodeDirective","MsNavigationHorizontalNodeCtrl","msNavigationHorizontalItemDirective","$mdMedia","onClick","msNavFoldService","setFoldable","foldable","isNavFoldedOpen","toggleFold","openFolded","closeFolded","msNavIsFoldedDirective","isFoldedOpen","isFolded","fold","unfold","sidenavEl","openOverlay","closeOverlay","msNavIsFolded","MsNavController","isDisabled","setToggleItem","toggleItems","getLockedItems","lockedItems","setLockedItem","clearLockedItems","msNavDirective","$mdComponentRegistry","stateChangeSuccessEvent","when","msNavTitleDirective","msNavButtonDirective","msNavToggleDirective","MsNavCtrl","toggle","isCollapsed","isExpanded","reject","elementToExpand","classes","expandAnimation","expanded","elementToCollapse","collapseAnimation","links","states","regExp","locked","lockedItem","currentState","shouldExpand","msMaterialColorPickerController","$mdColorPalette","$mdMenu","fuseGenerator","activateHueSelection","palette","hues","selectedPalette","selectedHues","selectColor","hue","updateSelectedColor","updateModel","removeColor","selectedColor","class","setSelectedColor","modelCtrl","$viewValue","msModelType","color","bgColorValue","rgba","palettes","fgColorValue","contrast","$selectedColor","msMaterialColorPicker","controllers","replaceWith","msMasonryController","defaultOpts","watchContainerResize","waitImagesLoaded","imagesLoaded","imgLoad","container","oldValue","reLayout","containerPos","getBoundingClientRect","updateColumnOptions","referenceArr","apply","columnCount","xPos","yPos","column","refTop","columnWidth","respectItemOrder","transform","reLayoutTimeout","reLayoutDebounce","md","sm","xs","msMasonry","msMasonryItem","newVal","oldVal","msInfoBarDirective","removeInfoBar","$destroy","MsFormWizardController","registerForm","forms","previousStep","selectedIndex","nextStep","firstStep","lastStep","totalSteps","currentStepInvalid","$invalid","previousStepInvalid","formsIncomplete","msFormWizardDirective","msFormWizardFormDirective","formCtrl","MsFormWizardCtrl","msCardDirective","card","cardTemplateLoaded","msDatepickerFixConfigProvider","defaultConfig","formatter","utcOffset","msDatepickerFix","msDatepickerFixConfig","$formatters","$parsers","MessagesFactory","$mdToast","showMessage","hideDelay","showConfirm","successFunction","cancelfunction","htmlContent","ok","initialValue","acceptText","cancelText","placeholder","errorMessage","infoMessage","successMessage","HelpersFactory","_calculateAge","birth_day","birth_month","birth_year","today_date","today_year","getFullYear","today_month","getMonth","today_day","_groupBy","rv","filesFactory","inputFileId","uploadType","uploadData","tempLoginDialogController","_setReportData","set","_getReportData","$http","authServiceFactory","serviceBase","_authentication","isAuth","_login","loginData","_logOut","Content-Type","access_token","err","_fillAuthData","_addBranch","_addUser","_addAccess","_setAppData","_getAppData","_updateUserData","logOut","fillAuthData","authentication","addBranch","addUser","addAccess","setAppData","LoginController","sesion","request","getByUsername","errorCode","selectBranch","returnValue","licenseController","addLicense","showAdminLogin","_loginCallback","homeController","toDateFilter","input","sumFilter","sum","parseFloat","prototype","fuseThemingService","$mdTheming","getRegisteredPalettes","PALETTES","getRegisteredThemes","THEMES","setActiveTheme","themeName","themes","theme","setThemesList","themeList","$mdThemingProvider","fusePalettes","fuseThemes","invoke","_$cookies","customTheme","getObject","alwaysWatchTheme","definePalette","primaryPalette","primary","accentPalette","accent","warnPalette","backgroundPalette","background","default","hue-1","hue-2","hue-3","constant","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastStrongLightColors","fuseGeneratorService","fuseTheming","registeredThemes","registeredPalettes","registeredTheme","colors","colorType","colorTypeName","contrast1","contrast2","contrast3","contrast4","hue1","hue2","hue3","processAndStoreThemes","styleVars","colorTypes","colorLevelName","colorName","ucfirst","_themes","selectedTheme","cssTemplate","matched","headEl","styleEl","_contrastLevel","contrastLevel","applyContrast","contrastLevels","white","1","2","3","4","black","string","charAt","exists","detectBrowser","searchString","dataString","dataProp","versionSearchString","versionSearch","identity","subString","searchVersion","browserInfo","browserData","vendor","opera","osData","platform","browser","version","appVersion","os","guidGenerator","S4","mobileDetect","mobile","toggleInArray","array","MobileDetect","setBaseUrl","getBaseUrl","getApiObject","register","resource","paramDefaults","$resource","actionParts","method","apiObject","resourceObject","apiResolverService","resourceParts","filterByTags","tags","filtered","every","tag","tagExists","itemTag","filterSingleByTags","itemTags","filterByPropIds","parameter","ids","filterByIds","toTrustedFilter","htmlToPlainTextFilter","String","nospaceFilter","humanizeDocFilter","doc","$1","altDate","diff","fromNow","hljsDirective","$interpolate","contents","codeElement","lines","line","firstLineWhitespace","startingWhitespaceRegex","highlightedCode","hljs","highlight","language","lang","shouldInterpolate","contentParent","fuseConfigProvider","fuseConfiguration","disableCustomScrollbars","disableMdInkRippleOnMobile","disableCustomScrollbarsOnMobile","configName","setConfig","configValue","ToolbarController","$translate","userStatus","userStatusOptions","selectedLanguage","languages","preferredLanguage","toggleSidenav","sidenavId","setUserStatus","logout","changeLanguage","use","toggleMsNavigationFolded","searchResultClick","toggleLock","loginCallback","userAccess","allAccess","validatedControls","isControl","controlName","controls","global","en","translation","flag","es","tr","QuickPanelController","notify","cloud","retro","NavigationController","msScrollOptions","MainController","targetScope","$id","runBlock","htmlClass","$ariaProvider","$logProvider","debugEnabled","tabindex","stateChangeStartEvent","loadingProgress","routeConfig","$urlRouterProvider","$locationProvider","html5Mode","otherwise","layoutStyle","layouts","verticalNavigation","main","toolbar","verticalNavigationFullwidthToolbar","verticalNavigationFullwidthToolbar2","horizontalNavigation","contentOnly","contentWithToolbar","toolbar@app","navigation@app","quickPanel@app","IndexController","lengthChange","zeroRecords","infoEmpty","infoFiltered","paginate","first","$translateProvider","$httpProvider","$mdDateLocaleProvider","ivhTreeviewOptionsProvider","useSanitizeValueStrategy","interceptors","treeViewConfig","defaultSelectedState","validate","expandToDepth","twistieCollapsedTpl","twistieExpandedTpl","twistieLeafTpl","mdDateConfig","formatDate","locale","parseDate","dateString","isValid","NaN","maskConfig","uiMaskConfigProvider","clearOnBlur","addDefaultPlaceholder","interceptorsFactory","$location","navigationPath","JSON","stringify","responseError","modelState","error_description","exceptionType","showError","getByCode","satCodeTypes","satCodes","delete","getById","roles","invoicesOrders","getReceipt","units","Turns","accionistasTransferConfig"],"mappings":"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","file":"scripts/app-281bcba492.js","sourcesContent":["(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.partners', \r\n [\r\n 'datatables',\r\n // Partners\r\n 'app.partners.partners', \r\n 'app.partners.prospects',\r\n \r\n // 'signature',\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.partners', {\r\n abstract: true,\r\n url : '/partners'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps', {\r\n title : '',\r\n group : true,\r\n weight: 1\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.partners', {\r\n title : 'Socios',\r\n icon : 'icon-account-multiple',\r\n weight: 3\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerRentableShowDialogController', PartnersPartnerRentableShowDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerRentableShowDialogController($mdDialog, Rentable)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init(){\r\n if (!Rentable){\r\n vm.rentable = {\r\n id: 0,\r\n dateFrom: new Date()\r\n };\r\n }else{\r\n vm.rentable = Rentable;\r\n }\r\n vm.zoneId = Rentable.rentable.rentableZone.id;\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerRentableDialogController', PartnersPartnerRentableDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerRentableDialogController(api, $mdDialog, msg,Rentable, FamilyId, RefreshTable, $scope)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init(){\r\n api.partners.partners.getByFamily({ id: 0, familyId: FamilyId }, function(response){\r\n vm.family = response;\r\n });\r\n\r\n vm.periodicities = api.catalogs.periodicities.query();\r\n vm.applyDiscount = false;\r\n\r\n api.catalogs.calculationModes.query(function(response){\r\n vm.calculationModes = response.filter(function(m){ return m.id != 2 });\r\n });\r\n\r\n\r\n if (!Rentable){\r\n vm.rentable = {\r\n id: 0,\r\n dateFrom: new Date()\r\n };\r\n }else{\r\n vm.rentable = Rentable;\r\n }\r\n }\r\n\r\n function save(){\r\n if (!vm.rentable.rentableId || vm.rentable.rentableId == 0){\r\n msg.error(\"Seleccione rentable\");\r\n return;\r\n }\r\n \r\n api.partners.rentables.save(vm.rentable, function(response){\r\n msg.success(\"Rentable seleccionado correctamente\");\r\n RefreshTable();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerLevelDialogController', PartnersPartnerLevelDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerLevelDialogController(api, $mdDialog, msg, Level, FamilyId, RefreshTable)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init(){\r\n api.partners.partners.getByFamily({ id: 0, familyId: FamilyId }, function(response){\r\n vm.partners = response;\r\n });\r\n\r\n api.catalogs.employees.query(function(response){\r\n vm.employees = response.filter(function(e){ return e.employeeTypeId == 2 });\r\n });\r\n\r\n vm.levels = api.catalogs.levels.query(); \r\n vm.levelScores = api.catalogs.levelScores.query(); \r\n vm.activities = api.catalogs.activities.query(); \r\n\r\n // Evaluation Years\r\n var today = new moment();\r\n vm.years = [];\r\n vm.years.push({ year: today.year() - 1 });\r\n vm.years.push({ year: today.year() });\r\n\r\n for(var i= 1; i <= 3; i++){\r\n vm.years.push({ year: today.year() + i }); \r\n }\r\n\r\n // Evaluation numbers\r\n vm.evaluations = api.catalogs.evaluations.query();\r\n\r\n if (Level){\r\n vm.title = \"EDITAR NIVEL DE AVANCE \";\r\n vm.level = angular.copy(Level);\r\n }else{\r\n vm.title = \"AGREGAR NIVEL DE AVANCE\";\r\n vm.level = {\r\n id : 0, \r\n };\r\n }\r\n }\r\n\r\n function save(){\r\n api.partners.levels.save(vm.level, function(response){\r\n msg.success(\"Nivel de avance guardado correctamente.\");\r\n RefreshTable();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerFamilyDialogController', PartnersPartnerFamilyDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerFamilyDialogController(api, $mdDialog, msg, Familiar, RefreshTable, Partner, utils, Catalogs, isLocked, $document, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.birthdateChange = birthdateChange;\r\n vm.dueChange = dueChange;\r\n vm.showAutomaticPayment = showAutomaticPayment;\r\n ////\r\n\r\n function _init(){\r\n vm.catalogs = Catalogs;\r\n vm.partner = Partner;\r\n vm.minBirthdate = moment(vm.today).subtract(100, 'years').toDate();\r\n vm.maxBirthdate = moment(vm.today).toDate();\r\n vm.duePrices = [];\r\n vm.isLocked = isLocked;\r\n \r\n if (Familiar){\r\n vm.title = \"EDITAR FAMILIAR\";\r\n api.partners.family.get({\r\n partnerId : Familiar.parentPartnerId,\r\n id : Familiar.id\r\n }, function(response){\r\n vm.familiar = response;\r\n \r\n // Set agreements\r\n var agreements = angular.copy(vm.familiar.agreements);\r\n vm.familiar.agreements = [];\r\n angular.forEach(agreements, function(x) {\r\n vm.familiar.agreements.push(vm.catalogs.agreements.filter(function(a){ return a.id == x.id })[0]); \r\n });\r\n \r\n // Set branches \r\n var branches = angular.copy(vm.familiar.branches);\r\n vm.familiar.branches = [];\r\n angular.forEach(branches, function(ca) {\r\n vm.familiar.branches.push(vm.catalogs.branches.filter(function(branch){ return branch.id == ca.id })[0]); \r\n });\r\n\r\n vm.birthdate = vm.familiar.birthdate;\r\n birthdateChange();\r\n dueChange();\r\n vm.inscriptionDate = moment(vm.familiar.inscriptionDate).toDate();\r\n vm.initPayDate = moment(vm.familiar.initPayDate).toDate(); \r\n });\r\n }else{\r\n vm.title = \"AGREGAR FAMILIAR\";\r\n vm.familiar = {\r\n id : 0,\r\n parentPartnerId: Partner.id,\r\n familyId : Partner.familyId,\r\n isFamily : true,\r\n active : true,\r\n birthdate : new Date(),\r\n dues : [],\r\n agreements : [],\r\n initPayDate : new Date(),\r\n inscriptionDate: new Date()\r\n };\r\n vm.birthdate = vm.familiar.birthdate;\r\n birthdateChange();\r\n vm.inscriptionDate = moment(vm.familiar.inscriptionDate).toDate();\r\n \r\n }\r\n\r\n }\r\n\r\n function save(){\r\n api.partners.family.save(vm.familiar, function(response){\r\n msg.success(\"Familiar guardada correctamente.\");\r\n if ($state.current.name == \"app.partners.partners.detail\")\r\n $state.reload();\r\n else\r\n $state.go(\"app.partners.partners.detail\", { id: vm.partner.id });\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function birthdateChange(){\r\n if (moment(vm.birthdate) > moment()){\r\n msg.error(\"Fecha invalida!\");\r\n return;\r\n }\r\n\r\n vm.familiar.birthdate = vm.birthdate;\r\n\r\n var birthdate = moment(vm.birthdate); \r\n vm.familiar.age = utils.calculateAge(birthdate.date(), birthdate.month(), birthdate.year()) \r\n vm.birthdate = moment(vm.familiar.birthdate).toDate();\r\n }\r\n\r\n function dueChange(){\r\n api.catalogs.duePrices.get({ \r\n dueId : vm.familiar.dueId,\r\n searchType : 3,\r\n searchId : vm.partner.duePeriodicityId\r\n }, function(response){\r\n if (response.length == 0){\r\n msg.error(\"No hay precios vigentes configurados para esa cuota\");\r\n vm.duePrices = [];\r\n }else{\r\n vm.familiar.duePeriodicityId = response[0].periodicity.id;\r\n vm.duePeriodicityText = response[0].periodicity.name + \" ($ \" + response[0].price.toFixed(2) + \" )\" ;\r\n }\r\n });\r\n }\r\n\r\n function showAutomaticPayment(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerAutomaticPaymentController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-automaticPayment/dialog-automaticPayment.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Partner : vm.familiar\r\n }\r\n });\r\n } \r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.partners\")\r\n .controller(\r\n \"PartnersPartnerAddressDialogController\",\r\n PartnersPartnerAddressDialogController\r\n );\r\n\r\n /** @ngInject */\r\n function PartnersPartnerAddressDialogController(\r\n api,\r\n $mdDialog,\r\n msg,\r\n Address,\r\n RefreshTable,\r\n PartnerID\r\n ) {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init() {\r\n vm.addressTypes = api.catalogs.addressTypes.query();\r\n vm.satRegimenFiscales = api.sat.regimenFiscales.query();\r\n\r\n vm.title = \"EDITAR DIRECCIÓN\";\r\n vm.address = angular.copy(Address);\r\n\r\n if (!vm.address) {\r\n vm.title = \"AGREGAR DIRECCIÓN\";\r\n vm.address = {\r\n id: 0,\r\n partnerId: PartnerID,\r\n addressTypeId: 0,\r\n isDefault: true,\r\n active: true,\r\n };\r\n }\r\n }\r\n\r\n function save() {\r\n api.partners.addresses.save(vm.address, function (response) {\r\n msg.success(\"Dirección guardada correctamente.\");\r\n RefreshTable();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel() {\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerBecasDialogController', PartnersPartnerBecasDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerBecasDialogController(api, $mdDialog, msg, Beca, FamilyId, RefreshTable)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init(){\r\n api.partners.partners.getByFamily({ id: 0, familyId: FamilyId }, function(response){\r\n vm.partners = response;\r\n });\r\n\r\n vm.becas = api.catalogs.becas.query();\r\n\r\n if (Beca){\r\n vm.title = \"EDITAR BECA\";\r\n vm.beca = angular.copy(Beca);\r\n }else{\r\n vm.title = \"AGREGAR BECA\";\r\n vm.beca = {\r\n id : 0,\r\n dateFrom : new Date(),\r\n dateTo : new Date(),\r\n discountPercentage : 0\r\n };\r\n }\r\n }\r\n\r\n function save(){\r\n api.partners.becas.save(vm.beca, function(response){\r\n msg.success(\"Beca guardada correctamente.\");\r\n RefreshTable();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerActivityDialogController', PartnersPartnerActivityDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerActivityDialogController(api, $mdDialog, msg, PartnerActivity, FamilyId, Callback)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.activityChange = activityChange;\r\n vm.scheduleChange = scheduleChange;\r\n vm.zoneChange = zoneChange;\r\n ////\r\n\r\n function _init(){\r\n api.partners.partners.getByFamily({ id: 0, familyId: FamilyId }, function(response){\r\n vm.partners = response;\r\n });\r\n\r\n api.catalogs.activities.query(function(response){\r\n vm.activities = response;\r\n \r\n if (PartnerActivity){\r\n vm.title = \"EDITAR ACTIVIDAD\";\r\n vm.partnerActivity = angular.copy(PartnerActivity);\r\n vm.activity = vm.activities.filter(function(a){ return a.id == vm.partnerActivity.activityScheduleZone.activitySchedule.activityId })[0];\r\n activityChange(function(){\r\n vm.schedule = vm.schedules.filter(function(s){ return s.id == vm.partnerActivity.activityScheduleZone.activitySchedule.id })[0];\r\n scheduleChange(function(){\r\n zoneChange(); \r\n });\r\n });\r\n \r\n }else{ \r\n vm.title = \"AGREGAR ACTIVIDAD\";\r\n vm.partnerActivity = {\r\n id : 0,\r\n activityScheduleId: null \r\n };\r\n }\r\n });\r\n }\r\n\r\n function save(){\r\n api.partners.activities.save(vm.partnerActivity, function(response){\r\n msg.success(\"Actividad guardada correctamente.\");\r\n Callback();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function activityChange(success){\r\n api.catalogs.activitiesSchedules.query({ activityId: vm.activity.id }, function(response){\r\n vm.schedules = response;\r\n if (success)\r\n success();\r\n });\r\n }\r\n\r\n function scheduleChange(success){\r\n // Get activity zones from schedule (vm.schedule)\r\n api.catalogs.activitiesSchedulesZones.get({ scheduleId: vm.schedule.id }, function(response){\r\n vm.activityZones = response;\r\n if (success)\r\n success();\r\n });\r\n }\r\n\r\n function zoneChange(){\r\n vm.validatingQuota = true;\r\n // Verify disponibility quota in zone\r\n api.partners.activities.verify({ \r\n id: vm.partnerActivity.id,\r\n activityScheduleZoneId: vm.partnerActivity.activityScheduleZoneId \r\n }, function(response){\r\n vm.validatingQuota = false;\r\n vm.quotaOk = true;\r\n }, function(errorResponse){\r\n vm.validatingQuota = false;\r\n vm.quotaOk = false;\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerAbsencesDialogController', PartnersPartnerFamilyDialogController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerFamilyDialogController(api, $mdDialog, msg, Absence, FamilyId, RefreshTable)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init(){\r\n api.partners.partners.getByFamily({ id: 0, familyId: FamilyId }, function(response){\r\n vm.partners = response;\r\n });\r\n\r\n if (Absence){\r\n vm.title = \"EDITAR AUSENCIA\";\r\n vm.absence = angular.copy(Absence);\r\n }else{\r\n vm.title = \"AGREGAR AUSENCIA\";\r\n vm.absence = {\r\n id : 0,\r\n dateFrom : new Date(),\r\n dateTo : new Date(),\r\n discountPercentage : 0\r\n };\r\n }\r\n }\r\n\r\n function save(){\r\n vm.absence.dateFrom = new Date(moment(vm.absence.dateFrom).format(\"MM/DD/YYYY\"));;\r\n vm.absence.dateTo = new Date(moment(vm.absence.dateTo).format(\"MM/DD/YYYY\"));;\r\n api.partners.absences.save(vm.absence, function(response){\r\n msg.success(\"Ausencia guardada correctamente.\");\r\n RefreshTable();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.partners.partners', [ \r\n ])\r\n .config(config);\r\n\r\n\r\n function getContractState(name){\r\n var result = {\r\n url : '/' + name,\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/contract/contract-' + name + '.html',\r\n controller : 'PartnersPartnerContractController as vm'\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n }; \r\n return result;\r\n }\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n { \r\n\r\n // State\r\n $stateProvider\r\n .state('app.partners.info', {\r\n url : '/partners/info',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/info/info.html',\r\n controller : 'PartnersPartnersInfoController as vm'\r\n }\r\n }\r\n })\r\n .state('app.partners.info.pass-print', {\r\n url : '/pass-print/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/info/printable-pass/printable-pass.html',\r\n controller : 'PartnersPartnersInfoPassPrintController as vm'\r\n }\r\n },\r\n resolve : {\r\n Item: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('partners.passes@getById', { id : $stateParams.id });\r\n }\r\n },\r\n bodyClass: 'pass printable'\r\n })\r\n .state('app.partners.info.credential', {\r\n url : '/credential/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/info/credential/credential.html',\r\n controller : 'PartnersPartnerCredentialController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partner: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('partners.partners@get', { id: $stateParams.id });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n })\r\n .state('app.partners.partners', {\r\n url : '/partners',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partners/partners.html',\r\n controller : 'PartnersPartnersController as vm'\r\n }\r\n }\r\n })\r\n .state('app.partners.partners.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/partner.html',\r\n controller : 'PartnersPartnerController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partner: function ()\r\n {\r\n return { \r\n id : 0,\r\n name : '', \r\n active : true, \r\n isRecurrent : true, \r\n calculationModeId : 1 /*Proporcional por día*/,\r\n initPayDate : new Date(),\r\n payedDate : new Date(), \r\n inscriptionDate : new Date(), \r\n };\r\n },\r\n PartnerTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.partnerTypes@query');\r\n },\r\n Dues: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.dues@query');\r\n },\r\n Media: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.media@query');\r\n },\r\n Countries: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.countries@query');\r\n },\r\n Agreements: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.agreements@query');\r\n },\r\n Professions: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.professions@query');\r\n },\r\n Genders: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.genders@query');\r\n },\r\n ClubAccess: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.clubAccess@query');\r\n },\r\n Employees: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@query');\r\n },\r\n CalculationModes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.calculationModes@query');\r\n },\r\n AccessTimeZones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accessTimeZones@query');\r\n },\r\n Branches: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.branches@query');\r\n },\r\n Acciones: function(apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.acciones@query');\r\n },\r\n },\r\n })\r\n .state('app.partners.partners.add.prospect', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/partner.html',\r\n controller : 'PartnersPartnerController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partner: function ($stateParams, apiResolver)\r\n {\r\n return { \r\n id: 0,\r\n prospectId : $stateParams.id,\r\n active: true, \r\n inscriptionDate : new Date(), \r\n isRecurrent: true, \r\n calculationModeId: 1 /*Proporcional por día*/,\r\n initPayDate: new Date(),\r\n payedDate: new Date(),\r\n partnerTypeId: 1\r\n };\r\n },\r\n PartnerTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.partnerTypes@query');\r\n },\r\n Dues: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.dues@query');\r\n },\r\n Media: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.media@query');\r\n },\r\n Countries: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.countries@query');\r\n },\r\n Agreements: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.agreements@query');\r\n },\r\n Professions: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.professions@query');\r\n },\r\n Genders: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.genders@query');\r\n },\r\n ClubAccess: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.clubAccess@query');\r\n },\r\n Employees: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@query');\r\n },\r\n CalculationModes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.calculationModes@query');\r\n },\r\n AccessTimeZones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accessTimeZones@query');\r\n },\r\n Branches: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.branches@query');\r\n },\r\n Acciones: function(apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.acciones@query');\r\n },\r\n },\r\n })\r\n .state('app.partners.partners.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/partner.html',\r\n controller : 'PartnersPartnerController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partner: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('partners.partners@get', { id: $stateParams.id });\r\n },\r\n // PartnerKardex: function ($stateParams, apiResolver)\r\n // {\r\n // return apiResolver.resolve('partners.partners@getByKardex', { id: $stateParams.id, dummy1: 0, dummy2: 0, dummy3: 0 });\r\n // },\r\n PartnerTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.partnerTypes@query');\r\n },\r\n Dues: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.dues@query');\r\n },\r\n Media: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.media@query');\r\n },\r\n Countries: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.countries@query');\r\n },\r\n Agreements: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.agreements@query');\r\n },\r\n Professions: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.professions@query');\r\n },\r\n Genders: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.genders@query');\r\n },\r\n ClubAccess: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.clubAccess@query');\r\n },\r\n Employees: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@query');\r\n },\r\n CalculationModes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.calculationModes@query');\r\n },\r\n AccessTimeZones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accessTimeZones@query');\r\n },\r\n Branches: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.branches@query');\r\n },\r\n Acciones: function(apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.acciones@query');\r\n },\r\n },\r\n })\r\n .state('app.partners.partners.kardex', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/kardex/kardex.html',\r\n controller : 'PartnersPartnerKardexController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partner: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('partners.partners@get', { id: $stateParams.id });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n })\r\n .state('app.partners.partners.contract', {\r\n url : '/contract/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/partners/partner/contract/contract-default.html',\r\n controller : 'PartnersPartnerContractController as vm'\r\n }\r\n },\r\n resolve : {\r\n Contract: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('partners.contracts@getContract', { id: $stateParams.id, isLastData: false });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n }) \r\n .state('app.partners.partners.contract.altea', getContractState('altea'))\r\n .state('app.partners.partners.contract.operactive', getContractState('operactive'))\r\n .state('app.partners.partners.contract.urban', getContractState('urban'))\r\n .state('app.partners.partners.contract.omada', getContractState('omada'))\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.partners.info', {\r\n title: 'Info Socios',\r\n shortcuticon : 'icon-account-alert', \r\n state: 'app.partners.info'\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.partners.partners', {\r\n title: 'Socios Datos',\r\n shortcuticon : 'icon-account-multiple', \r\n state: 'app.partners.partners'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersChangePayedDatesController', PartnersChangePayedDatesController);\r\n\r\n /** @ngInject */\r\n function PartnersChangePayedDatesController(api, $mdDialog, msg, Titular, Callback)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.close = close;\r\n vm.selectPartner = selectPartner;\r\n vm.saveDues = saveDues;\r\n vm.selectRentable = selectRentable;\r\n vm.saveRentables = saveRentables\r\n ////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n vm.titular = Titular;\r\n\r\n api.partners.partners.getByFamily({ id: 0, familyId: vm.titular.familyId }, function(response){\r\n vm.partners = response;\r\n });\r\n\r\n api.partners.rentables.query({ familyId: vm.titular.familyId }, function(response){\r\n vm.rentables = response;\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n \r\n function selectPartner(item){\r\n vm.partner = item;\r\n vm.newPayedDate = moment(vm.partner.payedDate).toDate()\r\n }\r\n \r\n function saveDues(){\r\n if (confirm(\"Una vez cambiadas las fechas no se pueden cancelar los cambios\")){\r\n if (vm.applyAllPartners == true){\r\n if (confirm(\"Esta seguro que quiere aplicar los cambios a toda la familia?\")){\r\n _save(1);\r\n }\r\n }else{\r\n _save(1);\r\n }\r\n }\r\n }\r\n\r\n function selectRentable(item){\r\n vm.rentable = item;\r\n vm.newPayedDateRentable = moment(vm.rentable.payedDate).toDate();\r\n }\r\n \r\n function saveRentables(){\r\n if (confirm(\"Una vez cambiadas las fechas no se pueden cancelar los cambios\")){\r\n if (vm.applyAllPartners == true){\r\n if (confirm(\"Esta seguro que quiere aplicar los cambios a todos los rentables?\")){\r\n _save(2);\r\n }\r\n }else{\r\n _save(2);\r\n }\r\n }\r\n }\r\n\r\n function _save(type){\r\n var changeObject = {\r\n type : type \r\n }\r\n\r\n if (type == 1){ \r\n /* Partner */\r\n changeObject.newDate = vm.newPayedDate;\r\n changeObject.applyAll = vm.applyAllPartners;\r\n if (vm.applyAllPartners) \r\n changeObject.id = vm.titular.familyId;\r\n else\r\n changeObject.id = vm.partner.id;\r\n }else{ \r\n /* Rentable */\r\n changeObject.newDate = vm.newPayedDateRentable;\r\n changeObject.applyAll = vm.applyAllRentables;\r\n if (vm.applyAllRentables)\r\n changeObject.id = vm.titular.familyId; \r\n else\r\n changeObject.id = vm.rentable.id;\r\n }\r\n\r\n api.partners.changeDates.save(changeObject, function(){\r\n msg.success(\"Cambio(s) de fecha(s) realizados correctamente.\");\r\n _init();\r\n vm.callback();\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerPicturesController', partnersPartnerPictureController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerPictureController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg, localStorageService)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.save = save;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item); \r\n\r\n vm.family = api.partners.partners.getByFamily({ id: 0, familyId: vm.partner.familyId });\r\n\r\n vm.partner = null;\r\n vm.saving = false;\r\n }\r\n\r\n function save(){\r\n var files = $(\"#inputFile\").get(0).files;\r\n\r\n // Validate data\r\n if (files.length == 0) {\r\n msg.error(\"Seleccione archivo a subir!.\");\r\n return;\r\n }\r\n\r\n var file = files[0];\r\n var data = new FormData();\r\n data.append(\"file\", file);\r\n data.append(\"partnerId\", vm.partner.id);\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n $.ajax({\r\n type: \"POST\",\r\n url: api.baseUrl + \"PartnerPictures\",\r\n contentType: false,\r\n processData: false,\r\n data: data,\r\n headers: { \r\n \"Authorization\": 'Bearer ' + authData.token\r\n },\r\n success: function (response) {\r\n msg.success(\"Fotografia cambiada correctamente.\");\r\n if ($state.current.name == \"app.partners.partners.detail\")\r\n $state.reload();\r\n else\r\n $state.go(\"app.partners.partners.detail\", { id: vm.partner.id });\r\n },\r\n error: function (errorResponse) {\r\n if (errorResponse.status == 500){\r\n msg.error(errorResponse.responseJSON.exceptionMessage);\r\n }else \r\n msg.error(\"Error al subir archivo, comunicate con el administrador!!!!\"); \r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerRentablesController', PartnersPartnerRentablesController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerRentablesController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n vm.show = show;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item);\r\n _refresh(); \r\n }\r\n\r\n function _refresh(){\r\n api.partners.rentables.query({ familyId: vm.partner.familyId }, function(response){\r\n vm.rentables = response;\r\n });\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerRentableDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-rentables/dialogs/dialog-rentable/dialog-rentable.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Rentable : item,\r\n RefreshTable : _refresh,\r\n FamilyId : vm.partner.familyId\r\n }\r\n });\r\n }\r\n\r\n function show(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerRentableShowDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-rentables/dialogs/dialog-showRentable/dialog-showRentable.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Rentable : item,\r\n }\r\n });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este rentable?\", function(){\r\n api.partners.rentables.delete({ id: item.id }, function(response){\r\n msg.success(\"Rentable borrado correctamente.\");\r\n _refresh();\r\n });\r\n });\r\n }\r\n\r\n \r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.partners\")\r\n .controller(\r\n \"PartnersPartnerPaymentsController\",\r\n partnersPartnerPaymentsController\r\n );\r\n\r\n /** @ngInject */\r\n function partnersPartnerPaymentsController(\r\n $state,\r\n api,\r\n $scope,\r\n CONST_DATATABLES,\r\n $mdDialog,\r\n $document,\r\n msg,\r\n localStorageService\r\n ) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\", \"\");\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item);\r\n\r\n var data = new FormData();\r\n // vm.family = api.invoices.invoicesOrders.get({ });\r\n var authData = localStorageService.get(\"authorizationData\");\r\n $.ajax({\r\n type: \"GET\",\r\n url: api.baseUrl + \"InvoicesOrders/\" + vm.partner.id,\r\n contentType: false,\r\n processData: false,\r\n data: data,\r\n headers: {\r\n Authorization: \"Bearer \" + authData.token,\r\n BranchId: vm.partner.branchId,\r\n },\r\n success: function (response) {\r\n // vm.group = response;\r\n\r\n vm.summary = [];\r\n vm.group = response.groupBy(\"partnerName\");\r\n angular.forEach(vm.group, function (g) {\r\n g.totalFolios = 0;\r\n g.orderTypeGroups = g.items.groupBy(\"orderType\");\r\n angular.forEach(g.orderTypeGroups, function (orderTypeIn) {\r\n var total = 0;\r\n var totalFolios = 0;\r\n orderTypeIn.InvoiceGroup = orderTypeIn.items.groupBy(\"folio\");\r\n angular.forEach(orderTypeIn.InvoiceGroup, function (folio) {\r\n var isCanceled = false;\r\n angular.forEach(folio.items, function (item) {\r\n isCanceled = item.isCanceled;\r\n if (!isCanceled) {\r\n total = total + item.total;\r\n }\r\n });\r\n if (!isCanceled) {\r\n totalFolios++;\r\n }\r\n });\r\n orderTypeIn.InvoiceGroup.totalFolios = totalFolios;\r\n vm.summary.push({\r\n orderType: orderTypeIn.key,\r\n count: totalFolios,\r\n total: total,\r\n });\r\n g.totalFolios += totalFolios;\r\n });\r\n });\r\n\r\n // Summary\r\n // vm.summary = [];\r\n // angular.forEach(vm.group, function (group) {\r\n // angular.forEach(group.orderTypeGroups, function (g) {\r\n // vm.summary.push({\r\n // orderType: g.key,\r\n // count: g.items.length,\r\n // total: (g && g.items && g.items.length) ? g.InvoiceGroup.map(function (x) { return x.isCanceled ? 0 : x.total; }).reduce(function (x, y) { return x + y }) : 0\r\n // });\r\n // });\r\n // });\r\n\r\n // Totals Summary\r\n vm.summary.push({\r\n orderType: \"Totales\",\r\n count:\r\n vm.summary.length > 0\r\n ? vm.summary\r\n .map(function (s) {\r\n return s.count;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n total:\r\n vm.summary.length > 0\r\n ? vm.summary\r\n .map(function (s) {\r\n return s.total;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n });\r\n },\r\n error: function (errorResponse) {\r\n if (errorResponse.status == 500) {\r\n msg.error(errorResponse.responseJSON.exceptionMessage);\r\n } else\r\n msg.error(\r\n \"Error al subir archivo, comunicate con el administrador!!!!\"\r\n );\r\n },\r\n });\r\n\r\n vm.partner = null;\r\n vm.saving = false;\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerOtherChargesController', partnersPartnerOtherChargesController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerOtherChargesController($state, api, $scope, CONST_DATATABLES, $mdDialog, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.partnerChange = partnerChange;\r\n \r\n vm.addPlanned = addPlanned;\r\n vm.plannedAccept = plannedAccept;\r\n vm.plannedRemove = plannedRemove;\r\n \r\n vm.addPeriodicity = addPeriodicity;\r\n vm.periodicalDueChange = periodicalDueChange;\r\n vm.periodicalAccept = periodicalAccept;\r\n vm.periodicalRemove = periodicalRemove;\r\n vm.periodicalEdit = periodicalEdit;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item); \r\n \r\n api.partners.partners.getByFamily({ id: 0, familyId: vm.partner.familyId }, function(response){\r\n vm.family = response;\r\n vm.partner = response.filter(function(p){ return p.id == vm.partner.id })[0];\r\n\r\n partnerChange();\r\n });\r\n\r\n // Get periodicities\r\n vm.periodicities = api.catalogs.periodicities.query();\r\n\r\n // Get dues\r\n _getDues();\r\n\r\n // Get inventory\r\n api.inventory.products.query(function(response){\r\n vm.inventory = response.filter(function(i){ return i.quantity > 0 || !i.product.isStockRequired });\r\n });\r\n\r\n vm.duePrices = [];\r\n }\r\n\r\n function partnerChange(){\r\n if (vm.plannedNew)\r\n vm.plannedNew.partnerId = vm.partner.id;\r\n\r\n if (vm.periodicalProductNew)\r\n vm.periodicalProductNew.partnerId = vm.partner.id;\r\n \r\n _getPeriodicalProducts();\r\n _getPlannedProducts();\r\n _getDues();\r\n }\r\n\r\n function _getDues(){\r\n api.catalogs.dues.query(function(response){\r\n vm.dues = response.filter(function(d){ \r\n return d.isFamiliar == vm.partner.isFamily || d.isTitular == !vm.partner.isFamily\r\n // // Age range validation\r\n // && (d.minAge != 0 && d.minAge <= vm.partner.age)\r\n // && (d.maxAge != 0 && vm.partner.age <= d.minAge)\r\n // // Partner Type validation\r\n // && (d.partnerType == vm.partner.partnerType)\r\n ; \r\n }) \r\n });\r\n }\r\n\r\n function _getPlannedProducts(){\r\n api.invoices.plannedProducts.get({ id: vm.partner.id }, function(response){\r\n vm.plannedProducts = response;\r\n });\r\n }\r\n\r\n function _getPeriodicalProducts(){\r\n api.partners.periodicalProducts.get({ id: vm.partner.id }, function(response){\r\n vm.periodicalProducts = response;\r\n });\r\n }\r\n\r\n function addPlanned(){\r\n vm.plannedNew = {\r\n id : 0,\r\n expirationDate : new Date(),\r\n partnerId : vm.partner.id,\r\n product : null,\r\n addType : 1,\r\n };\r\n }\r\n \r\n function addPeriodicity(){\r\n vm.periodicalProductNew = {\r\n id : 0,\r\n isDue : true,\r\n initPayDate : new Date(), \r\n partnerId : vm.partner.id,\r\n dueId : null,\r\n productId : null\r\n };\r\n } \r\n \r\n function periodicalDueChange(fromEdit){\r\n api.catalogs.duePrices.get({ \r\n dueId : vm.periodicalProductNew.dueId,\r\n searchType : 2,\r\n searchId : vm.periodicalProductNew.dueId\r\n }, function(response){\r\n if (response.length == 0){\r\n msg.error(\"No hay precios vigentes configurados para esa cuota\");\r\n vm.duePrices = [];\r\n }else{\r\n vm.duePrices = response;\r\n }\r\n\r\n if (fromEdit)\r\n return;\r\n \r\n vm.periodicalProductNew.periodicityId = null;\r\n });\r\n }\r\n\r\n function plannedAccept(){\r\n api.invoices.plannedProducts.save(vm.plannedNew, function(response){\r\n msg.success(\"Cargo planificado agregado correctamente.\");\r\n vm.plannedNew = null;\r\n _getPlannedProducts();\r\n });\r\n }\r\n\r\n function plannedRemove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este cargo?\", function(){\r\n if (item.groupId && item.groupId != 0){\r\n msg.confirm(\"Este registro pertenece a un lote, se borrara el lote completo, desea continuar?\", function(){\r\n _plannedRemove(item);\r\n });\r\n }else{\r\n _plannedRemove(item);\r\n }\r\n });\r\n }\r\n\r\n function _plannedRemove(item){\r\n api.invoices.plannedProducts.delete({ id: item.id }, function(response){\r\n msg.success(\"Cargo(s) borrado(s) correctamente.\");\r\n _getPlannedProducts();\r\n });\r\n }\r\n\r\n function periodicalAccept(){\r\n api.partners.periodicalProducts.save(vm.periodicalProductNew, function(response){\r\n msg.success(\"Cargo periodico guardado correctamente.\");\r\n vm.periodicalProductNew = null;\r\n _getPeriodicalProducts();\r\n });\r\n }\r\n\r\n function periodicalRemove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este cargo?\", function(){\r\n api.partners.periodicalProducts.delete({ id: item.id }, function(response){\r\n msg.success(\"Cargo periodica borrado correctamente.\");\r\n _getPeriodicalProducts();\r\n });\r\n }); \r\n }\r\n\r\n function periodicalEdit(item){\r\n vm.periodicalProductNew = angular.copy(item);\r\n if (!item.isDue){\r\n vm.periodicalProductNew.inventory = vm.inventory.filter(function(i){ return i.product.id == item.productId })[0];\r\n }else{\r\n periodicalDueChange(true);\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerLevelsController', PartnersPartnerLevelsController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerLevelsController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item); \r\n _refresh(); \r\n }\r\n\r\n function _refresh(){\r\n api.partners.levels.query({ familyId: vm.partner.familyId }, function(response){\r\n vm.levels = response;\r\n });\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerLevelDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-levels/dialogs/dialog-level.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Level : item,\r\n RefreshTable : _refresh,\r\n FamilyId : vm.partner.familyId\r\n }\r\n });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este avance?\", function(){\r\n api.partners.levels.delete({ id: item.id }, function(response){\r\n msg.success(\"Nivel de avance borrado correctamente.\");\r\n _refresh();\r\n });\r\n });\r\n }\r\n\r\n \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerFamilyController', PartnersPartnerFamilyController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerFamilyController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n vm.showClubAccess = showClubAccess; \r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = vm.parentScope.item;\r\n _refresh(); \r\n \r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n api.catalogs.dues.get({id: vm.partner.dueId }, function(response){\r\n vm.partnerDue = response;\r\n });\r\n }\r\n\r\n function _refresh(){\r\n api.partners.family.query({ partnerId: vm.partner.id }, function(response){\r\n vm.family = response;\r\n if (vm.family.length > 0)\r\n vm.familiarSelected = vm.family[0];\r\n });\r\n }\r\n\r\n function detail(ev, item, Locked){\r\n if (!item && vm.family.length >= vm.partnerDue.familiarMaxNumber)\r\n {\r\n msg.error(\"No puede agregar mas familiares porque el tipo de cuota del titular no lo permite.\");\r\n return; \r\n }\r\n \r\n $mdDialog.show({\r\n controller : 'PartnersPartnerFamilyDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-family/dialogs/dialog-family.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Familiar : item,\r\n RefreshTable: _refresh,\r\n Partner : vm.partner,\r\n Catalogs : {\r\n dues : vm.parentScope.dues,\r\n countries : vm.parentScope.countries,\r\n agreements : vm.parentScope.agreements,\r\n professions : vm.parentScope.professions,\r\n genders : vm.parentScope.genders,\r\n clubAccess : vm.parentScope.clubAccess,\r\n calculationModes: vm.parentScope.calculationModes,\r\n partnerTypes : vm.parentScope.partnerTypes,\r\n accessTimeZones: vm.parentScope.accessTimeZones,\r\n branches: vm.parentScope.branches,\r\n },\r\n isLocked: Locked\r\n }\r\n });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este familiar?\", function(){\r\n api.partners.family.delete({ id: item.id }, function(response){\r\n msg.success(\"Familiar borrado correctamente.\");\r\n if ($state.current.name == \"app.partners.partners.detail\")\r\n $state.reload();\r\n else\r\n $state.go(\"app.partners.partners.detail\", { id: vm.partner.id });\r\n });\r\n });\r\n }\r\n\r\n function showClubAccess(ev, familiar){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerDialogAccessController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-clubAccess/dialog-clubAccess.html',\r\n targetEvent : ev,\r\n escapeToClose: false,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : familiar\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerInvoicesController', PartnersPartnerInvoicesController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerInvoicesController($state, api, $scope, CONST_DATATABLES, msg, $mdDialog)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.receipt = receipt;\r\n vm.coupon = coupon;\r\n vm.getData = getData; \r\n vm.select = select;\r\n vm.generateInvoice = generateInvoice;\r\n vm.showOrderDetail = showOrderDetail;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = vm.parentScope.item;\r\n var now = moment();\r\n var from = moment([now.year(), 0, 1]);\r\n var to = now.endOf('month');\r\n\r\n vm.from = from.format('MM/DD/YYYY');\r\n vm.to = to.format('MM/DD/YYYY');\r\n\r\n vm.selected = []; \r\n _getOrders(); \r\n _getInvoices();\r\n }\r\n\r\n function _getOrders(){\r\n api.invoices.orders.getByPartner({\r\n from: moment(vm.from).format('DD-MM-YYYY'),\r\n to: moment(vm.to).format('DD-MM-YYYY') ,\r\n partnerId: vm.partner.id\r\n }, function(response){\r\n vm.orders = response;\r\n });\r\n }\r\n\r\n function _getInvoices(){\r\n api.invoices.invoices.getByPartner({\r\n from: moment(vm.from).format('DD-MM-YYYY'),\r\n to: moment(vm.to).format('DD-MM-YYYY') ,\r\n partnerId: vm.partner.id\r\n }, function(response){\r\n vm.invoices = response;\r\n });\r\n }\r\n\r\n function getData(){\r\n _getInvoices();\r\n _getOrders();\r\n }\r\n\r\n function receipt(id){\r\n $state.go('app.invoices.orders.receipt', { id: id });\r\n }\r\n \r\n function coupon(id){\r\n $state.go('app.invoices.orders.coupon', { id: id, id2 : 0, id3 : 0 });\r\n }\r\n\r\n function select(item){\r\n if (vm.selected.indexOf(item) == -1){\r\n item.selected = true;\r\n vm.selected.push(item);\r\n }else{\r\n vm.selected.splice(vm.selected.indexOf(item), 1);\r\n item.selected = false;\r\n }\r\n }\r\n\r\n function generateInvoice(){\r\n msg.confirm(\"Esta seguro que desea convertir \" + vm.selected.length + \" recibo(s) en factura?\", function(){\r\n alert(\"Aun no llegamos aqui\");\r\n });\r\n }\r\n\r\n function invoice(){\r\n alert(\"Aun no llegamos aca tampoco.\");\r\n }\r\n\r\n function showOrderDetail(ev, id){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerOrderDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-invoices/dialogs/dialog-order/dialog-order.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n OrderId : id\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerBecasController', PartnersPartnerBecaController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerBecaController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item); \r\n _refresh(); \r\n }\r\n\r\n function _refresh(){\r\n api.partners.becas.query({ familyId: vm.partner.familyId }, function(response){\r\n vm.becas = response;\r\n });\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerBecasDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-becas/dialogs/dialog-beca.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Beca : item,\r\n RefreshTable: _refresh,\r\n FamilyId : vm.partner.familyId\r\n }\r\n });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar esta beca?\", function(){\r\n api.partners.becas.delete({ id: item.id }, function(response){\r\n msg.success(\"Beca borrada correctamente.\");\r\n _refresh();\r\n });\r\n });\r\n }\r\n\r\n \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerAddressController', partnersPartnerController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.deleteAddress = deleteAddress;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n var parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(parentScope.item);\r\n _refresh();\r\n\r\n // vm.dtAddressInstance = {};\r\n // vm.dtAddressOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n // columnDefs : [\r\n // {\r\n // // Target the ID column\r\n // targets : 0,\r\n // responsivePriority: 0,\r\n // },\r\n // {\r\n // // Target the default column\r\n // targets : 3,\r\n // filterable : false,\r\n // sortable : false\r\n // },\r\n // {\r\n // // Target the active column\r\n // targets : 4,\r\n // filterable : false,\r\n // sortable : false\r\n // },\r\n // {\r\n // // Target the actions column\r\n // targets : 5,\r\n // responsivePriority: 1,\r\n // filterable : false,\r\n // sortable : false\r\n // }\r\n // ],\r\n // }));\r\n }\r\n\r\n function _refresh(){\r\n api.partners.addresses.query({ partnerId: vm.partner.id }, function(addresses){\r\n vm.addresses = addresses;\r\n })\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerAddressDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-address/dialogs/dialog-address.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Address : item,\r\n RefreshTable: _refresh,\r\n PartnerID : vm.partner.id\r\n }\r\n });\r\n }\r\n\r\n function deleteAddress(item){\r\n msg.confirm(\"Esta seguro que desea borrar la dirección actual?\", function(){\r\n api.partners.addresses.delete({ id: item.id }, function(response){\r\n msg.success(\"Dirección borrada correctamente.\");\r\n _refresh();\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerActivitiesController', PartnersPartnerActivitiesController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerActivitiesController($state, api, $scope, CONST_DATATABLES, $mdDialog, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item);\r\n _getPartnersActivities();\r\n }\r\n\r\n function _getPartnersActivities(){\r\n api.partners.activities.query({ familyId: vm.partner.familyId }, function(response){\r\n vm.partnerActivities = response;\r\n });\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerActivityDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-activities/dialogs/dialog-activity.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n PartnerActivity : item,\r\n Callback : _detailCallback,\r\n FamilyId : vm.partner.familyId\r\n }\r\n });\r\n }\r\n\r\n function _detailCallback(){\r\n _getPartnersActivities();\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar esta actividad?\", function(){\r\n api.partners.activities.delete({ id: item.id }, function(response){\r\n msg.success(\"Actividad borrada correctamente.\");\r\n _getPartnersActivities();\r\n });\r\n });\r\n }\r\n\r\n \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerAbsencesController', PartnersPartnerAbsenceController);\r\n\r\n /** @ngInject */\r\n function PartnersPartnerAbsenceController($state, api, $scope, CONST_DATATABLES, $mdDialog, $document, msg)\r\n {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n ///\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = angular.copy(vm.parentScope.item); \r\n _refresh(); \r\n }\r\n\r\n function _refresh(){\r\n api.partners.absences.query({ familyId: vm.partner.familyId }, function(response){\r\n vm.absences = response;\r\n });\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerAbsencesDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/tabs/tab-absences/dialogs/dialog-absence.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Absence : item,\r\n RefreshTable: _refresh,\r\n FamilyId : vm.partner.familyId\r\n }\r\n });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar esta ausencia?\", function(){\r\n api.partners.absences.delete({ id: item.id }, function(response){\r\n msg.success(\"Ausencia borrada correctamente.\");\r\n _refresh();\r\n });\r\n });\r\n }\r\n\r\n \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerDialogSignatureMouseController', partnersPartnerDialogSignatureMouseController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerDialogSignatureMouseController($mdDialog, Callback, $scope)\r\n { \r\n var vm = this;\r\n _init();\r\n \r\n function _init(){\r\n \r\n vm.signature = ''; \r\n vm.callback = Callback;\r\n }\r\n \r\n vm.clearSignature = function() {\r\n vm.signature = '';\r\n $scope.$broadcast('clearSignature');\r\n };\r\n \r\n vm.onClear = function() {\r\n vm.clearSignature();\r\n }\r\n \r\n vm.onDone = function()\r\n {\r\n if (vm.signature) {\r\n var newSignature = vm.signature.replace(\"data:image/png;base64,\", \"\")\r\n vm.callback(newSignature);\r\n vm.close();\r\n } else {\r\n alert('No ingreso su firma');\r\n }\r\n } \r\n \r\n vm.close = function(){\r\n $mdDialog.hide();\r\n } \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerDialogSignatureController', partnersPartnerDialogSignatureController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerDialogSignatureController($mdDialog, Callback, $scope)\r\n {\r\n //////////////////////////// NEW WAY ////////////////////////////////////// \r\n // var vm = this;\r\n // _init();\r\n \r\n // function _init(){\r\n \r\n // vm.signature = ''; \r\n // vm.callback = Callback;\r\n // }\r\n \r\n // vm.clearSignature = function() {\r\n // vm.signature = '';\r\n // $scope.$broadcast('clearSignature');\r\n // };\r\n \r\n // vm.onClear = function() {\r\n // vm.clearSignature();\r\n // }\r\n \r\n // vm.onDone = function()\r\n // {\r\n // if (vm.signature) {\r\n // var newSignature = vm.signature.replace(\"data:image/png;base64,\", \"\")\r\n // vm.callback(newSignature);\r\n // vm.close();\r\n // } else {\r\n // alert('No ingreso su firma');\r\n // }\r\n // } \r\n \r\n // vm.close = function(){\r\n // $mdDialog.hide();\r\n // }\r\n \r\n //////////////////////////// / NEW WAY //////////////////////////////////////\r\n \r\n \r\n \r\n \r\n \r\n //////////////////////////// OLD WAY //////////////////////////////////////\r\n \r\n // ///////////// SIGN ///////////////\r\n var vm = this;\r\n var tmr;\r\n\r\n vm.onClear = onClear;\r\n vm.onDone = onDone;\r\n\r\n function onSign()\r\n {\r\n var ctx = document.getElementById('cnv').getContext('2d'); \r\n SetDisplayXSize( 500 );\r\n SetDisplayYSize( 100 );\r\n SetTabletState(0, tmr);\r\n SetJustifyMode(0);\r\n ClearTablet();\r\n if(tmr == null)\r\n {\r\n tmr = SetTabletState(1, ctx, 50);\r\n }\r\n else\r\n {\r\n SetTabletState(0, tmr);\r\n tmr = null;\r\n tmr = SetTabletState(1, ctx, 50);\r\n }\r\n }\r\n\r\n function onClear()\r\n {\r\n ClearTablet();\r\n }\r\n\r\n function onDone()\r\n {\r\n if(NumberOfTabletPoints() == 0)\r\n {\r\n alert(\"Agrega tu firma para continuar\");\r\n }\r\n else\r\n {\r\n SetTabletState(0, tmr);\r\n //RETURN TOPAZ-FORMAT SIGSTRING\r\n SetSigCompressionMode(1);\r\n\r\n //RETURN BMP BYTE ARRAY CONVERTED TO BASE64 STRING\r\n SetImageXSize(500);\r\n SetImageYSize(100);\r\n SetImagePenWidth(5);\r\n GetSigImageB64(SigImageCallback);\r\n }\r\n }\r\n\r\n function SigImageCallback( str )\r\n {\r\n document.getElementById(\"hdn-base64sign\").value = str;\r\n vm.accept(); \r\n } \r\n\r\n window.onunload = window.onbeforeunload = (function(){\r\n closingSigWeb()\r\n })\r\n\r\n function closingSigWeb()\r\n {\r\n ClearTablet();\r\n SetTabletState(0, tmr);\r\n }\r\n ///////////// END SIGN ///////////////\r\n \r\n _init();\r\n\r\n /// Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){ \r\n vm.callback = Callback;\r\n setTimeout(function(){\r\n onSign();\r\n }, 10)\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function accept(){\r\n close();\r\n var hdn = document.getElementById(\"hdn-base64sign\");\r\n vm.callback(hdn.value);\r\n } \r\n //////////////////////////// / OLD WAY //////////////////////////////////////\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerDuesDialogController', partnersPartnerDuesDialogController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerDuesDialogController(api, $mdDialog, msg, Partner)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.close = close;\r\n vm.dueChange = dueChange;\r\n ////\r\n\r\n function _init(){\r\n vm.partner = Partner;\r\n api.catalogs.dues.query(function(response){\r\n vm.dues = response.filter(function(d){ \r\n // Titular/Familiar validation\r\n return d.isFamiliar == vm.partner.isFamiliar \r\n && d.isTitular == !vm.partner.isFamiliar\r\n // Age range validation\r\n && (d.minAge != 0 && d.minAge <= vm.partner.age)\r\n && (d.maxAge != 0 && vm.partner.age <= d.minAge)\r\n // Partner Type validation\r\n && (d.partnerType == vm.partner.partnerType);\r\n }); \r\n });\r\n vm.duePrices = [];\r\n }\r\n\r\n function dueChange(){\r\n if (!vm.due || !vm.due.id || vm.due.id == 0)\r\n return;\r\n \r\n api.catalogs.duePrices.get({ \r\n dueId : vm.due.id,\r\n searchType : 2 /*By Due*/,\r\n searchId : vm.due.id\r\n }, function(response){\r\n if (response.length == 0){\r\n msg.error(\"No hay precios vigentes configurados para esa cuota\");\r\n vm.duePrices = [];\r\n }else{\r\n vm.duePrices = response;\r\n }\r\n vm.item.duePeriodicityId = null;\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function save(){\r\n // TODO: Validate \r\n\r\n api.partners.automaticPayment.save(vm.automaticPayment, function(response){\r\n vm.automaticPayment.id = response.id;\r\n msg.success(\"Cambios guardados correctamente\");\r\n close();\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerDialogAccessController', partnersPartnerDialogAccessController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerDialogAccessController(api, $mdDialog, msg, Partner)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.close = close;\r\n vm.accessChecked = accessChecked;\r\n ////\r\n\r\n function _init(){\r\n vm.partner = Partner;\r\n var selectedBranchesIds = vm.partner.branches.map(function(b){ return b.id });\r\n api.catalogs.clubAccess.getAll(function(response){\r\n \r\n vm.clubAccess = response.filter(function(ca){ return selectedBranchesIds.indexOf(ca.branchId) != -1 });\r\n api.catalogs.accessTimeZones.getAll(function(timeZonesResponse){\r\n angular.forEach(vm.clubAccess, function(ca) {\r\n var branchTimeZones = timeZonesResponse.filter(function(tz){ return tz.branchId == ca.branchId });\r\n ca.timeZones = angular.copy(branchTimeZones);\r\n });\r\n \r\n // Get Partner Access\r\n api.partners.accessTimeZones.get({\r\n id: vm.partner.id\r\n }, function(response){\r\n\r\n angular.forEach(response.access, function(acc){\r\n var filter = vm.clubAccess.filter(function(a){ return a.id == acc.clubAccessId }); \r\n if (filter.length > 0)\r\n { \r\n var clubAccess = filter[0];\r\n clubAccess.selected = true;\r\n var tzFilter = clubAccess.timeZones.filter(function(tz){ return tz.id == acc.timeZoneId });\r\n if (tzFilter.length > 0){\r\n tzFilter[0].selected = true;\r\n } \r\n }\r\n });\r\n\r\n // Group ResultList\r\n vm.groups = vm.clubAccess.groupBy('branchId'); \r\n });\r\n }); \r\n });\r\n\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide(); \r\n }\r\n\r\n function save(){\r\n // Generate object to send\r\n var access = [];\r\n var error = \"\";\r\n var selectedClubAccess = vm.clubAccess.filter(function(ca){ return ca.selected });\r\n if (selectedClubAccess.length == 0)\r\n error = \"Debe seleccionar al menos un horario para el acceso\";\r\n angular.forEach(selectedClubAccess, function(ca){\r\n var timeZones = ca.timeZones.filter(function(tz){ return tz.selected });\r\n if (timeZones.length == 0){\r\n error = \"Debe seleccionar al menos un horario para el acceso \" + ca.name;\r\n return;\r\n }\r\n \r\n angular.forEach(timeZones, function(tz){\r\n access.push({\r\n partnerId : vm.partner.id,\r\n clubAccessId : ca.id,\r\n timeZoneId : tz.id\r\n });\r\n });\r\n });\r\n\r\n if (error != '')\r\n {\r\n msg.error(error);\r\n return;\r\n }\r\n\r\n api.partners.accessTimeZones.save({\r\n access: access\r\n }, function(response){\r\n msg.success(\"Accesos a club guardados correctamente.\");\r\n $mdDialog.hide();\r\n });\r\n }\r\n\r\n function accessChecked(access){\r\n if (!access.selected){\r\n angular.forEach(access.timeZones, function(tz) {\r\n tz.selected = false;\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerAutomaticPaymentController', partnersPartnerAddressDialogController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerAddressDialogController(api, $mdDialog, msg, Partner)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.save = save;\r\n vm.close = close;\r\n vm.enable = enable;\r\n vm.disable = disable;\r\n vm.getDataFromTitular = getDataFromTitular;\r\n ////\r\n\r\n function _init(){\r\n vm.partner = Partner;\r\n vm.paymentMethods = api.catalogs.paymentMethods.query();\r\n vm.paymentMethodOptions = api.catalogs.paymentMethodOptions.query();\r\n\r\n // Get Automatic Payment from API\r\n api.partners.automaticPayment.get({ id: vm.partner.id }, function(response){\r\n if (!response.id){\r\n vm.automaticPayment = {\r\n id: 0,\r\n partnerId: vm.partner.id,\r\n isEnabled: false,\r\n expirationDate: new Date()\r\n };\r\n vm.isCreating = false;\r\n }else{\r\n vm.automaticPayment = response;\r\n }\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function save(){\r\n // Validate \r\n var error = '';\r\n var expirationMonth = parseInt(vm.automaticPayment.cardExpiration.substr(0,2));\r\n var expirationYear = parseInt(vm.automaticPayment.cardExpiration.substr(2,4));\r\n if (vm.automaticPayment.cardNumber.length < 15 || vm.automaticPayment.cardNumber.length > 16)\r\n error = \"Numero de tarjeta incorrecto.\";\r\n else if (expirationMonth < 1 || expirationMonth > 12)\r\n error = \"Fecha de Expiración incorrecta\";\r\n else if (expirationYear < parseInt(moment().format(\"YY\")))\r\n error = \"Fecha de Expiración incorrecta\";\r\n else if (moment(expirationMonth + '/' + expirationYear, \"MM/YY\") < moment())\r\n error = \"Tarjeta expirada\";\r\n\r\n if (error != ''){\r\n msg.error(error);\r\n return;\r\n }\r\n\r\n api.partners.automaticPayment.save(vm.automaticPayment, function(response){\r\n vm.automaticPayment.id = response.id;\r\n msg.success(\"Cambios guardados correctamente\");\r\n close();\r\n });\r\n }\r\n\r\n function enable(){\r\n vm.automaticPayment.isEnabled = true;\r\n if (vm.automaticPayment.id != 0)\r\n api.partners.automaticPayment.save(vm.automaticPayment, function(response){\r\n msg.success(\"Cargo automatico habilitado\");\r\n });\r\n }\r\n\r\n function disable(){\r\n vm.automaticPayment.isEnabled = false;\r\n if (vm.automaticPayment.id != 0)\r\n api.partners.automaticPayment.save(vm.automaticPayment, function(response){\r\n msg.success(\"Cargo automatico deshabilitado\");\r\n });\r\n }\r\n\r\n function getDataFromTitular(){\r\n api.partners.automaticPayment.get({ id: vm.partner.parentPartnerId }, function(response){\r\n if (response.id && response.isEnabled){\r\n vm.automaticPayment = angular.extend(response, {\r\n id : 0,\r\n partnerId : vm.partner.id\r\n });\r\n }else{\r\n msg.error(\"El titular no tiene cargo automatico\");\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerDialogAccionesController', partnersPartnerDialogAccionesController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerDialogAccionesController(api, $mdDialog, msg, Acciones, Callback)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){\r\n vm.acciones = Acciones;\r\n vm.callback = Callback;\r\n vm.selectedAccion = null;\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function accept(){\r\n if (!vm.selectedAccion)\r\n {\r\n msg.error(\"Seleccione accion para continuar\");\r\n return; \r\n }\r\n\r\n close();\r\n vm.callback(vm.selectedAccion);\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerInfoDialogPassesController', partnersPartnerInfoDialogPassesController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerInfoDialogPassesController(api, $mdDialog, msg, Partner, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.add = add;\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n vm.checkPassNumber = checkPassNumber;\r\n vm.getPasses = getPasses;\r\n vm.remove = remove;\r\n vm.showPrintable = showPrintable;\r\n ////\r\n\r\n function _init(){\r\n vm.partner = Partner;\r\n vm.pass = null;\r\n vm.passes = [];\r\n api.inventory.products.query(function(response){\r\n vm.inventory = response.filter(function(i){ return i.quantity > 0 || !i.product.isStockRequired });\r\n });\r\n vm.passTypes = api.catalogs.passTypes.query();\r\n api.partners.partners.getByFamily({\r\n id: 0,\r\n familyId: vm.partner.familyId\r\n }, function(response){\r\n vm.partners = response;\r\n vm.partner = vm.partners.filter(function(p){ return p.id == vm.partner.id })[0];\r\n });\r\n\r\n // date filters\r\n var now = moment();\r\n var from = moment([now.year(), now.month()]);\r\n var to = moment(from).endOf('month');\r\n vm.from = from.toDate();\r\n vm.to = to.toDate();\r\n\r\n getPasses();\r\n \r\n }\r\n\r\n function getPasses(){\r\n api.partners.passes.get({ \r\n familyId: vm.partner.familyId,\r\n from: moment(vm.from).format('DD-MM-YYYY'),\r\n to: moment(vm.to).format('DD-MM-YYYY'),\r\n }, function(response){\r\n vm.passes = response;\r\n if (vm.passes.length > 0)\r\n vm.selectedPass = vm.passes[0];\r\n })\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function add(){\r\n vm.pass = {\r\n id : 0,\r\n passId : null,\r\n partnerId : vm.partner.id,\r\n validFrom : new Date(),\r\n validTo : new Date(),\r\n generatePlannedProduct: false,\r\n productPrice: 0,\r\n active : true\r\n };\r\n vm.passNumber = '';\r\n vm.validFrom = vm.pass.validFrom;\r\n vm.validTo = vm.pass.validTo;\r\n vm.pass.name = vm.partner.completeName;\r\n vm.pass.email = vm.partner.email;\r\n }\r\n\r\n function save(){\r\n var print = vm.pass.isPrintable;\r\n api.partners.passes.save(vm.pass, function(response){\r\n var str = vm.pass.isSendByEmail ? \", en breve lo recibirá por correo electrónico.\" : \".\";\r\n msg.success(\"Pase/Credencial guardado correctamente\" + str);\r\n if (print){\r\n close();\r\n $state.go('app.partners.info.pass-print', { id: response.id });\r\n }else{\r\n getPasses();\r\n cancel();\r\n }\r\n });\r\n }\r\n\r\n function cancel(){\r\n vm.pass = null;\r\n }\r\n\r\n function checkPassNumber(){\r\n if ( isNaN(vm.passNumber)){\r\n msg.error(\"Se esperaba un número\");\r\n return;\r\n }\r\n\r\n var number = parseInt(vm.passNumber);\r\n\r\n api.partners.passes.checkPassNumber({\r\n familyId: vm.partner.familyId,\r\n passNumber: number\r\n }, function(response){\r\n if (response){\r\n vm.checkPassNumberOk = true;\r\n vm.pass.passId = response.id;\r\n vm.pass.pass = response;\r\n vm.pass.isSendByEmail = vm.pass.pass.passType.isSendByEmail;\r\n }else{\r\n vm.checkPassNumberOk = false;\r\n vm.pass.passId = null;\r\n vm.pass.pass = null;\r\n }\r\n }, function(errorResponse){\r\n vm.checkPassNumberOk = false;\r\n vm.pass.pass = null;\r\n vm.pass.passId = null;\r\n });\r\n }\r\n\r\n function remove(){\r\n if (confirm(\"Esta seguro que desea borrar este pase?\")){\r\n api.partners.passes.delete({ id: vm.selectedPass.id }, function(response){\r\n msg.success(\"Pase borrado correctamente.\");\r\n getPasses();\r\n });\r\n }\r\n }\r\n\r\n function showPrintable(passId){\r\n cancel();\r\n close();\r\n $state.go('app.partners.info.pass-print', { id: passId });\r\n //$state.go('app.invoices.orders.receipt', { id: id });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerInfoDialogMessagesController', partnersPartnerInfoDialogMessagesController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerInfoDialogMessagesController(api, $mdDialog, msg, Partner)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.add = add;\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n vm.read = read;\r\n vm.unread = unread;\r\n ////\r\n\r\n function _init(){\r\n vm.partner = Partner;\r\n vm.message = null;\r\n vm.messages = [];\r\n _getMessages();\r\n vm.filterIsView = false;\r\n } \r\n\r\n function _getMessages(){\r\n api.partners.messages.get({ id: vm.partner.id }, function(response){\r\n vm.messages = response;\r\n if (vm.messages.length > 0)\r\n vm.selectedMessage = vm.messages[0];\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function add(){\r\n vm.message = {\r\n id : 0,\r\n partnerId : vm.partner.id,\r\n isviewed : false,\r\n message : ''\r\n };\r\n } \r\n\r\n function save(){\r\n api.partners.messages.save(vm.message, function(response){\r\n msg.success(\"Mensaje guardado correctamente.\");\r\n _getMessages();\r\n cancel();\r\n });\r\n }\r\n\r\n function cancel(){\r\n vm.message = null;\r\n }\r\n\r\n function read(){\r\n vm.selectedMessage.isViewed = true;\r\n api.partners.messages.save(vm.selectedMessage, function(response){\r\n msg.success(\"Mensaje marcado como leido.\");\r\n _getMessages();\r\n });\r\n }\r\n\r\n function unread(){\r\n vm.selectedMessage.isViewed = false;\r\n api.partners.messages.save(vm.selectedMessage, function(response){\r\n msg.success(\"Mensaje marcado como NO leido.\");\r\n _getMessages();\r\n });\r\n }\r\n\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerInfoDialogCredentialController', partnersPartnerInfoDialogCredentialController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerInfoDialogCredentialController(api, $mdDialog, msg, Partner, $state, authService) {\r\n // Generate QR code\r\n // var tempotal = document.getElementById(\"qrcode\");\r\n var tempotal = document.createElement(\"div\");\r\n var qrcode = new QRCode(tempotal);\r\n qrcode.makeCode(\"http://www.kiaraorozco.com/\");\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.add = add;\r\n vm.save = save;\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n vm.checkPassNumber = checkPassNumber;\r\n vm.getPasses = getPasses;\r\n vm.remove = remove;\r\n vm.showPrintable = showPrintable;\r\n ////\r\n\r\n var loquesea = 10;\r\n\r\n function _init() {\r\n vm.appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + vm.appData.settings.logoFile;\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\", \"\");\r\n vm.partner = Partner;\r\n vm.pass = null;\r\n vm.passes = [];\r\n vm.div = tempotal;\r\n api.inventory.products.query(function (response) {\r\n vm.inventory = response.filter(function (i) { return i.quantity > 0 || !i.product.isStockRequired });\r\n });\r\n vm.passTypes = api.catalogs.passTypes.query();\r\n api.partners.partners.getByFamily({\r\n id: 0,\r\n familyId: vm.partner.familyId\r\n }, function (response) {\r\n vm.partners = response;\r\n vm.partner = vm.partners.filter(function (p) { return p.id == vm.partner.id })[0];\r\n });\r\n\r\n // date filters\r\n var now = moment();\r\n var from = moment([now.year(), now.month()]);\r\n var to = moment(from).endOf('month');\r\n vm.from = from.toDate();\r\n vm.to = to.toDate();\r\n\r\n getPasses();\r\n\r\n }\r\n\r\n function getPasses() {\r\n api.partners.passes.get({\r\n familyId: vm.partner.familyId,\r\n from: moment(vm.from).format('DD-MM-YYYY'),\r\n to: moment(vm.to).format('DD-MM-YYYY'),\r\n }, function (response) {\r\n vm.passes = response;\r\n if (vm.passes.length > 0)\r\n vm.selectedPass = vm.passes[0];\r\n })\r\n }\r\n\r\n function close() {\r\n $mdDialog.hide();\r\n }\r\n\r\n function add() {\r\n vm.pass = {\r\n id: 0,\r\n passId: null,\r\n partnerId: vm.partner.id,\r\n validFrom: new Date(),\r\n validTo: new Date(),\r\n generatePlannedProduct: false,\r\n productPrice: 0,\r\n active: true\r\n };\r\n vm.passNumber = '';\r\n vm.validFrom = vm.pass.validFrom;\r\n vm.validTo = vm.pass.validTo;\r\n vm.pass.name = vm.partner.completeName;\r\n vm.pass.email = vm.partner.email;\r\n }\r\n\r\n function save() {\r\n var print = vm.pass.isPrintable;\r\n api.partners.passes.save(vm.pass, function (response) {\r\n var str = vm.pass.isSendByEmail ? \", en breve lo recibirá por correo electrónico.\" : \".\";\r\n msg.success(\"Pase/Credencial guardado correctamente\" + str);\r\n if (print) {\r\n close();\r\n $state.go('app.partners.info.pass-print', { id: response.id });\r\n } else {\r\n getPasses();\r\n cancel();\r\n }\r\n });\r\n }\r\n\r\n function cancel() {\r\n vm.pass = null;\r\n }\r\n\r\n function checkPassNumber() {\r\n if (isNaN(vm.passNumber)) {\r\n msg.error(\"Se esperaba un número\");\r\n return;\r\n }\r\n\r\n var number = parseInt(vm.passNumber);\r\n\r\n api.partners.passes.checkPassNumber({\r\n familyId: vm.partner.familyId,\r\n passNumber: number\r\n }, function (response) {\r\n if (response) {\r\n vm.checkPassNumberOk = true;\r\n vm.pass.passId = response.id;\r\n vm.pass.pass = response;\r\n vm.pass.isSendByEmail = vm.pass.pass.passType.isSendByEmail;\r\n } else {\r\n vm.checkPassNumberOk = false;\r\n vm.pass.passId = null;\r\n vm.pass.pass = null;\r\n }\r\n }, function (errorResponse) {\r\n vm.checkPassNumberOk = false;\r\n vm.pass.pass = null;\r\n vm.pass.passId = null;\r\n });\r\n }\r\n\r\n function remove() {\r\n if (confirm(\"Esta seguro que desea borrar este pase?\")) {\r\n api.partners.passes.delete({ id: vm.selectedPass.id }, function (response) {\r\n msg.success(\"Pase borrado correctamente.\");\r\n getPasses();\r\n });\r\n }\r\n }\r\n\r\n function showPrintable(passId) {\r\n cancel();\r\n close();\r\n $state.go('app.partners.info.pass-print', { id: passId });\r\n //$state.go('app.invoices.orders.receipt', { id: id });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders', [ \r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.orders', {\r\n url : '/orders',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/orders/orders/orders.html',\r\n controller : 'InvoicesOrdersController as vm'\r\n }\r\n }\r\n })\r\n .state('app.invoices.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/orders/order/order.html',\r\n controller : 'InvoicesOrderController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partners: function (apiResolver)\r\n {\r\n return apiResolver.resolve('partners.partners@getByFilters', { keyword: 'dummy', pageNumber: 0, pageSize: 0 });\r\n },\r\n PaymentMethods: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.paymentMethods@query');\r\n },\r\n PaymentMethodOptions: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.paymentMethodOptions@query');\r\n },\r\n Tpvs: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.tpvs@query');\r\n },\r\n Partner: function() {\r\n return { id: 0 }\r\n }\r\n },\r\n })\r\n .state('app.invoices.add.partner', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/orders/order/order.html',\r\n controller : 'InvoicesOrderController as vm'\r\n }\r\n },\r\n resolve : {\r\n Partners: function (apiResolver)\r\n {\r\n return apiResolver.resolve('partners.partners@getByFilters', { keyword: 'dummy', pageNumber: 0, pageSize: 0 });\r\n },\r\n PaymentMethods: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.paymentMethods@query');\r\n },\r\n PaymentMethodOptions: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.paymentMethodOptions@query');\r\n },\r\n Tpvs: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.tpvs@query');\r\n },\r\n Partner: function(apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('partners.partners@get', { id : $stateParams.id });\r\n }\r\n },\r\n })\r\n .state('app.invoices.orders.receipt', {\r\n url : '/receipt/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/orders/receipt/receipt.html',\r\n controller : 'InvoicesOrdersReceiptController as vm'\r\n }\r\n },\r\n resolve : {\r\n Order: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('invoices.orders@get', { id : $stateParams.id });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n })\r\n .state('app.invoices.orders.coupon', {\r\n url : '/coupon/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/orders/coupon/coupon.html',\r\n controller : 'InvoicesOrdersCouponController as vm'\r\n }\r\n },\r\n resolve : {\r\n Order: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('invoices.orders@get', { id : $stateParams.id, id2 : 0, id3 : 0 });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n }) \r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.add', {\r\n title: 'Facturar',\r\n shortcuticon : 'icon-currency-usd',\r\n state: 'app.invoices.add'\r\n });\r\n msNavigationServiceProvider.saveItem('apps.invoices.orders', {\r\n title: 'Recibos/Facturas',\r\n shortcuticon : 'icon-file-document', \r\n state: 'app.invoices.orders'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrdersOrderDialogController', invoicesOrdersOrderDialogController);\r\n\r\n /** @ngInject */\r\n function invoicesOrdersOrderDialogController(api, $mdDialog, msg, OrderId)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){\r\n vm.id = OrderId;\r\n api.invoices.orders.get({\r\n id : OrderId\r\n }, function(response){\r\n vm.order = response;\r\n });\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.orders\")\r\n .controller(\r\n \"InvoicesOrdersInvoiceDialogController\",\r\n invoicesOrdersInvoiceDialogController\r\n );\r\n\r\n /** @ngInject */\r\n function invoicesOrdersInvoiceDialogController(\r\n $mdDialog,\r\n msg,\r\n Callback,\r\n Invoice,\r\n api,\r\n $state\r\n ) {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n vm.zipCodeChange = zipCodeChange;\r\n vm.targetZipCodeChange = targetZipCodeChange;\r\n vm.usesCFDI = usesCFDI;\r\n\r\n ////////\r\n\r\n function init() {\r\n vm.title = \"GENERAR FACTURA\";\r\n vm.invoice = Invoice;\r\n vm.callback = Callback;\r\n vm.expeditionDateString = new moment(vm.invoice.expeditionDate).format(\r\n \"DD/MM/YYYY HH:mm\"\r\n );\r\n\r\n // View\r\n if ((vm.viewMode = vm.invoice.id != 0)) {\r\n vm.title = \"DATOS DE FACTURA No \" + vm.invoice.id;\r\n if (vm.invoice.orderFolio)\r\n vm.title =\r\n vm.title + \" (Folio de orden: \" + vm.invoice.orderFolio + \")\";\r\n }\r\n\r\n if (vm.invoice.satZipcode) {\r\n vm.zipCode = vm.invoice.satZipcode.code;\r\n zipCodeChange();\r\n }\r\n\r\n if (vm.invoice.targetSatZipcode) {\r\n vm.targetSatZipcode = vm.invoice.targetSatZipcode.code;\r\n targetZipCodeChange();\r\n }\r\n\r\n // Sat Catalogs\r\n vm.satInvoiceTypes = api.sat.invoiceTypes.query();\r\n vm.satCoins = api.sat.coins.query();\r\n vm.satPayments = api.sat.payments.query();\r\n vm.satPaymentMethods = api.sat.paymentMethods.query();\r\n vm.satCfdiUses = api.sat.cfdiUses.query();\r\n vm.satRegimenFiscales = api.sat.regimenFiscales.query();\r\n vm.satCfdiUsesRegimenFiscal =\r\n api.catalogs.satCfdiUsesRegimenFiscal.query();\r\n }\r\n\r\n vm.sending = false;\r\n function accept() {\r\n if (confirm(\"Esta seguro que desea generar la factura?\")) {\r\n vm.sending = true;\r\n api.invoices.invoices.save(\r\n vm.invoice,\r\n function (response) {\r\n msg.success(\"Factura generada correctamente\");\r\n vm.sending = false;\r\n if (vm.callback) vm.callback(response);\r\n close();\r\n $state.go(\"app.invoices.receipt\", { id: response.id });\r\n },\r\n function (error) {\r\n vm.sending = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n function close() {\r\n $mdDialog.hide();\r\n }\r\n\r\n function zipCodeChange() {\r\n vm.validatingZipCode = true;\r\n vm.invoice.satZipcode = null;\r\n vm.invoice.satZipcodeId = 0;\r\n api.sat.zipCodes.get(\r\n { zipcode: vm.zipCode },\r\n function (response) {\r\n if (response.id) {\r\n vm.invoice.satZipcode = response;\r\n vm.invoice.satZipcodeId = response.id;\r\n }\r\n vm.validatingZipCode = false;\r\n },\r\n function (response) {\r\n vm.validatingZipCode = false;\r\n }\r\n );\r\n }\r\n\r\n function targetZipCodeChange() {\r\n vm.validatingTargetZipCode = true;\r\n vm.invoice.targetSatZipcode = null;\r\n vm.invoice.targetSatZipcodeId = 0;\r\n api.sat.zipCodes.get(\r\n { zipcode: vm.targetSatZipcode },\r\n function (response) {\r\n if (response.id) {\r\n vm.invoice.targetSatZipcode = response;\r\n vm.invoice.targetSatZipcodeId = response.id;\r\n }\r\n vm.validatingTargetZipCode = false;\r\n },\r\n function (response) {\r\n vm.validatingTargetZipCode = false;\r\n }\r\n );\r\n }\r\n\r\n function usesCFDI(satRegimenFiscalId) {\r\n api.catalogs.satCfdiUsesRegimenFiscal.get(\r\n {\r\n id: satRegimenFiscalId,\r\n },\r\n function (response) {\r\n if (response.length == 0) {\r\n msg.error(\r\n \"No hay Usos de CFDI existentes para este Regimen Fiscal\"\r\n );\r\n vm.satCfdiUses = [];\r\n } else {\r\n vm.satCfdiUses = response;\r\n }\r\n },\r\n function (response) {\r\n // if (response.length == 0) {\r\n // msg.error(\r\n // \"No hay Usos de CFDI existentes para este Regimen Fiscal\"\r\n // );\r\n // vm.usesCFDI = [];\r\n // } else {\r\n // vm.usesCFDI = response;\r\n // }\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.orders\")\r\n .controller(\r\n \"InvoicesOrdersCancelDialogController\",\r\n invoicesOrdersCancelDialogController\r\n );\r\n\r\n /** @ngInject */\r\n function invoicesOrdersCancelDialogController(\r\n $mdDialog,\r\n msg,\r\n Callback,\r\n InvoiceId,\r\n api,\r\n $state\r\n ) {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n // vm.zipCodeChange = zipCodeChange;\r\n ////////\r\n\r\n function init() {\r\n vm.title = \"CANCELAR FACTURA\";\r\n vm.catInvoiceCancellationReason = \"\";\r\n vm.invoiceId = InvoiceId;\r\n vm.callback = Callback;\r\n vm.paymentConditions = \"\";\r\n // vm.expeditionDateString = new moment(vm.invoice.expeditionDate).format(\r\n // \"DD/MM/YYYY HH:mm\"\r\n // );\r\n\r\n // View\r\n // if ((vm.viewMode = vm.invoice.id != 0)) {\r\n // vm.title = \"DATOS DE FACTURA No \" + vm.invoice.id;\r\n // if (vm.invoice.orderFolio)\r\n // vm.title =\r\n // vm.title + \" (Folio de orden: \" + vm.invoice.orderFolio + \")\";\r\n // }\r\n\r\n // if (vm.invoice.satZipcode) {\r\n // vm.zipCode = vm.invoice.satZipcode.code;\r\n // zipCodeChange();\r\n // }\r\n\r\n // Sat Catalogs\r\n // vm.satInvoiceTypes = api.sat.invoiceTypes.query();\r\n // vm.satCoins = api.sat.coins.query();\r\n // vm.satPayments = api.sat.payments.query();\r\n // vm.satPaymentMethods = api.sat.paymentMethods.query();\r\n // vm.satCfdiUses = api.sat.cfdiUses.query();\r\n vm.catInvoiceCancellationReasons =\r\n api.sat.catInvoiceCancellationReasons.query();\r\n }\r\n\r\n vm.sending = false;\r\n function accept() {\r\n msg.confirm(\r\n \"Estas seguro que deseas cancelar la factura, no se podran deshacer los cambios?\",\r\n function () {\r\n api.invoices.invoices.delete(\r\n {\r\n id: vm.invoiceId,\r\n invoiceCancellationReasonId: vm.catInvoiceCancellationReason.id,\r\n UuidReference: vm.paymentConditions + \"A\",\r\n },\r\n function (response) {\r\n msg.success(\"Factura cancelada correctamente.\");\r\n // getData();\r\n vm.sending = false;\r\n if (vm.callback) vm.callback(response);\r\n close();\r\n $state.go(\"app.invoices.receipt\", { id: response.id });\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n function close() {\r\n $mdDialog.hide();\r\n }\r\n\r\n // function zipCodeChange() {\r\n // vm.validatingZipCode = true;\r\n // vm.invoice.satZipcode = null;\r\n // vm.invoice.satZipcodeId = 0;\r\n // api.sat.zipCodes.get(\r\n // { zipcode: vm.zipCode },\r\n // function (response) {\r\n // if (response.id) {\r\n // vm.invoice.satZipcode = response;\r\n // vm.invoice.satZipcodeId = response.id;\r\n // }\r\n // vm.validatingZipCode = false;\r\n // },\r\n // function (response) {\r\n // vm.validatingZipCode = false;\r\n // }\r\n // );\r\n // }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDialogTurnsController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($mdDialog, api, msg, Callback, CONST_DATATABLES)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.closeDialog = closeDialog;\r\n vm.closeTurn = closeTurn;\r\n vm.openTurn = openTurn;\r\n vm.getTurns = getTurns;\r\n ////////\r\n\r\n function _init(){\r\n var from = moment().add(-1, 'days');\r\n var to = moment(); \r\n \r\n vm.from = from.format('MM/DD/YYYY');\r\n vm.to = to.format('MM/DD/YYYY');\r\n\r\n getTurns();\r\n\r\n vm.dtInstance = {};\r\n vm.dtOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS,{\r\n filter: true,\r\n pageLength : 8,\r\n }));\r\n\r\n vm.filterOpenOptions = [\r\n { text: 'Todos', value: '' },\r\n { text: 'Solo Abiertos', value: true },\r\n { text: 'Solo Cerrados', value: false },\r\n ];\r\n vm.isOpen = '';\r\n }\r\n\r\n function getTurns(){\r\n api.invoices.turns.get({\r\n dateIni: moment(vm.from).format(\"DD-MM-YYYY\"), \r\n dateEnd: moment(vm.to).format(\"DD-MM-YYYY\")\r\n },function(response){\r\n vm.turns = response;\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n } \r\n\r\n function closeTurn(turn){\r\n if (confirm(\"Estas seguro que deseas cerrar el turno \" + turn.id + \"?\")){\r\n turn.isOpen = false;\r\n api.invoices.turns.save(turn, function(response){\r\n getTurns();\r\n msg.success(\"Turno cerrado\");\r\n });\r\n }\r\n }\r\n\r\n function openTurn(){\r\n if (confirm(\"Se abrira un nuevo turno, desea continuar?\")){\r\n api.invoices.turns.save({\r\n id: 0\r\n }, function(response){\r\n msg.success(\"Turno creado correctamente.\");\r\n Callback(response);\r\n closeDialog();\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDialogMessagesController', invoicesOrderDialogMessagesController);\r\n\r\n /** @ngInject */\r\n function invoicesOrderDialogMessagesController($mdDialog, Messages)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){\r\n vm.messages = Messages;\r\n vm.partners = [];\r\n angular.forEach(vm.messages, function(m) {\r\n if (vm.partners.filter(function(p) { return p.id == m.partnerId }).length == 0)\r\n vm.partners.push({ id: m.partnerId, completeName: m.partner.completeName, isFamily: m.partner.isFamily });\r\n });\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDialogProductController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($mdDialog, api, msg, Callback, CONST_DATATABLES)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.closeDialog = closeDialog;\r\n vm.select = select;\r\n vm.setSelected = setSelected;\r\n vm.accept = accept;\r\n ////////\r\n\r\n function _init(){\r\n api.inventory.products.query(function(response){\r\n vm.inventory = response.filter(function(i) { return i.quantity > 0 || !i.product.isStockRequired });\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function select(item)\r\n {\r\n Callback(item);\r\n closeDialog();\r\n }\r\n\r\n function setSelected(item)\r\n {\r\n vm.selected = item;\r\n }\r\n\r\n function accept(){\r\n select(vm.selected);\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDialogIncompletePeriodsController', InvoicesInvoiceDialogIncompletePeriodsController);\r\n\r\n /** @ngInject */\r\n function InvoicesInvoiceDialogIncompletePeriodsController($mdDialog, msg, Periods, Callback)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept; \r\n vm.cancel = cancel;\r\n ////////\r\n\r\n function init(){\r\n vm.callback = Callback;\r\n vm.periods = Periods;\r\n }\r\n\r\n function accept(){ \r\n vm.callback(vm.periods);\r\n cancel();\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDialogEditController', invoicesInvoiceDialogEditController);\r\n\r\n /** @ngInject */\r\n function invoicesInvoiceDialogEditController($mdDialog, msg, Callback, Detail)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept; \r\n vm.cancel = cancel;\r\n ////////\r\n\r\n function init(){\r\n vm.callback = Callback;\r\n vm.detail = angular.copy(Detail);\r\n }\r\n\r\n function accept(){ \r\n vm.detail.subtotal = vm.detail.price * vm.detail.quantity;\r\n vm.detail.total = (vm.detail.price * vm.detail.quantity) + vm.detail.interest - vm.detail.discountAmmount;\r\n vm.callback(Detail, vm.detail);\r\n cancel();\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.notasCredito', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.notasCredito', {\r\n url : '/notasCredito',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/notasCredito/notasCredito/notasCredito.html',\r\n controller : 'InvoicesNotasCreditoController as vm'\r\n }\r\n },\r\n resolve : {\r\n NotasCredito: function (apiResolver)\r\n {\r\n return apiResolver.resolve('invoices.notasCredito@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.notasCredito', {\r\n title: 'Notas de Credito',\r\n shortcuticon : 'icon-repeat', \r\n state: 'app.invoices.notasCredito'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.notasCredito')\r\n .controller('InvoicesNotasCreditoDialogController', invoicesNotasCreditoDialogController);\r\n\r\n /** @ngInject */\r\n function invoicesNotasCreditoDialogController(api, $mdDialog, msg, NotaCredito, authService, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.close = close;\r\n vm.searchInvoice = searchInvoice;\r\n vm.save = save;\r\n vm.orderSelectedChange = orderSelectedChange;\r\n ////\r\n\r\n function _init(){\r\n \r\n vm.settings = authService.getAppData().settings;\r\n vm.invoiceSerie = vm.settings.invoiceSerie;\r\n vm.conceptos = api.catalogs.conceptosNotaCredito.query();\r\n vm.cfdiRelacionado = api.sat.cfdiRelacionado.query();\r\n vm.saving = false;\r\n if (NotaCredito){\r\n vm.item = NotaCredito;\r\n }else{\r\n vm.item = {\r\n id: 0,\r\n invoice: {}\r\n };\r\n }\r\n vm.searchInvoiceLoading = false;\r\n } \r\n\r\n function searchInvoice(){\r\n if (vm.invoiceSerie == '' || !vm.invoiceNumber || vm.invoiceNumber == ''){\r\n msg.error(\"Ingrese datos para buscar factura\");\r\n return;\r\n }\r\n \r\n vm.searchInvoiceLoading = true;\r\n api.invoices.invoices.getByFolio({ \r\n serie: vm.invoiceSerie, \r\n folio: vm.invoiceNumber\r\n }, function(response){\r\n\r\n vm.invoice = angular.copy(response);\r\n vm.item = angular.extend(response,{\r\n id : 0,\r\n invoiceId: vm.invoice.id,\r\n invoiceFolio: vm.invoice.folio, \r\n xmlString: null,\r\n xmlPath : null,\r\n serie : null,\r\n number : null,\r\n folio : null, \r\n subtotal : 0,\r\n details: [],\r\n nCorderId: 0 ,\r\n orderFolio: '',\r\n SatCfdiRelacionadoId: null\r\n });\r\n if (vm.invoice.ncOrders.length > 0){\r\n vm.selectedOrder = vm.invoice.ncOrders[0];\r\n vm.item.nCorderId = vm.invoice.ncOrders[0].id;\r\n vm.item.orderFolio = vm.invoice.ncOrders[0].folio;\r\n vm.item.total = vm.invoice.ncOrders[0].remainingAmount;\r\n }\r\n vm.searchInvoiceLoading = false;\r\n }, function(errorResponse){\r\n vm.searchInvoiceLoading = false;\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function save(){\r\n vm.saving = true; \r\n // Add Details \r\n vm.item.details.push({\r\n conceptoNotaCreditoId: vm.conceptoNotaCredito.id,\r\n description: vm.conceptoNotaCredito.name, \r\n });\r\n vm.item.SatCfdiRelacionadoId = vm.cfdiRelacionado.id;\r\n api.invoices.notasCredito.save(vm.item, function(response){\r\n msg.success(\"Nota de Crédito Generada correctamente.\");\r\n vm.saving = false;\r\n close();\r\n // Go to Receipt\r\n $state.go(\"app.invoices.receipt\", { id: response.id });\r\n }, function(errorResponse){\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n function orderSelectedChange(selectedOrder){\r\n vm.item.total = selectedOrder.remainingAmount;\r\n vm.item.nCorderId = selectedOrder.id;\r\n vm.item.orderFolio = selectedOrder.folio;\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrderDiscountDialogController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($mdDialog, msg, ApplyDiscount, Product)\r\n {\r\n var vm = this;\r\n\r\n vm.applyDiscount = ApplyDiscount;\r\n vm.product = Product;\r\n \r\n // Data\r\n init();\r\n\r\n // Methods\r\n vm.discountAccept = discountAccept; \r\n vm.cancel = cancel;\r\n ////////\r\n\r\n function init(){\r\n vm.discount = {\r\n type: 2,\r\n ammount: 0\r\n };\r\n\r\n vm.discountTypes = [\r\n { id: 1, name: \"Monto\" },\r\n { id: 2, name: \"Porcentaje\" },\r\n ]; \r\n }\r\n\r\n function discountAccept(){ \r\n vm.applyDiscount(vm.product, vm.discount);\r\n cancel();\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.inventory.inventories', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.inventory.inventories', {\r\n url : '/inventories',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/inventory/views/inventories/inventories/inventories.html',\r\n controller : 'InventoryInventoriesController as vm'\r\n }\r\n }\r\n })\r\n .state('app.inventory.inventories.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/inventory/views/inventories/inventory/inventory.html',\r\n controller : 'InventoryInventoryController as vm'\r\n }\r\n },\r\n resolve : {\r\n Inventory: function ()\r\n {\r\n return { id: 0, name: '', quantity: 0, cost: 0, price: 0, productId: 0, warehouseId: 0 };\r\n },\r\n },\r\n })\r\n .state('app.inventory.inventories.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/inventory/views/inventories/inventory/inventory.html',\r\n controller : 'InventoryInventoryController as vm'\r\n }\r\n },\r\n resolve : {\r\n Inventory: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('inventory.inventory@get', { id: $stateParams.id });\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.inventory.inventories', {\r\n title: 'Inventarios',\r\n state: 'app.inventory.inventories',\r\n shortcuticon : 'icon-basket-fill',\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.inventory.inventories')\r\n .controller('InventoryInventoriesDialogInventoryController', InventoryInventoriesDialogInventoryController);\r\n\r\n /** @ngInject */\r\n function InventoryInventoriesDialogInventoryController($mdDialog, msg, Callback, api)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept; \r\n vm.close = close;\r\n ////////\r\n\r\n function init(){\r\n vm.callback = Callback;\r\n api.catalogs.products.query(function(response){\r\n vm.products = response.filter(function(p) { return p.active }); \r\n });\r\n vm.warehouses = api.catalogs.warehouses.query();\r\n vm.inventory = {\r\n id : 0,\r\n productId : 0,\r\n warehouseId : 0,\r\n quantity : 0,\r\n price : 0\r\n };\r\n }\r\n\r\n function accept(){ \r\n api.inventory.inventory.save(vm.inventory, function(response){\r\n vm.callback(response);\r\n close();\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.rentableZones', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.rentableZones', {\r\n url : '/rentableZones',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/rentable-zones/rentable-zones/rentable-zones.html',\r\n controller : 'CatalogsRentableZonesController as vm'\r\n }\r\n },\r\n resolve : {\r\n RentableZones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.rentableZones@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.rentableZones.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/rentable-zones/rentable-zone/rentable-zone.html',\r\n controller : 'CatalogsRentableZoneController as vm'\r\n }\r\n },\r\n resolve : {\r\n RentableZone: function (){ \r\n return { id: 0, name: '', active: true, matrixRows: 0, matrixColumns: 0 }\r\n },\r\n }\r\n })\r\n .state('app.catalogs.rentableZones.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/rentable-zones/rentable-zone/rentable-zone.html',\r\n controller : 'CatalogsRentableZoneController as vm'\r\n }\r\n },\r\n resolve : {\r\n RentableZone: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.rentableZones@get', { id : $stateParams.id });\r\n },\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.rentableZones', {\r\n title: 'Rentables',\r\n state: 'app.catalogs.rentableZones'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.rentableZones')\r\n .controller('CatalogsRentableZonesPricesDialogController', CatalogsRentableZonesPricesDialogController);\r\n\r\n /** @ngInject */\r\n function CatalogsRentableZonesPricesDialogController($mdDialog, PriceGroupId, RentableZoneId, api, msg, Callback, settingsService)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n api.catalogs.periodicities.query(function(response){\r\n vm.periodicities = response;\r\n \r\n if (!PriceGroupId || PriceGroupId == 0)\r\n {\r\n vm.priceHeader = {\r\n id : 0,\r\n validFrom : new Date(),\r\n rentableZoneId : RentableZoneId,\r\n interes : settingsService.interes,\r\n daysOfGrace : settingsService.daysOfGrace\r\n };\r\n\r\n vm.newPrices = [];\r\n angular.forEach(vm.periodicities, function(p){\r\n vm.newPrices.push({\r\n periodicityId: p.id,\r\n periodicity: angular.copy(p),\r\n price : null,\r\n pricePerDay: 0\r\n });\r\n });\r\n }else{\r\n // GEt Prices by PriceGroupId\r\n api.catalogs.rentableZonePrices.get({ \r\n rentableZoneId: RentableZoneId, \r\n groupId: PriceGroupId \r\n }, function(response){\r\n if (response && response.length > 0){\r\n var header = response[0];\r\n vm.priceHeader = {\r\n validFrom : moment(header.validFrom).toDate(),\r\n interes : header.interes,\r\n daysOfGrace : header.daysOfGrace\r\n };\r\n vm.newPrices = [];\r\n vm.newPrices = response;\r\n vm.validFrom = vm.priceHeader.validFrom;\r\n }\r\n });\r\n } \r\n });\r\n }\r\n\r\n function save(){\r\n vm.priceHeader.validFrom = moment(vm.priceHeader.validFrom).format(\"MM-DD-YYYY\");\r\n var prices = [];\r\n angular.forEach(vm.newPrices, function(price){ \r\n price.periodicityId = price.periodicity.id; \r\n prices.push(angular.copy(angular.extend(price, vm.priceHeader)));\r\n }); \r\n \r\n api.catalogs.rentableZonePrices.save(prices, function(response){\r\n msg.success(\"Precios Agregado correctamente\");\r\n vm.callback();\r\n closeDialog();\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.dues', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.dues', {\r\n url : '/dues',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/dues/dues/dues.html',\r\n controller : 'CatalogsDuesController as vm'\r\n }\r\n },\r\n resolve : {\r\n Dues: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.dues@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.dues.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/dues/due/due.html',\r\n controller : 'CatalogsDueController as vm'\r\n }\r\n },\r\n resolve : {\r\n Due: function (){ \r\n return { id: 0, periodicityId: 0, isTitular: true, name: '', prices: [], active: true, minAge: 0, maxAge: 150, familiarMinNumber: 0, familiarMaxNumber: 150, partnerTypeId: null }\r\n },\r\n Periodicities: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.periodicities@query');\r\n },\r\n PartnerTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.partnerTypes@query');\r\n },\r\n Accounts: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accounts@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.dues.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/dues/due/due.html',\r\n controller : 'CatalogsDueController as vm'\r\n }\r\n },\r\n resolve : {\r\n Due: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.dues@get', { id : $stateParams.id });\r\n },\r\n Periodicities: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.periodicities@query');\r\n },\r\n PartnerTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.partnerTypes@query');\r\n },\r\n Accounts: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accounts@query');\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.dues', {\r\n title: 'Cuotas',\r\n state: 'app.catalogs.dues'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.dues')\r\n .controller('CatalogsDuePricesDialogController', CatalogsDuePricesDialogController);\r\n\r\n /** @ngInject */\r\n function CatalogsDuePricesDialogController($mdDialog, PriceGroupId, DueId, api, msg, Callback, settingsService)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n api.catalogs.periodicities.query(function(response){\r\n vm.periodicities = response;\r\n \r\n if (!PriceGroupId || PriceGroupId == 0)\r\n {\r\n vm.priceHeader = {\r\n id : 0,\r\n validFrom : new Date(),\r\n dueId : DueId,\r\n interes : settingsService.interes,\r\n daysOfGrace : settingsService.daysOfGrace\r\n };\r\n\r\n vm.newPrices = [];\r\n angular.forEach(vm.periodicities, function(p){\r\n vm.newPrices.push({\r\n periodicity: angular.copy(p),\r\n price : null,\r\n pricePerClass: 0\r\n });\r\n });\r\n }else{\r\n // GEt Prices by PriceGroupId\r\n api.catalogs.duePrices.get({ \r\n dueId : DueId, \r\n searchType : 1,\r\n searchId : PriceGroupId \r\n }, function(prices){\r\n if (prices && prices.length > 0){\r\n var header = prices[0];\r\n vm.priceHeader = {\r\n validFrom : moment(header.validFrom).toDate(),\r\n interes : header.interes,\r\n daysOfGrace : header.daysOfGrace\r\n };\r\n vm.newPrices = [];\r\n vm.newPrices = prices;\r\n vm.validFrom = vm.priceHeader.validFrom;\r\n }\r\n });\r\n } \r\n });\r\n }\r\n\r\n function save(){\r\n vm.priceHeader.validFrom = moment(vm.priceHeader.validFrom).format(\"MM-DD-YYYY\");\r\n var prices = [];\r\n angular.forEach(vm.newPrices, function(price){ \r\n price.periodicityId = price.periodicity.id; \r\n prices.push(angular.copy(angular.extend(price, vm.priceHeader)));\r\n }); \r\n \r\n api.catalogs.duePrices.save(prices, function(response){\r\n msg.success(\"Precios Agregado correctamente\");\r\n vm.callback();\r\n closeDialog();\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n/* eslint-disable comma-dangle */\r\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\r\n \"app.reports\", \r\n [\r\n \"datatables\", \r\n \"chart.js\"\r\n ]\r\n ).config(config); \r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider) {\r\n // State\r\n $stateProvider\r\n .state(\"app.reports\", {\r\n abstract: true,\r\n url: \"/reports\",\r\n })\r\n .state(\"app.reports.reports\", {\r\n url: \"/selector\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl: \"app/main/reports/views/selector/selector.html\",\r\n controller: \"ReportsSelectorController as vm\",\r\n },\r\n },\r\n resolve: {\r\n ReportGroups: function (apiResolver) {\r\n return apiResolver.resolve(\"reports.groups@query\");\r\n },\r\n Branches: function (apiResolver) {\r\n return apiResolver.resolve(\"catalogs.branches@query\");\r\n },\r\n Users: function (apiResolver) {\r\n return apiResolver.resolve(\"security.users@query\");\r\n },\r\n },\r\n })\r\n .state(\"app.reports.dashboard\", {\r\n url: \"/dashboard\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl: \"app/main/reports/views/dashboard/dashboard.html\",\r\n controller: \"ReportsDashboardController as vm\"\r\n }\r\n }\r\n }) \r\n .state(\"app.reports.tst\", {\r\n url: \"/tst\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl: \"app/main/reports/views/tst/tst.html\",\r\n controller: \"ReportsTstController as vm\",\r\n },\r\n },\r\n })\r\n .state(\"app.reports.cortecobranza-desglosado\", {\r\n url: \"/corteCobranzaDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-cobranza/layout-desglosado.html\",\r\n controller: \"ReportsCortesCajaCorteCobranzaController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.cortecobranza-consolidado\", {\r\n url: \"/corteCobranzaConsolidado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-cobranza/layout-consolidado.html\",\r\n // templateUrl: 'app/main/invoices/views/orders/receipt/receipt.html',\r\n controller: \"ReportsCortesCajaCorteCobranzaController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-altas\", {\r\n url: \"/sociosAltas\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/altas/layout.html\",\r\n controller: \"ReportsSociosaltasController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.corteformapago-desglosado\", {\r\n url: \"/corteFormaPagoDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-forma-pago/layout-desglosado.html\",\r\n controller: \"ReportsCortesCajaCorteFormaPagoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.ingresos-otros\", {\r\n url: \"/corteOtrosIngresosDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/ingresos/otros/layout.html\",\r\n controller: \"ReportsOtrosIngresosController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.corteformapago-consolidado\", {\r\n url: \"/corteFormaPagoConsolidado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-forma-pago/layout-consolidado.html\",\r\n controller: \"ReportsCortesCajaCorteFormaPagoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.corteproducts-desglosado\", {\r\n url: \"/corteProductsDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-products/layout-desglosado.html\",\r\n controller: \"ReportsCortesCajaCorteProductsController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.corteproducts-consolidado\", {\r\n url: \"/corteProductsConsolidado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-products/layout-consolidado.html\",\r\n controller: \"ReportsCortesCajaCorteProductsController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.ingresosgenerales-desglosado\", {\r\n url: \"/ingresosGeneralesDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/ingresos/general/layout-desglosado.html\",\r\n controller: \"ReportsCortesCajaIngresosGeneralesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.ingresosgenerales-consolidado\", {\r\n url: \"/ingresosGeneralesConsolidado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/ingresos/general/layout-consolidado.html\",\r\n controller: \"ReportsCortesCajaIngresosGeneralesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-vigentes\", {\r\n url: \"/sociosVigentes\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/vigentes/layout.html\",\r\n controller: \"ReportsSociosVigentesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-status\", {\r\n url: \"/sociosStatus\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/status/layout.html\",\r\n controller: \"ReportsSociosStatusController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-activos\", {\r\n url: \"/sociosActivos\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/activos/layout.html\",\r\n controller: \"ReportsSociosActivosController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-inactivos\", {\r\n url: \"/sociosInactivos\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/inactivos/layout.html\",\r\n controller: \"ReportsSociosInactivosController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-cupo\", {\r\n url: \"/sociosCupo\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/cupo/layout.html\",\r\n controller: \"ReportsSociosCupoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-rangoedad-consolidado\", {\r\n url: \"/sociosAgesRangeConsolidado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/agesRange/layout-consolidado.html\",\r\n controller: \"ReportsSociosAgeRangesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-rangoedad-desglosado\", {\r\n url: \"/sociosAgesRangeDesglosado\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/agesRange/layout-desglosado.html\",\r\n controller: \"ReportsSociosAgeRangesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-general\", {\r\n url: \"/sociosGeneral\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/general/layout.html\",\r\n controller: \"ReportsSociosGeneralController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-general-pago\", {\r\n url: \"/sociosGeneralPago\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/generalPago/layout.html\",\r\n controller: \"ReportsSociosGeneralPagoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-vendedor\", {\r\n url: \"/vendedor\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/vendedor/layout.html\",\r\n controller: \"ReportsSociosVendedorController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-cargoautomatico\", {\r\n url: \"/cargoautomatico\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/cargoautomatico/layout.html\",\r\n controller: \"ReportsSociosCargoAutomaticoController as vm\",\r\n }\r\n },\r\n bodyClass: \"printable\"\r\n })\r\n .state(\"app.reports.socios-cargoautomaticobanco\", {\r\n url: \"/cargoautomaticobanco\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/cargoautomaticobanco/layout.html\",\r\n controller: \"ReportsSociosCargoAutomaticoBancoController as vm\",\r\n }\r\n },\r\n bodyClass: \"printable\"\r\n })\r\n .state(\"app.reports.socios-invoicesorders\", {\r\n url: \"/invoicesorders\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/invoicesorders/layout.html\",\r\n controller: \"ReportsSociosInvoicesOrdersController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.exports-general\", {\r\n url: \"/Exports\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/exports/general/layout.html\",\r\n controller: \"ReportsExportsGeneralController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.exports-general-intelisis\", {\r\n url: \"/ExportsIntelisis\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/exports/generalIntelisis/layout.html\",\r\n controller: \"ReportsExportsGeneralIntelisisController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.exports-general-intelisis-recibos\", {\r\n url: \"/ExportsIntelisisRecip\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/exports/generalIntelisisRecip/layout.html\",\r\n controller: \"ReportsExportsGeneralIntelisisReciptController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.prospectos-general\", {\r\n url: \"/prospectos\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/prospectos/general/layout.html\",\r\n controller: \"ReportsProspectosGeneralController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.notascredito\", {\r\n url: \"/notascredito\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-notas-credito/layout.html\",\r\n controller: \"ReportsNotasCreditoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.servicios-rentables\", {\r\n url: \"/rentables\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/servicios/rentables/layout.html\",\r\n controller: \"ReportsRentablesController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socio-tipo\", {\r\n url: \"/socioTipo\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/tipo/layout.html\",\r\n controller: \"ReportsSociosTipoController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socio-birthday\", {\r\n url: \"/birthday\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/birthdate/layout.html\",\r\n controller: \"ReportsSociosBirthdayController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socio-tipoCuota\", {\r\n url: \"/TypeDue\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/typeDue/layout.html\",\r\n controller: \"ReportsSociosTypeDueController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.corteTPV\", {\r\n url: \"/CorteTPV\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/corte-TPV/layout.html\",\r\n controller: \"ReportsCorteTPVController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.documentCancel\", {\r\n url: \"/documentCancel\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/cortes-caja/document-cancel/layout.html\",\r\n controller: \"ReportsDocumentCancelController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.convenios\", {\r\n url: \"/SocioConvenios\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/convenio/layout.html\",\r\n controller: \"ReportsSocioConvenio as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.ausencia\", {\r\n url: \"/SocioAusencias\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/ausencia/layout.html\",\r\n controller: \"ReportsSocioAusencia as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n .state(\"app.reports.socios-between-dates\", {\r\n url: \"/sociosBetweenDates\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/between-dates/layout.html\",\r\n controller: \"ReportsSociosBetweenDatesController as vm\"\r\n }\r\n },\r\n bodyClass: \"printable\"\r\n })\r\n .state(\"app.reports.socios-byinscription-date\", {\r\n url: \"/sociosByInscriptionDate\",\r\n views: {\r\n \"content@app\": {\r\n templateUrl:\r\n \"app/main/reports/views/reports/socios/byincscription-date/layout.html\",\r\n controller: \"ReportsSociosByInscriptionDateController as vm\",\r\n },\r\n },\r\n bodyClass: \"printable\",\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem(\"apps\", {\r\n title: \"\",\r\n group: true,\r\n weight: 1,\r\n });\r\n\r\n msNavigationServiceProvider.saveItem(\"apps.reports\", {\r\n title: \"Reportes\",\r\n icon: \"icon-file-document\",\r\n weight: 3,\r\n });\r\n\r\n msNavigationServiceProvider.saveItem(\"apps.reports.reports\", {\r\n title: \"Selector de reportes\",\r\n state: \"app.reports.reports\",\r\n });\r\n \r\n msNavigationServiceProvider.saveItem(\"apps.reports.dashboard\", {\r\n title: \"Dashboard\",\r\n state: \"app.reports.dashboard\"\r\n });\r\n }\r\n})();\r\n\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosVigentesController', reportsSociosVigentesController);\r\n \r\n /** @ngInject */\r\n function reportsSociosVigentesController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.dueGroups = vm.reportData.data.groupBy('dueName'); \r\n angular.forEach(vm.dueGroups , function(dueGroup){\r\n dueGroup.periodicityGroups = dueGroup.items.groupBy('periodicityName'); \r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.dueGroups, function(dg){\r\n angular.forEach(dg.periodicityGroups, function(pg){\r\n var count = pg.items.length;\r\n vm.summary.push({\r\n due: dg.key,\r\n periodicity: pg.key,\r\n count: pg.items.length\r\n });\r\n });\r\n });\r\n // Totals Summary\r\n vm.summary.push({\r\n due: 'Socios Totales',\r\n periodicity: '',\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n });\r\n \r\n } \r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosVendedorController', reportsSociosVendedorController);\r\n \r\n /** @ngInject */\r\n function reportsSociosVendedorController(reportsService, api, authService)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n \r\n // Grouping\r\n angular.forEach(vm.branchGroups , function(branchGroup){\r\n branchGroup.sellerGroup = branchGroup.items.groupBy('sellerName'); \r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.branchGroups, function(bg){\r\n angular.forEach(bg.sellerGroup, function(sg){\r\n vm.summary.push({\r\n branch: bg.key,\r\n sellerName: sg.key,\r\n count: sg.items.length\r\n });\r\n });\r\n });\r\n \r\n // Totals Summary\r\n vm.summary.push({\r\n branch: 'Totales',\r\n ageRange: '',\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n }); \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosTypeDueController', reportsSociosTypeDueController);\r\n\r\n /** @ngInject */\r\n function reportsSociosTypeDueController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.group = vm.reportData.data.groupBy('brancheName');\r\n angular.forEach(vm.group, function (g) {\r\n g.due = g.items.groupBy('due');\r\n angular.forEach(g.due, function (due) {\r\n due.typePeriodo = due.items.groupBy('typePeriodo');\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosTipoController', reportsSociosTipoController);\r\n\r\n /** @ngInject */\r\n function reportsSociosTipoController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n angular.forEach(vm.groups, function (group) {\r\n group.tipoCuota = group.items.groupBy('dueName');\r\n group.masculino = 0;\r\n group.femenino = 0;\r\n group.vencido = 0;\r\n group.vigente = 0;\r\n\r\n group.menVencido = 0;\r\n group.menVigente = 0;\r\n group.biVencido = 0;\r\n group.biVigente = 0;\r\n group.triVencido = 0;\r\n group.triVigente = 0;\r\n group.cuaVencido = 0;\r\n group.cuaVigente = 0;\r\n group.semVencido = 0;\r\n group.semVigente = 0;\r\n group.anuVencido = 0;\r\n group.anuVigente = 0;\r\n group.semanalVencido = 0;\r\n group.semanalVigente = 0;\r\n\r\n angular.forEach(group.tipoCuota, function (tipoCuota) {\r\n tipoCuota.masculino = 0;\r\n tipoCuota.femenino = 0;\r\n tipoCuota.vencido = 0;\r\n tipoCuota.vigente = 0;\r\n tipoCuota.menVencido = 0;\r\n tipoCuota.menVigente = 0;\r\n tipoCuota.biVencido = 0;\r\n tipoCuota.biVigente = 0;\r\n tipoCuota.triVencido = 0;\r\n tipoCuota.triVigente = 0;\r\n tipoCuota.cuaVencido = 0;\r\n tipoCuota.cuaVigente = 0;\r\n tipoCuota.semVencido = 0;\r\n tipoCuota.semVigente = 0;\r\n tipoCuota.anuVencido = 0;\r\n tipoCuota.anuVigente = 0;\r\n tipoCuota.semanalVencido = 0;\r\n tipoCuota.semanalVigente = 0;\r\n\r\n tipoCuota.Periodicities = tipoCuota.items.groupBy('periodicitiesName');\r\n angular.forEach(tipoCuota.Periodicities, function (Periodicities) {\r\n Periodicities.vencido = 0;\r\n Periodicities.vigente = 0;\r\n angular.forEach(Periodicities.items, function (item) {\r\n if (item.genderName == 'Masculino') {\r\n tipoCuota.masculino++;\r\n group.masculino++;\r\n }\r\n else {\r\n tipoCuota.femenino++;\r\n group.femenino++;\r\n }\r\n if (item.periodicitiesName == 'Semanal') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.semanalVigente++;\r\n group.semanalVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.semanalVencido++;\r\n group.semanalVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Mensual') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.menVigente++;\r\n group.menVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.menVencido++;\r\n group.menVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Bimestral') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.biVigente++;\r\n group.biVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.biVencido++;\r\n group.biVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Trimestral') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.triVigente++;\r\n group.triVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.triVencido++;\r\n group.triVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Cuatrimestral') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.cuaVigente++;\r\n group.cuaVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.cuaVencido++;\r\n group.cuaVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Semestral') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.semVigente++;\r\n group.semVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.semVencido++;\r\n group.semVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n if (item.periodicitiesName == 'Anual') {\r\n if (item.vigencia == 'Vigente') {\r\n tipoCuota.anuVigente++;\r\n group.anuVigente++;\r\n tipoCuota.vigente++;\r\n group.vigente++;\r\n }\r\n else {\r\n tipoCuota.anuVencido++;\r\n group.anuVencido++;\r\n tipoCuota.vencido++;\r\n group.vencido++;\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosStatusController', ReportsSociosStatusController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function ReportsSociosStatusController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.summary = [];\r\n\r\n var totalGroup = 0;\r\n var totalGroupRecurrente = 0;\r\n vm.groups = vm.reportData.data.groupBy('branchesName');\r\n angular.forEach(vm.groups, function (group) {\r\n group.membershipType = group.items.groupBy('membershipType');\r\n angular.forEach(group.membershipType, function (membershipType) {\r\n membershipType.period = membershipType.items.groupBy('periodo');\r\n membershipType.total = 0;\r\n angular.forEach(membershipType.period, function (period) {\r\n var totalperiod = period.items.length;\r\n period.total = totalperiod;\r\n membershipType.total += totalperiod;\r\n totalGroup += totalperiod;\r\n angular.forEach(period.items, function (item){\r\n if (item.isRecurrent == 1){\r\n totalGroupRecurrente ++;\r\n }\r\n if (item.parentPartner == null)\r\n {\r\n item.parentPartner = '------';\r\n }\r\n });\r\n });\r\n });\r\n group.total = totalGroup;\r\n group.totalRecurrente = totalGroupRecurrente;\r\n group.totalNoRecurrente = totalGroup - totalGroupRecurrente;\r\n group.periodType = group.items.groupBy('periodo');\r\n angular.forEach(group.periodType, function (period) {\r\n period.membershipType = period.items.groupBy('membershipType');\r\n period.total = period.items.length;\r\n period.recurrent = period.items.groupBy('recurrente');\r\n angular.forEach(period.recurrent, function (recurrent) {\r\n recurrent.total = recurrent.items.length;\r\n });\r\n angular.forEach(period.membershipType, function (membershipType) {\r\n vm.summary.push({\r\n branch: group.key,\r\n membershipType: membershipType.key,\r\n period: period.key,\r\n totalPeriod: membershipType.items.length\r\n });\r\n });\r\n });\r\n });\r\n\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosInvoicesOrdersController', reportsSociosInvoicesOrdersController);\r\n\r\n /** @ngInject */\r\n function reportsSociosInvoicesOrdersController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.group = vm.reportData.data.groupBy('partnerName');\r\n angular.forEach(vm.group, function (g) {\r\n g.orderTypeGroups = g.items.groupBy(\"orderType\");\r\n angular.forEach(g.orderTypeGroups, function (orderType) {\r\n orderType.InvoiceGroup = orderType.items.groupBy(\"folio\");\r\n });\r\n });\r\n\r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.group, function (group) {\r\n angular.forEach(group.orderTypeGroups, function (g) {\r\n vm.summary.push({\r\n orderType: g.key,\r\n count: g.items.length,\r\n total: (g && g.items && g.items.length) ? g.items.map(function (x) { return x.isCanceled ? 0 : x.total; }).reduce(function (x, y) { return x + y }) : 0\r\n });\r\n });\r\n });\r\n\r\n // Totals Summary\r\n vm.summary.push({\r\n orderType: 'Totales',\r\n count: (vm.summary.length > 0) ? vm.summary.map(function (s) { return s.count }).reduce(function (a, b) { return a + b }) : 0,\r\n total: (vm.summary.length > 0) ? vm.summary.map(function (s) { return s.total }).reduce(function (a, b) { return a + b }) : 0,\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosInactivosController', reportsSociosInactivosController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsSociosInactivosController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosGeneralController', reportsSociosGeneralController);\r\n\r\n /** @ngInject */\r\n function reportsSociosGeneralController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.group = vm.reportData.data.groupBy('brancheName');\r\n vm.totalActive = 0;\r\n vm.totalInactive = 0; \r\n angular.forEach(vm.group, function (g) {\r\n g.totalActive = 0;\r\n g.totalInactive = 0;\r\n g.total = g.items.length;\r\n g.orderTypeGroups = g.items.groupBy(\"membershipTypePeriodo\");\r\n angular.forEach(g.orderTypeGroups, function (otg) {\r\n otg.total = otg.items.length;\r\n otg.totalActive = 0;\r\n otg.totalInactive = 0;\r\n angular.forEach(otg.items, function (items) {\r\n if (items.estatus == 'Activo') {\r\n otg.totalActive++;\r\n }\r\n else {\r\n otg.totalInactive++;\r\n }\r\n });\r\n g.totalActive += otg.totalActive;\r\n g.totalInactive += otg.totalInactive;\r\n });\r\n vm.totalActive += g.totalActive;\r\n vm.totalInactive += g.totalInactive;\r\n vm.total = vm.reportData.data.length;\r\n });\r\n\r\n // // Get Summary\r\n // // Summary\r\n // vm.summary = [];\r\n // angular.forEach(vm.group, function (group) {\r\n // angular.forEach(group.orderTypeGroups, function (g) {\r\n // vm.summary.push({\r\n // orderType: g.key,\r\n // count: g.items.length,\r\n // total: (g && g.items && g.items.length) ? g.items.map(function (x) { return x.isCanceled ? 0 : x.total; }).reduce(function (x, y) { return x + y }) : 0\r\n // });\r\n // });\r\n // });\r\n\r\n // // Totals Summary\r\n // vm.summary.push({\r\n // orderType: 'Totales',\r\n // count: (vm.summary.length > 0) ? vm.summary.map(function (s) { return s.count }).reduce(function (a, b) { return a + b }) : 0,\r\n // total: (vm.summary.length > 0) ? vm.summary.map(function (s) { return s.total }).reduce(function (a, b) { return a + b }) : 0,\r\n // });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosGeneralPagoController', reportsSociosGeneralPagoController);\r\n\r\n /** @ngInject */\r\n function reportsSociosGeneralPagoController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.group = vm.reportData.data.groupBy('brancheName');\r\n vm.total = vm.reportData.data.length;\r\n vm.vigentes = 0;\r\n vm.vencidos = 0;\r\n angular.forEach(vm.group, function (g) {\r\n g.vigentes = 0;\r\n g.vencidos = 0;\r\n g.total = g.items.length;\r\n g.dueName = g.items.groupBy(\"dueName\");\r\n angular.forEach(g.dueName, function (due) {\r\n due.total = due.items.length;\r\n due.vigentes = 0;\r\n due.vencidos = 0;\r\n angular.forEach(due.items, function (items) {\r\n if(items.statusPartners == 'VIGENTE')\r\n {\r\n due.vigentes++;\r\n }\r\n else\r\n {\r\n due.vencidos++;\r\n }\r\n });\r\n g.vigentes = g.vigentes + due.vigentes;\r\n g.vencidos = g.vencidos + due.vencidos;\r\n });\r\n vm.vigentes = vm.vigentes + g.vigentes;\r\n vm.vencidos = vm.vencidos + g.vencidos;\r\n });\r\n }\r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosCupoController', reportsSociosCupoController);\r\n \r\n /** @ngInject */\r\n function reportsSociosCupoController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n // Grouping\r\n vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n angular.forEach(vm.branchGroups , function(branchGroup){\r\n branchGroup.activityGroups = branchGroup.items.groupBy('activityName'); \r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.branchGroups, function(bg){\r\n angular.forEach(bg.activityGroups, function(ag){\r\n vm.summary.push({\r\n branch: bg.key,\r\n activity: ag.key,\r\n quota: ag.items[0].quota,\r\n count: ag.items.length\r\n });\r\n });\r\n });\r\n \r\n // Totals Summary\r\n vm.summary.push({\r\n branch: 'Totales',\r\n periodicity: '',\r\n quota: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.quota }).reduce(function(a,b){ return a + b }) : 0,\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n });\r\n \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSocioConvenio', reportsSocioConvenio);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsSocioConvenio(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n angular.forEach(vm.groups, function (g) {\r\n g.agreements = g.items.groupBy('agreementsName');\r\n });\r\n vm.agreements = vm.reportData.data.groupBy('agreementsName');\r\n }\r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosCargoAutomaticoBancoController', reportsSociosCargoAutomaticoBancoController);\r\n \r\n /** @ngInject */\r\n function reportsSociosCargoAutomaticoBancoController(reportsService, api, authService)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n \r\n // // Grouping\r\n // vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n // angular.forEach(vm.branchGroups , function(bg){\r\n // bg.paymentMethodGroups = bg.items.groupBy('paymentMethodName'); \r\n // angular.forEach(bg.paymentMethodGroups , function(pmg){\r\n // pmg.paymentMethodOptionsGroups = pmg.items.groupBy('paymentMethodOptionName');\r\n // });\r\n // }); \r\n } \r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosCargoAutomaticoController', reportsSociosCargoAutomaticoController);\r\n \r\n /** @ngInject */\r\n function reportsSociosCargoAutomaticoController(reportsService, api, authService)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n \r\n // Grouping\r\n vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n angular.forEach(vm.branchGroups , function(bg){\r\n bg.paymentMethodGroups = bg.items.groupBy('paymentMethodName'); \r\n angular.forEach(bg.paymentMethodGroups , function(pmg){\r\n pmg.paymentMethodOptionsGroups = pmg.items.groupBy('paymentMethodOptionName');\r\n });\r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.branchGroups, function(bg){\r\n angular.forEach(bg.paymentMethodGroups, function(pmg){\r\n angular.forEach(pmg.paymentMethodOptionsGroups, function(pmog){\r\n vm.summary.push({\r\n branch: bg.key,\r\n pmName: pmg.key,\r\n pmoName: pmog.key,\r\n total: (pmog && pmog.items && pmog.items.length > 0)? pmog.items.map(function(x){ return x.amount }).reduce(function(x, y){ return x + y }) : 0,\r\n count: pmog.items.length\r\n });\r\n });\r\n });\r\n });\r\n \r\n // Totals Summary\r\n vm.summary.push({\r\n branch: 'Totales',\r\n pmName: '',\r\n pmoName: '',\r\n total: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.total }).reduce(function(a,b){ return a + b }) : 0,\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n }); \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosByInscriptionDateController', reportsSociosByInscriptionDateController);\r\n\r\n /** @ngInject */\r\n function reportsSociosByInscriptionDateController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchesName');\r\n angular.forEach(vm.groups, function (groups) {\r\n groups.mediaGroup = groups.items.groupBy('medio');\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosBirthdayController', reportsSociosBirthdayController);\r\n\r\n /** @ngInject */\r\n function reportsSociosBirthdayController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.group = vm.reportData.data.groupBy('branchesName');\r\n // angular.forEach(vm.group, function (g) {\r\n // g.total = g.items.length;\r\n // });\r\n }\r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosBetweenDatesController', reportsSociosBetweenDatesController);\r\n \r\n /** @ngInject */\r\n function reportsSociosBetweenDatesController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.dueGroups = vm.reportData.data.groupBy('dueName');\r\n angular.forEach(vm.dueGroups , function(dueGroup){\r\n dueGroup.periodicityGroups = dueGroup.items.groupBy('periodicityName'); \r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.dueGroups, function(dg){\r\n angular.forEach(dg.periodicityGroups, function(pg){\r\n vm.summary.push({\r\n due : dg.key,\r\n periodicity : pg.key,\r\n count : pg.items.length\r\n });\r\n });\r\n });\r\n // Totals Summary\r\n vm.summary.push({\r\n due: 'Socios Totales',\r\n periodicity: '',\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n });\r\n \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSocioAusencia', reportsSocioAusencia);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsSocioAusencia(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosaltasController', reportsSociosaltasController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsSociosaltasController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.groups = vm.reportData.data.groupBy('brancheName');\r\n vm.totalDomicialiado = 0;\r\n vm.totalNoDomicialiado = 0;\r\n angular.forEach(vm.groups, function (g) {\r\n g.totalDomicialiado = 0;\r\n g.totalNoDomicialiado = 0;\r\n g.total = g.items.length;\r\n g.membershipType = g.items.groupBy(\"membershipType\");\r\n angular.forEach(g.membershipType, function (otg) {\r\n otg.total = otg.items.length;\r\n otg.totalDomicialiado = 0;\r\n otg.totalNoDomicialiado = 0;\r\n angular.forEach(otg.items, function (items) {\r\n if (items.domiciliado == 'SI') {\r\n otg.totalDomicialiado++;\r\n }\r\n else {\r\n otg.totalNoDomicialiado++;\r\n }\r\n });\r\n g.totalDomicialiado += otg.totalDomicialiado;\r\n g.totalNoDomicialiado += otg.totalNoDomicialiado;\r\n\r\n otg.periodo = otg.items.groupBy(\"periodo\");\r\n angular.forEach(otg.periodo, function (p) {\r\n p.total = p.items.length;\r\n });\r\n });\r\n vm.totalDomicialiado += g.totalDomicialiado;\r\n vm.totalNoDomicialiado += g.totalNoDomicialiado;\r\n vm.total = vm.reportData.data.length;\r\n\r\n g.periodo = g.items.groupBy(\"periodo\");\r\n angular.forEach(g.periodo, function (p) {\r\n p.total = p.items.length;\r\n });\r\n });\r\n\r\n }\r\n }\r\n})();\n (function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosAgeRangesController', reportsSociosAgeRangesController);\r\n \r\n /** @ngInject */\r\n function reportsSociosAgeRangesController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n \r\n if (vm.reportData.report.parameters[2].value.id == 2 /*DESGLOSADO*/){ \r\n // Grouping\r\n angular.forEach(vm.branchGroups , function(branchGroup){\r\n branchGroup.rangeGroups = branchGroup.items.groupBy('ageRange'); \r\n });\r\n \r\n // Get Summary\r\n // Summary\r\n vm.summary = [];\r\n angular.forEach(vm.branchGroups, function(bg){\r\n angular.forEach(bg.rangeGroups, function(rg){\r\n vm.summary.push({\r\n branch: bg.key,\r\n ageRange: rg.key,\r\n count: rg.items.length\r\n });\r\n });\r\n });\r\n \r\n // Totals Summary\r\n vm.summary.push({\r\n branch: 'Totales',\r\n ageRange: '',\r\n count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n });\r\n }\r\n \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsSociosActivosController', reportsSociosActivosController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsSociosActivosController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.groups = vm.reportData.data.groupBy('brancheName');\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsRentablesController', reportsRentablesController);\r\n\r\n /** @ngInject */\r\n function reportsRentablesController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n angular.forEach(vm.groups, function (group) {\r\n group.total = group.items.length;\r\n group.disponibles = 0;\r\n group.ocupados = 0;\r\n group.vencidos = 0;\r\n group.vigentes = 0;\r\n group.tipoCasillero = group.items.groupBy('tipoCasillero');\r\n angular.forEach(group.tipoCasillero, function (tipoCasillero) {\r\n tipoCasillero.total = tipoCasillero.items.length;\r\n tipoCasillero.ocupados = 0;\r\n tipoCasillero.disponibles = 0;\r\n tipoCasillero.vencidos = 0;\r\n tipoCasillero.vigentes = 0;\r\n angular.forEach(tipoCasillero.items, function (item) {\r\n if (item.vencido == 'Si') {\r\n tipoCasillero.vencidos++;\r\n group.vencidos++;\r\n }\r\n if (item.vencido == 'No') {\r\n tipoCasillero.vigentes++;\r\n group.vigentes++;\r\n }\r\n if (item.namePartner == 'Disponible') {\r\n tipoCasillero.disponibles++;\r\n group.disponibles++;\r\n }\r\n else {\r\n tipoCasillero.ocupados++;\r\n group.ocupados++;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsProspectosGeneralController', reportsProspectosGeneralController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsProspectosGeneralController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n\r\n vm.groups = vm.reportData.data.groupBy('branchesName');\r\n angular.forEach(vm.groups, function (groups) {\r\n groups.sellerGroup = groups.items.groupBy('sellerName');\r\n groups.totalInscritos = 0;\r\n groups.totalNoInscritos = 0\r\n angular.forEach(groups.sellerGroup, function (seller) {\r\n seller.totalInscritos = 0;\r\n seller.totalNoInscritos = 0\r\n angular.forEach(seller.items, function (item) {\r\n if (item.inscrito == 'Si') {\r\n seller.totalInscritos++;\r\n }\r\n else {\r\n seller.totalNoInscritos++;\r\n }\r\n });\r\n groups.totalInscritos = groups.totalInscritos + seller.totalInscritos;\r\n groups.totalNoInscritos = groups.totalNoInscritos + seller.totalNoInscritos;\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.reports\")\r\n .controller(\r\n \"ReportsExportsGeneralIntelisisReciptController\",\r\n reportsExportsGeneralIntelisisReciptController\r\n );\r\n\r\n /** @ngInject */\r\n function reportsExportsGeneralIntelisisReciptController(\r\n reportsService,\r\n api,\r\n authService,\r\n $filter\r\n ) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.report =\r\n api.baseUrl.replace(\"api/\", \"\") + \"Files\\\\Temp\\\\reporteEspecialIR.xlsx\";\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n // vm.branchGroups = vm.reportData.data.groupBy('branchName');\r\n\r\n // if (vm.reportData.report.parameters[2].value.id == 2 /*DESGLOSADO*/){\r\n // // Grouping\r\n // angular.forEach(vm.branchGroups , function(branchGroup){\r\n // branchGroup.rangeGroups = branchGroup.items.groupBy('ageRange');\r\n // });\r\n\r\n // // Get Summary\r\n // // Summary\r\n // vm.summary = [];\r\n // angular.forEach(vm.branchGroups, function(bg){\r\n // angular.forEach(bg.rangeGroups, function(rg){\r\n // vm.summary.push({\r\n // branch: bg.key,\r\n // ageRange: rg.key,\r\n // count: rg.items.length\r\n // });\r\n // });\r\n // });\r\n\r\n // // Totals Summary\r\n // vm.summary.push({\r\n // branch: 'Totales',\r\n // ageRange: '',\r\n // count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n // });\r\n // }\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.reports\")\r\n .controller(\r\n \"ReportsExportsGeneralIntelisisController\",\r\n reportsExportsGeneralIntelisisController\r\n );\r\n\r\n /** @ngInject */\r\n function reportsExportsGeneralIntelisisController(\r\n reportsService,\r\n api,\r\n authService,\r\n $filter\r\n ) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.report =\r\n api.baseUrl.replace(\"api/\", \"\") + \"Files\\\\Temp\\\\reporteEspecialI.xlsx\";\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n // vm.branchGroups = vm.reportData.data.groupBy('branchName');\r\n\r\n // if (vm.reportData.report.parameters[2].value.id == 2 /*DESGLOSADO*/){\r\n // // Grouping\r\n // angular.forEach(vm.branchGroups , function(branchGroup){\r\n // branchGroup.rangeGroups = branchGroup.items.groupBy('ageRange');\r\n // });\r\n\r\n // // Get Summary\r\n // // Summary\r\n // vm.summary = [];\r\n // angular.forEach(vm.branchGroups, function(bg){\r\n // angular.forEach(bg.rangeGroups, function(rg){\r\n // vm.summary.push({\r\n // branch: bg.key,\r\n // ageRange: rg.key,\r\n // count: rg.items.length\r\n // });\r\n // });\r\n // });\r\n\r\n // // Totals Summary\r\n // vm.summary.push({\r\n // branch: 'Totales',\r\n // ageRange: '',\r\n // count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n // });\r\n // }\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsExportsGeneralController', reportsExportsGeneralController);\r\n \r\n /** @ngInject */\r\n function reportsExportsGeneralController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.report = api.baseUrl.replace(\"api/\",\"\") + \"Files\\\\Temp\\\\reporteEspecial.xlsx\";\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n // vm.branchGroups = vm.reportData.data.groupBy('branchName'); \r\n \r\n // if (vm.reportData.report.parameters[2].value.id == 2 /*DESGLOSADO*/){ \r\n // // Grouping\r\n // angular.forEach(vm.branchGroups , function(branchGroup){\r\n // branchGroup.rangeGroups = branchGroup.items.groupBy('ageRange'); \r\n // });\r\n \r\n // // Get Summary\r\n // // Summary\r\n // vm.summary = [];\r\n // angular.forEach(vm.branchGroups, function(bg){\r\n // angular.forEach(bg.rangeGroups, function(rg){\r\n // vm.summary.push({\r\n // branch: bg.key,\r\n // ageRange: rg.key,\r\n // count: rg.items.length\r\n // });\r\n // });\r\n // });\r\n \r\n // // Totals Summary\r\n // vm.summary.push({\r\n // branch: 'Totales',\r\n // ageRange: '',\r\n // count: (vm.summary.length > 0) ? vm.summary.map(function(s){ return s.count }).reduce(function(a,b){ return a + b }) : 0,\r\n // });\r\n // }\r\n \r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsDocumentCancelController', reportsDocumentCancelController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsDocumentCancelController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n vm.ImporteTotal = 0;\r\n vm.IvaTotal = 0;\r\n vm.TotalTotal = 0;\r\n angular.forEach(vm.groups, function (g) {\r\n g.orderTypes = g.items.groupBy('orderType');\r\n g.ImporteTotal = 0;\r\n g.IvaTotal = 0;\r\n g.TotalTotal = 0;\r\n angular.forEach(g.orderTypes, function (orderType) {\r\n orderType.ImporteTotal = 0;\r\n orderType.IvaTotal = 0;\r\n orderType.TotalTotal = 0;\r\n angular.forEach(orderType.items, function (item) {\r\n orderType.ImporteTotal += item.importe;\r\n orderType.IvaTotal += item.iva;\r\n orderType.TotalTotal += item.total;\r\n });\r\n g.ImporteTotal += orderType.ImporteTotal;\r\n g.IvaTotal += orderType.IvaTotal;\r\n g.TotalTotal += orderType.TotalTotal;\r\n });\r\n vm.ImporteTotal += g.ImporteTotal;\r\n vm.IvaTotal += g.IvaTotal;\r\n vm.TotalTotal += g.TotalTotal;\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsOtrosIngresosController', reportsOtrosIngresosController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsOtrosIngresosController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n }\r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsCortesCajaIngresosGeneralesController', reportsCortesCajaIngresosGeneralesController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsCortesCajaIngresosGeneralesController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n if (vm.reportData.report.parameters[2].value.id == 1 /*CONSOLIDADO*/) {\r\n vm.groups = vm.reportData.data.groupBy('branchesName');\r\n angular.forEach(vm.groups, function (groups) {\r\n var totalGroup = 0;\r\n groups.sellerGroup = groups.items.groupBy('sellerName');\r\n angular.forEach(groups.sellerGroup, function (seller) {\r\n var totalSeller = $filter('sum')(seller.items, 'total');\r\n seller.total = totalSeller;\r\n totalGroup += totalSeller;\r\n });\r\n groups.total = totalGroup;\r\n });\r\n }\r\n else { /* DESGLOCE */\r\n vm.groups = vm.reportData.data.groupBy('branchesName');\r\n angular.forEach(vm.groups, function (groups) {\r\n var totalGroup = 0;\r\n groups.sellerGroup = groups.items.groupBy('sellerName');\r\n angular.forEach(groups.sellerGroup, function (seller) {\r\n var totalSeller = $filter('sum')(seller.items, 'total');\r\n seller.total = totalSeller;\r\n totalGroup += totalSeller;\r\n seller.typeIncomeGroup = seller.items.groupBy('tipoIngreso');\r\n angular.forEach(seller.typeIncomeGroup, function (typeIncome) {\r\n var totalTypeIncomeGroup = $filter('sum')(typeIncome.items, 'total');\r\n typeIncome.total = totalTypeIncomeGroup;\r\n });\r\n });\r\n groups.total = totalGroup;\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsCortesCajaCorteProductsController', reportsCortesCajaCorteProductsController);\r\n \r\n /** @ngInject */\r\n function reportsCortesCajaCorteProductsController(reportsService, api, authService, $filter)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n \r\n // Calc Percentages\r\n if (vm.reportData.report.parameters[2].value.id == 1 /*CONSOLIDADO*/){\r\n vm.group = vm.reportData.data.groupBy('branchName'); \r\n }else{\r\n vm.group = vm.reportData.data.groupBy('productName'); \r\n }\r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsNotasCreditoController', reportsNotasCreditoController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsNotasCreditoController(reportsService, api, authService, $filter) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n vm.totalItems = vm.reportData.data.length;\r\n vm.totalItemsNoParciales = 0;\r\n vm.totalItemsParciales = 0;\r\n vm.noParciales = 0;\r\n vm.parciales = 0;\r\n vm.total = 0;\r\n angular.forEach(vm.groups, function (g) {\r\n g.totalItems = g.items.length;\r\n g.totalItemsNoParciales = 0;\r\n g.totalItemsParciales = 0;\r\n g.noParciales = 0;\r\n g.parciales = 0;\r\n g.total = 0;\r\n angular.forEach(g.items, function (items) {\r\n if (items.esTotal == 'Si') {\r\n g.noParciales = g.noParciales + items.ncTotal;\r\n g.totalItemsNoParciales++;\r\n }\r\n else {\r\n g.parciales = g.parciales + items.ncTotal;\r\n g.totalItemsParciales++;\r\n }\r\n g.total = g.total + items.ncTotal;\r\n });\r\n vm.noParciales = vm.noParciales + g.noParciales;\r\n vm.parciales = vm.parciales + g.parciales;\r\n vm.total = vm.total + g.total;\r\n vm.totalItemsNoParciales = vm.totalItemsNoParciales + g.totalItemsNoParciales;\r\n vm.totalItemsParciales = vm.totalItemsParciales + g.totalItemsParciales;\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict'; \r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsCortesCajaCorteFormaPagoController', reportsCortesCajaCorteFormaPagoController);\r\n \r\n /** @ngInject */\r\n function reportsCortesCajaCorteFormaPagoController(reportsService, api, authService, $filter, Excel, $timeout)\r\n {\r\n var vm = this;\r\n \r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.group = vm.reportData.data.groupBy('branchName'); \r\n \r\n // Calc Percentages\r\n if (vm.reportData.report.parameters[3].value.id == 1 /*CONSOLIDADO*/){\r\n var totalAll = $filter('sum')(vm.reportData.data, 'total');\r\n angular.forEach(vm.group, function(g){\r\n var totalGroup = $filter('sum')(g.items, 'total');\r\n angular.forEach(g.items, function(item){\r\n item.branchPercentage = (item.total * 100) / totalGroup;\r\n item.totalPercentage = (item.total * 100) / totalAll;\r\n });\r\n });\r\n }\r\n } \r\n }\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsCorteTPVController', reportsCorteTPVController);\r\n\r\n\r\n\r\n /** @ngInject */\r\n function reportsCorteTPVController(reportsService, api, authService) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n vm.groups = vm.reportData.data.groupBy('branchName');\r\n vm.total = 0;\r\n angular.forEach(vm.groups, function (g) {\r\n g.TPVS = g.items.groupBy('tpvName');\r\n g.total = 0;\r\n angular.forEach(g.TPVS, function (TPV) {\r\n TPV.total = 0;\r\n angular.forEach(TPV.items, function (item) {\r\n if (item.cancelado == 'Falso') {\r\n TPV.total += item.ammount;\r\n }\r\n });\r\n g.total += TPV.total;\r\n });\r\n vm.total += g.total;\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.reports\")\r\n .controller(\r\n \"ReportsCortesCajaCorteCobranzaController\",\r\n reportsCortesCajaCorteCobranzaController\r\n );\r\n\r\n /** @ngInject */\r\n function reportsCortesCajaCorteCobranzaController(\r\n reportsService,\r\n api,\r\n authService,\r\n $filter\r\n ) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + appData.settings.logoFile;\r\n vm.reportData = reportsService.getReportData().data;\r\n\r\n if (vm.reportData.report.parameters[5].value.id == 1 /*CONSOLIDADO*/) {\r\n vm.group = vm.reportData.data.groupBy(\"branchName\");\r\n angular.forEach(vm.group, function (g) {\r\n g.totalFR = 0;\r\n g.totalNC = 0;\r\n g.totalGroup = 0;\r\n g.fecha = g.items.groupBy(\"fecha\");\r\n angular.forEach(g.fecha, function (fecha) {\r\n fecha.totalFR = 0;\r\n fecha.totalNC = 0;\r\n angular.forEach(fecha.items, function (item) {\r\n if (item.orderType == \"NC\") {\r\n fecha.totalNC = fecha.totalNC + item.total;\r\n } else {\r\n fecha.totalFR = fecha.totalFR + item.total;\r\n }\r\n });\r\n g.totalNC = fecha.totalNC + g.totalNC;\r\n g.totalFR = fecha.totalFR + g.totalFR;\r\n });\r\n g.totalGroup =\r\n vm.reportData.report.parameters[6].value.id == 1\r\n ? g.totalFR - g.totalNC\r\n : g.totalFR;\r\n angular.forEach(g.fecha, function (fecha) {\r\n fecha.branchPercentage =\r\n ((vm.reportData.report.parameters[6].value.id == 1\r\n ? fecha.totalFR - fecha.totalNC\r\n : fecha.totalFR) *\r\n 100) /\r\n g.totalGroup;\r\n });\r\n });\r\n } else {\r\n /* DESGLOCE */\r\n // Summary\r\n vm.summary = [];\r\n vm.subtotal = 0;\r\n vm.discountAmmount = 0;\r\n vm.iva = 0;\r\n vm.total = 0;\r\n vm.group = vm.reportData.data.groupBy(\"branchName\");\r\n angular.forEach(vm.group, function (g) {\r\n var receipts = [];\r\n var receiptsSubtotal = [];\r\n var receiptsDiscount = [];\r\n var receiptsIva = [];\r\n var invoices = [];\r\n var invoicesSubtotal = [];\r\n var invoicesDiscount = [];\r\n var invoicesIva = [];\r\n var ncs = [];\r\n var ncsSubtotal = [];\r\n var ncsIva = [];\r\n receipts = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n receiptsSubtotal = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.subtotal;\r\n });\r\n receiptsDiscount = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.discountAmmount;\r\n });\r\n receiptsIva = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.iva;\r\n });\r\n invoices = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n invoicesSubtotal = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.subtotal;\r\n });\r\n invoicesDiscount = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.discountAmmount;\r\n });\r\n invoicesIva = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.iva;\r\n });\r\n ncs = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"NC\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n ncsSubtotal = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"NC\";\r\n })\r\n .map(function (m) {\r\n return m.subtotal;\r\n });\r\n ncsIva = g.items\r\n .filter(function (group) {\r\n return group.orderType == \"NC\";\r\n })\r\n .map(function (m) {\r\n return m.iva;\r\n });\r\n vm.summary.push({\r\n branch: g.key,\r\n receiptTotal:\r\n receipts.length > 0\r\n ? receipts.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n receiptDiscountTotal:\r\n receiptsDiscount.length > 0\r\n ? receiptsDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n invoiceTotal:\r\n invoices.length > 0\r\n ? invoices.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n invoicesDiscountTotal:\r\n invoicesDiscount.length > 0\r\n ? invoicesDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n ncTotal:\r\n ncs.length > 0\r\n ? ncs.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n });\r\n var receip =\r\n receiptsSubtotal.length > 0\r\n ? receiptsSubtotal.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n var invoice =\r\n invoicesSubtotal.length > 0\r\n ? invoicesSubtotal.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n var invoiceDiscont =\r\n invoicesDiscount.length > 0\r\n ? invoicesDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n var orderDiscont =\r\n receiptsDiscount.length > 0\r\n ? receiptsDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n var nc =\r\n vm.reportData.report.parameters[6].value.id == 1\r\n ? ncsSubtotal.length > 0\r\n ? ncsSubtotal.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0\r\n : 0;\r\n vm.subtotal = vm.subtotal + receip + invoice - nc;\r\n vm.discountAmmount =\r\n vm.discountAmmount + invoiceDiscont + orderDiscont;\r\n receip =\r\n receiptsIva.length > 0\r\n ? receiptsIva.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n invoice =\r\n invoicesIva.length > 0\r\n ? invoicesIva.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0;\r\n nc =\r\n vm.reportData.report.parameters[6].value.id == 1\r\n ? ncsIva.length > 0\r\n ? ncsIva.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0\r\n : 0;\r\n vm.iva = vm.iva + receip + invoice - nc;\r\n vm.total = vm.subtotal + vm.iva - vm.discountAmmount;\r\n g.groupType = g.items.groupBy(\"orderType\");\r\n angular.forEach(g.groupType, function (groupType) {\r\n groupType.groupDate = groupType.items.groupBy(\"fecha\");\r\n });\r\n });\r\n // Totals Summary\r\n var allReceipts = vm.reportData.data\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n var allReceiptsDiscount = vm.reportData.data\r\n .filter(function (group) {\r\n return group.orderType == \"RECIBO\";\r\n })\r\n .map(function (m) {\r\n return m.discountAmmount;\r\n });\r\n var allInvoices = vm.reportData.data\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n var allInvoicesDiscount = vm.reportData.data\r\n .filter(function (group) {\r\n return group.orderType == \"FACTURA\";\r\n })\r\n .map(function (m) {\r\n return m.discountAmmount;\r\n });\r\n var allNc = vm.reportData.data\r\n .filter(function (group) {\r\n return group.orderType == \"NC\";\r\n })\r\n .map(function (m) {\r\n return m.total;\r\n });\r\n\r\n vm.summary.push({\r\n branch: \"Total\",\r\n receiptTotal:\r\n allReceipts.length > 0\r\n ? allReceipts.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n receiptDiscountTotal:\r\n allReceiptsDiscount.length > 0\r\n ? allReceiptsDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n invoiceTotal:\r\n allInvoices.length > 0\r\n ? allInvoices.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n invoicesDiscountTotal:\r\n allInvoicesDiscount.length > 0\r\n ? allInvoicesDiscount.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n ncTotal:\r\n allNc.length > 0\r\n ? allNc.reduce(function (a, b) {\r\n return a + b;\r\n })\r\n : 0,\r\n });\r\n }\r\n }\r\n }\r\n})();\r\n\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.partners.prospects', [ \r\n 'ui.calendar' \r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.partners.prospects', {\r\n url : '/prospects',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/prospects/prospects.html',\r\n controller : 'PartnersProspectsController as vm'\r\n }\r\n },\r\n resolve : {\r\n Prospects: function (apiResolver)\r\n {\r\n return apiResolver.resolve('partners.prospects@query');\r\n }\r\n }\r\n })\r\n .state('app.partners.prospects.calendar', {\r\n url : '/calendar',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/prospectCalendar/prospectCalendar.html',\r\n controller : 'PartnersProspectCalendarController as vm'\r\n }\r\n },\r\n resolve : {\r\n Seller: function ()\r\n {\r\n return { id: 0 }\r\n },\r\n Prospect: function ()\r\n {\r\n return { id: 0 }\r\n }\r\n }\r\n })\r\n .state('app.partners.prospects.calendar.employee', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/prospectCalendar/prospectCalendar.html',\r\n controller : 'PartnersProspectCalendarController as vm'\r\n }\r\n },\r\n resolve : {\r\n Seller: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.employees@get', { id : $stateParams.id });\r\n },\r\n Prospect: function ()\r\n {\r\n return {id: 0 };\r\n }\r\n },\r\n })\r\n .state('app.partners.prospects.calendar.employee-prospect', {\r\n url : '/:id/:prospectId',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/partners/views/prospectCalendar/prospectCalendar.html',\r\n controller : 'PartnersProspectCalendarController as vm'\r\n }\r\n },\r\n resolve : {\r\n Seller: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.employees@get', { id : $stateParams.id });\r\n },\r\n Prospect: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('partners.prospects@get', { id : $stateParams.prospectId });\r\n }\r\n },\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.partners.prospects', {\r\n title: 'Prospectos',\r\n shortcuticon : 'icon-account-multiple-outline',\r\n state: 'app.partners.prospects'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.prospects')\r\n .controller('PartnersProspectsProspectDialogController', partnersProspectsProspectDialogController);\r\n\r\n /** @ngInject */\r\n function partnersProspectsProspectDialogController($mdDialog, msg, Callback, Prospect, api, authService)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept; \r\n vm.close = close;\r\n ////////\r\n\r\n function init(){\r\n vm.title = \"Agregar prospecto\";\r\n vm.prospect = Prospect;\r\n vm.callback = Callback;\r\n\r\n // View \r\n if (vm.prospect){\r\n if (vm.prospect.isSignedUp)\r\n vm.title = \"Ver Prospecto\"; \r\n else\r\n vm.title = \"Editar Prospecto\";\r\n }else{\r\n vm.prospect = {\r\n id: 0\r\n };\r\n }\r\n\r\n var appData = authService.getAppData(); \r\n api.catalogs.employees.query(function(response){\r\n vm.sellers = response.filter(function(e){ return e.employeeTypeId == 1 /*Seller*/ ;}) \r\n if (!appData.user.userType.isShowAllProspects){\r\n vm.sellers = vm.sellers.filter(function(e){ return e.userId && e.userId == appData.user.id });\r\n }\r\n });\r\n vm.media = api.catalogs.media.query();\r\n }\r\n\r\n vm.sending = false;\r\n function accept(){ \r\n vm.sending = true;\r\n api.partners.prospects.save(vm.prospect, function(response){ \r\n msg.success(\"Prospecto guardado correctamente\");\r\n vm.sending = false; \r\n vm.callback();\r\n close();\r\n }, function(error){\r\n vm.sending = false;\r\n });\r\n }\r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n \r\n 'use strict';\r\n \r\n angular\r\n .module('app.partners')\r\n .controller('PartnersProspectCalendarEventController', partnerProspectCallendarEventController);\r\n\r\n /** @ngInject */\r\n function partnerProspectCallendarEventController($mdDialog, api, msg, DialogData, Seller, Prospects, Prospect)\r\n {\r\n var vm = this;\r\n \r\n // Data\r\n vm.dialogData = DialogData;\r\n vm.selectedSeller = Seller;\r\n\r\n // Methods\r\n vm.saveEvent = saveEvent;\r\n vm.closeDialog = closeDialog;\r\n\r\n init();\r\n\r\n //////////\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init(){\r\n vm.calendars = [];\r\n vm.prospects = Prospects;\r\n\r\n \r\n // Da por echo que las fechas son \"moment\" \r\n vm.calendarEvent = angular.extend({}, vm.dialogData.calendarEvent, {\r\n id : vm.dialogData.calendarEvent ? vm.dialogData.calendarEvent.id : 0, \r\n start : new Date(vm.dialogData.start.format(\"MM/DD/YYYY HH:mm:ss\")),\r\n end : new Date(vm.dialogData.end.format(\"MM/DD/YYYY HH:mm:ss\")),\r\n startTime: vm.dialogData.start.format(\"HH:mm\"),\r\n endTime : vm.dialogData.end.format(\"HH:mm\"),\r\n }); \r\n \r\n switch (vm.dialogData.type){\r\n case \"add\":\r\n vm.dialogTitle = 'Agregar nueva cita';\r\n vm.calendarEvent.prospect = Prospect;\r\n break;\r\n case \"edit\":\r\n vm.dialogTitle = 'Editar cita: ' + vm.dialogData.calendarEvent.title;\r\n vm.selectedSeller = vm.dialogData.calendarEvent.employee;\r\n vm.calendarEvent.prospect = vm.prospects.filter(function(p){ return p.id == vm.dialogData.calendarEvent.prospectId })[0];\r\n break;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Save the event\r\n */\r\n function saveEvent(){ \r\n api.catalogs.employeeCalendarEvents.save({\r\n id : vm.calendarEvent.id,\r\n employeeId : vm.selectedSeller.id,\r\n prospectId : vm.calendarEvent.prospect.id,\r\n title : vm.calendarEvent.prospect.completeName,\r\n start : moment (moment(vm.calendarEvent.start).format(\"YYYY-MM-DD\") + \" \" + vm.calendarEvent.startTime, \"YYYY-MM-DD hhmm\").format('MM-DD-YYYY HH:mm'),\r\n end : moment (moment(vm.calendarEvent.end).format(\"YYYY-MM-DD\") + \" \" + vm.calendarEvent.endTime, \"YYYY-MM-DD hhmm\").format('MM-DD-YYYY HH:mm'),\r\n notes : vm.calendarEvent.notes,\r\n visible : true,\r\n insertDate : vm.calendarEvent.insertDate,\r\n insertUserId: vm.calendarEvent.insertUserId\r\n }, function(response){ \r\n msg.success(\"Cita guardada correctamente.\");\r\n $mdDialog.hide(response);\r\n });\r\n }\r\n\r\n /**\r\n * Close the dialog\r\n */\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n\r\n})();\r\n\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerKardexController', partnersPartnerKardexController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerKardexController(api, $scope, authService, Partner) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n vm.appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\", \"\") + vm.appData.settings.logoFile;\r\n vm.parentScope = $scope.$parent.$parent.vm;\r\n vm.partner = Partner;\r\n vm.date = new Date();\r\n if (vm.partner.partnerAutomaticPayment == null) {\r\n vm.partner.domiciliado = \"No\";\r\n }\r\n else {\r\n vm.partner.domiciliado = \"Si\";\r\n vm.partner.MontoDomiciliado = vm.partner.partnerAutomaticPayment.ammount;\r\n vm.partner.FechaExpiracion = vm.partner.partnerAutomaticPayment.expirationDate;\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnerContractController', partnersPartnerContractController);\r\n\r\n /** @ngInject */ \r\n function partnersPartnerContractController($mdDialog, Contract, msg, authService, api)\r\n {\r\n var vm = this;\r\n\r\n //// Methods\r\n vm.showSignature = showSignature;\r\n vm.save = save;\r\n vm.sendByEmail = sendByEmail;\r\n vm.getLastData = getLastData;\r\n vm.settings = authService.getAppData().settings;\r\n vm.logoSource = \"data:image/jpeg;base64, \" + vm.settings.logoBase64String;\r\n ////////////\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.data = Contract;\r\n if (vm.data.signatureBase64 && vm.data.signatureBase64 != '')\r\n vm.signatureSrc = \"data:image/png;base64, \" + vm.data.signatureBase64;\r\n vm.sendingEmail = false;\r\n }\r\n \r\n function save(){\r\n api.partners.contracts.save(vm.data, function(response){\r\n vm.data.id = response.id;\r\n vm.data.insertDate = response.insertDate; \r\n msg.success(\"Contrato guardado correctamente\"); \r\n });\r\n }\r\n\r\n function showSignature(ev){\r\n var controllerName = vm.settings.useSignatureMouse \r\n ? 'PartnersPartnerDialogSignatureMouseController' \r\n : 'PartnersPartnerDialogSignatureController';\r\n var templateUrl = vm.settings.useSignatureMouse \r\n ? 'app/main/partners/views/partners/partner/dialogs/dialog-signature-mouse/dialog-signature-mouse.html'\r\n : 'app/main/partners/views/partners/partner/dialogs/dialog-signature/dialog-signature.html';\r\n\r\n $mdDialog.show({\r\n controller : controllerName,\r\n controllerAs : 'vm',\r\n templateUrl : templateUrl,\r\n targetEvent : ev,\r\n escapeToClose : false,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Callback : showSignatureCallback\r\n }\r\n }); \r\n } \r\n\r\n function showSignatureCallback(base64Sign){\r\n vm.data.signatureBase64 = base64Sign;\r\n vm.signatureSrc = \"data:image/png;base64, \" + base64Sign;\r\n save();\r\n }\r\n\r\n function sendByEmail(){\r\n msg.prompt(\"Correo Electrónico\", \"Ingrese correo electrónico\", function(email){\r\n if (!email || email == ''){\r\n msg.error(\"Correo electrónico inválido. verifique\");\r\n return;\r\n }\r\n\r\n vm.sendingEmail = true;\r\n api.partners.emails.save({\r\n type : 1,\r\n entityId: vm.data.partnerId,\r\n emails: email\r\n }, function(_){\r\n msg.success(\"Se ha enviado el correo electronico correctamente!\");\r\n vm.sendingEmail = false;\r\n }, function(_){\r\n vm.sendingEmail = false;\r\n });\r\n\r\n }, null, null, vm.data.email);\r\n }\r\n\r\n function getLastData(){\r\n msg.confirm(\"Esta seguro que quieres sobreescribir los datos del contrato?\", function(){\r\n api.partners.contracts.getContract({\r\n id: vm.data.partnerId,\r\n isLastData : true\r\n }, function(response){\r\n vm.data = response;\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnersInfoPassPrintController', partnersPartnersInfoPassPrintController);\r\n\r\n /** @ngInject */\r\n function partnersPartnersInfoPassPrintController($scope, api, Item, authService, msg)\r\n {\r\n var vm = this;\r\n \r\n vm.item = Item;\r\n vm.imageSaving = true;\r\n vm.emailSending = false;\r\n \r\n // Logo Image by URL\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\");\r\n vm.settings = authService.getAppData().settings;\r\n // vm.logoUrl = vm.picturesUrl + vm.settings.logoFile;\r\n\r\n // Logo Image by Base64\r\n vm.logoSource = \"data:image/jpeg;base64, \" + vm.settings.logoBase64String;\r\n \r\n // Generate BarCode\r\n JsBarcode(\"#barcode\", vm.item.pass.number, {\r\n displayValue: true\r\n });\r\n\r\n $scope.$on('$viewContentLoaded', function() {\r\n // Send to Api for Save in PDF\r\n vm.imageSaving = true; \r\n setTimeout(sendToApi, 1500);\r\n });\r\n\r\n\r\n // Save PDF\r\n vm.pdfDownload = function(){\r\n html2canvas(document.getElementById(\"pass-card\")).then(function(canvas){\r\n var data = canvas.toDataURL();\r\n var docDefinition = {\r\n content: [{\r\n image: data,\r\n width: 500,\r\n }]\r\n };\r\n vm.tst = \"data:image/jpeg;base64, \" + data;\r\n // pdfMake.createPdf(docDefinition).download(vm.item.pass.number + \".pdf\"); \r\n });\r\n }\r\n\r\n vm.sendMail = function(){\r\n msg.prompt(\"Correo Electronico\", \"Ingrese correo electronico\", function(email){\r\n if (!email || email == ''){\r\n msg.error(\"Correo electronico inválido. verifique\");\r\n return;\r\n }\r\n vm.emailSending = true;\r\n api.partners.passesFiles.sendMail({\r\n partnerPassId: vm.item.id,\r\n email: email\r\n }, function(response){\r\n msg.success(\"Correo Electronico enviado correctamente.\");\r\n vm.emailSending = false;\r\n }, function(errorResponse){\r\n vm.emailSending = false;\r\n });\r\n\r\n }, null, null, vm.item.email);\r\n }\r\n\r\n function sendToApi(){\r\n vm.imageSaving = true;\r\n html2canvas(document.querySelector(\"#pass-card\")).then(function(canvas){\r\n var data = canvas.toDataURL();\r\n\r\n // Send to API Service\r\n api.partners.passesFiles.save({\r\n passId : vm.item.id, \r\n base64String : data\r\n }, function(response){\r\n console.log(\"PDF Guardado correctamente\");\r\n vm.imageSaving = false;\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.partners.partners\")\r\n .controller(\r\n \"PartnersPartnerCredentialController\",\r\n partnersPartnerCredentialController\r\n );\r\n\r\n /** @ngInject */\r\n function partnersPartnerCredentialController(\r\n $scope,\r\n api,\r\n Partner,\r\n authService,\r\n msg\r\n ) {\r\n var vm = this;\r\n vm.partner = Partner;\r\n\r\n var qrcode = new QRCode(document.getElementById(\"qrcode\"));\r\n qrcode.makeCode(\"\" + vm.partner.credentialCode);\r\n\r\n // Logo Image by URL\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\", \"\");\r\n vm.appData = authService.getAppData();\r\n vm.logoSource =\r\n \"data:image/jpeg;base64, \" + vm.appData.settings.logoBase64String;\r\n\r\n vm.sendMail = function () {\r\n msg.prompt(\r\n \"Correo Electronico\",\r\n \"Ingrese correo electronico\",\r\n function (email) {\r\n if (!email || email == \"\") {\r\n msg.error(\"Correo electronico inválido. verifique\");\r\n return;\r\n }\r\n vm.emailSending = true;\r\n api.partners.credentialFiles.sendMail(\r\n {\r\n PartnerCredentialId: vm.partner.id,\r\n email: email,\r\n QR: document.getElementById(\"qrcode\").outerHTML,\r\n },\r\n function (response) {\r\n msg.success(\"Correo Electronico enviado correctamente.\");\r\n vm.emailSending = false;\r\n },\r\n function (errorResponse) {\r\n vm.emailSending = false;\r\n }\r\n );\r\n },\r\n null,\r\n null,\r\n vm.partner.email\r\n );\r\n };\r\n }\r\n})();\r\n\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.security.userTypes', [\r\n // 3rd Party Dependencies\r\n 'xeditable'\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.security.userTypes', {\r\n url : '/usertypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/userTypes/userTypes/userTypes.html',\r\n controller : 'SecurityUserTypesController as vm'\r\n }\r\n },\r\n resolve : {\r\n UserTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('security.userTypes@query');\r\n }\r\n }\r\n })\r\n .state('app.security.userTypes.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/userTypes/userType/userType.html',\r\n controller : 'SecurityUserTypeController as vm'\r\n }\r\n },\r\n resolve : {\r\n UserType: function ()\r\n {\r\n return { id: 0, name: '', active: true, access: [] };\r\n },\r\n },\r\n })\r\n .state('app.security.userTypes.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/userTypes/userType/userType.html',\r\n controller : 'SecurityUserTypeController as vm'\r\n }\r\n },\r\n resolve : {\r\n UserType: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('security.userTypes@get', { id: $stateParams.id });\r\n },\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.security.userTypes', {\r\n title: 'Tipos de Usuarios',\r\n state: 'app.security.userTypes'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.security.userTypes')\r\n .controller('InvoicesPlannedProductsDialogAddController', invoicesPlannedProductsDialogAddController);\r\n\r\n /** @ngInject */\r\n function invoicesPlannedProductsDialogAddController($mdDialog, api, msg, Callback, CONST_DATATABLES)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n vm.partnerChange = partnerChange;\r\n vm.productChange = productChange;\r\n //////////\r\n \r\n function _init(){\r\n vm.callback = Callback;\r\n vm.minExpiration = new Date();\r\n\r\n vm.addTypes= [\r\n { id: 1, name: 'Por Socio', ariaLabel: 'ByPartner' },\r\n { id: 2, name: 'Por Cuota', ariaLabel: 'ByDue' },\r\n { id: 3, name: 'Por Tipo de Socio', ariaLabel: 'ByPartnerType' },\r\n { id: 4, name: 'Solo Titulares', ariaLabel: 'ByOnlyTitulars' },\r\n { id: 5, name: 'Solo Familiares', ariaLabel: 'ByOnlyFamiliars' },\r\n { id: 6, name: 'Todos', ariaLabel: 'ByAll' },\r\n ];\r\n\r\n vm.item = {\r\n id : 0,\r\n product : null,\r\n addType : 1,\r\n expirationDate : new Date(),\r\n partnerId : 0\r\n };\r\n\r\n api.inventory.products.query(function(response){\r\n vm.inventory = response.filter(function(i){ return i.quantity > 0 || !i.product.isStockRequired });\r\n });\r\n // api.partners.partners.query(function(response){\r\n // vm.titulares = response.filter(function(p){ return !p.isFamily; });\r\n // });\r\n api.partners.partners.getByFilters({\r\n keyword: 'dummy', \r\n pageNumber: 0, \r\n pageSize: 0 \r\n }, function(response){\r\n vm.titulares = response.filter(function(p){ return !p.isFamily; });\r\n });\r\n vm.partnerTypes = api.catalogs.partnerTypes.query();\r\n vm.dues = api.catalogs.dues.query();\r\n vm.periodicities = api.catalogs.periodicities.query();\r\n vm.partners = []; \r\n } \r\n\r\n function save(){\r\n // Save planned Product\r\n vm.saving = true;\r\n if( !vm.item.partnerId)\r\n vm.item.partnerId = 0;\r\n api.invoices.plannedProducts.save(vm.item, function(response){\r\n vm.saving = false;\r\n msg.success(\"Cargo(s) agredado(s) correctamente.\");\r\n vm.callback();\r\n closeDialog();\r\n }, function(){\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function partnerChange(){\r\n vm.item.partnerId = \"\";\r\n vm.partners = [];\r\n api.partners.partners.getByFamily({\r\n id : 0,\r\n familyId: vm.partner.familyId\r\n },function(response){\r\n vm.partners = response;\r\n });\r\n }\r\n\r\n function productChange(){\r\n vm.item.product = vm.product.product;\r\n vm.item.productId = vm.product.product.id;\r\n vm.item.price = vm.product.price;\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.products', [\r\n 'ngSanitize'\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider, msApiProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.products', {\r\n url : '/products',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/products/products/products.html',\r\n controller : 'CatalogProductsController as vm'\r\n }\r\n },\r\n // resolve: {\r\n // Products: function (apiResolver)\r\n // {\r\n // return apiResolver.resolve('catalogs.products@query');\r\n // }\r\n // }\r\n })\r\n .state('app.catalogs.products.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/products/product/product.html',\r\n controller : 'CatalogProductController as vm'\r\n }\r\n },\r\n resolve : {\r\n Product: function ()\r\n {\r\n return { id: 0, name: '', active: true, productTypeId: null, cost: 0, price: 0, isGenerateCoupons: false, isStockRequired: true };\r\n },\r\n ProductTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.productTypes@query');\r\n },\r\n Accounts: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accounts@query');\r\n }\r\n },\r\n })\r\n .state('app.catalogs.products.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/products/product/product.html',\r\n controller : 'CatalogProductController as vm'\r\n }\r\n },\r\n resolve : {\r\n Product: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.products@get', { id : $stateParams.id });\r\n },\r\n ProductTypes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.productTypes@query');\r\n },\r\n Accounts: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accounts@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n \r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.products', {\r\n title: 'Productos',\r\n shortcuticon : 'icon-basket', \r\n state: 'app.catalogs.products'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.products')\r\n .controller('ProductsMassiveDialogController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($mdDialog, msg, api, $sce, Refresh, msApi)\r\n {\r\n var vm = this;\r\n \r\n // Data\r\n _init();\r\n\r\n // Methods\r\n vm.close = close;\r\n vm.changeType = changeType;\r\n vm.checkAllChange = checkAllChange;\r\n vm.accept = accept;\r\n ////////\r\n\r\n function _init(){\r\n vm.product = {};\r\n vm.productTypes = api.catalogs.productTypes.query();\r\n vm.loadingTemplate = false;\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function changeType(){\r\n vm.loadingTemplate = true;\r\n api.catalogs.massiveTemplates.get({\r\n productTypeId: vm.product.productTypeId,\r\n }, function(response){ \r\n vm.properties = response.properties;\r\n \r\n angular.forEach(vm.properties, function(prop) {\r\n prop.isAllChecked = false;\r\n prop.addToDescription = true;\r\n });\r\n\r\n vm.html = $sce.trustAsHtml(response.html);\r\n vm.loadingTemplate = false;\r\n });\r\n }\r\n\r\n function checkAllChange(property){\r\n angular.forEach(property.options, function(opt) {\r\n opt.selected = property.isAllChecked;\r\n });\r\n\r\n }\r\n\r\n function accept(){\r\n msg.confirm(\"La carga comenzará y no podra detenerse, desea continuar?\", function(){\r\n vm.product.properties = vm.properties;\r\n api.catalogs.massiveProducts.save(vm.product, function(response){\r\n msg.success(\"Carga realizada correctamente.\");\r\n Refresh();\r\n close();\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.passes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.passes', {\r\n url : '/passes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/passes/passes.html',\r\n controller : 'CatalogsPassesController as vm'\r\n }\r\n },\r\n resolve : {\r\n Passes: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.passes@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.passes', {\r\n title: 'Pases y Credenciales',\r\n state: 'app.catalogs.passes'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.passes')\r\n .controller('CatalogsPassesMassiveRemoveDialogController', CatalogsPassesMassiveRemoveDialogController);\r\n\r\n /** @ngInject */\r\n function CatalogsPassesMassiveRemoveDialogController($mdDialog, Callback, api, msg, ChangeStatus)\r\n {\r\n var vm = this; \r\n\r\n _init();\r\n\r\n // Methods\r\n vm.massiveRemove = massiveRemove;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n }\r\n \r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function massiveRemove(){\r\n var initNumber = parseInt(vm.initNumber);\r\n var endNumber = parseInt(vm.endNumber);\r\n if (endNumber < initNumber){\r\n msg.error(\"El número final no puede ser menor al número inicial.\")\r\n return;\r\n }\r\n\r\n msg.confirm(\"Esta seguro que desea borrar \" + (endNumber - initNumber + 1) + \" pase(s)?\", function(){\r\n ChangeStatus(\"Borrando...\");\r\n api.catalogs.passes.massiveDelete({ initNumber: initNumber, endNumber: endNumber }, function(response){\r\n if (response){\r\n msg.success(\"Pases borrados correctamente!\");\r\n vm.callback();\r\n \r\n ChangeStatus(\"Pases borrados correctamente!\");\r\n closeDialog();\r\n }\r\n }, function(errorResponse){\r\n ChangeStatus(\"Ocurrio un error.\"); \r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.passes')\r\n .controller('CatalogsPassesMassiveAddDialogController', CatalogsPassesMassiveAddDialogController);\r\n\r\n /** @ngInject */\r\n function CatalogsPassesMassiveAddDialogController($mdDialog, Callback, LastNumber, api, msg, ChangeStatus)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n function _init(){\r\n vm.lastNumber = LastNumber;\r\n vm.callback = Callback;\r\n vm.passTypes = api.catalogs.passTypes.query();\r\n vm.pass = {\r\n initNumber: vm.lastNumber + 1\r\n };\r\n }\r\n \r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function save(){\r\n var initNumber = parseInt(vm.pass.initNumber);\r\n var endNumber = parseInt(vm.pass.endNumber);\r\n if (endNumber < initNumber){\r\n msg.error(\"El número final no puede ser menor al número inicial.\")\r\n return;\r\n }\r\n\r\n msg.confirm(\"Esta seguro que desea agregar \" + (endNumber - initNumber + 1) + \" pase(s)?\", function(){\r\n vm.pass.initNumber = initNumber;\r\n vm.pass.endNumber = endNumber;\r\n ChangeStatus(\"Guardando...\");\r\n api.catalogs.passes.save(vm.pass, function(response){\r\n vm.callback();\r\n closeDialog();\r\n ChangeStatus(\"Pases guardados correctamente!\");\r\n }, function(errorResponse){\r\n ChangeStatus(\"Ocurrio un error.\"); \r\n });\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.duesRules', [ \r\n ])\r\n .config(duesRulesConfig);\r\n\r\n /** @ngInject */\r\n function duesRulesConfig($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.duesRules', {\r\n url : '/duesRules',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/duesRules/duesRules.html',\r\n controller : 'CatalogsDuesRulesController as vm'\r\n }\r\n },\r\n resolve : {\r\n DuesRules: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.duesRules@query');\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.duesRules', {\r\n title: 'Reglas de cuotas',\r\n state: 'app.catalogs.duesRules'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.duesRules')\r\n .controller('CatalogsDuesRulesDetailDialogController', catalogsDuesRulesDetailDialogController);\r\n\r\n /** @ngInject */\r\n function catalogsDuesRulesDetailDialogController($mdDialog, Callback, api, msg, DueRule)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.close = close;\r\n vm.dueChange = dueChange;\r\n //////////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n vm.genders = api.catalogs.genders.query();\r\n vm.actions = [\r\n { key: 'NOTIFY', name: 'Notificar' },\r\n { key: 'CHANGE', name: 'Cambiar' },\r\n ]\r\n vm.item = {\r\n id: 0,\r\n action: ''\r\n // branch: { id: 0, name: 'dummy' },\r\n };\r\n\r\n api.catalogs.dues.query(function(response){\r\n vm.dues = response;\r\n if (DueRule){\r\n vm.item = angular.copy(DueRule);\r\n dueChange();\r\n }\r\n });\r\n }\r\n \r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function dueChange(){\r\n vm.newDues = vm.dues.filter(function(d){ return d.id != vm.item.dueCurrentId });\r\n }\r\n\r\n function save(){\r\n api.catalogs.duesRules.save(vm.item, function(response){\r\n msg.success(\"Regla guardada correctamente!\");\r\n close();\r\n vm.callback();\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.accionistas.acciones', [ \r\n ])\r\n .config(accionistasAccionesConfig);\r\n\r\n /** @ngInject */\r\n function accionistasAccionesConfig($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.accionistas.acciones', {\r\n url : '/acciones',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/accionistas/views/acciones/acciones.html',\r\n controller : 'AccionistasAccionesController as vm'\r\n }\r\n },\r\n resolve : {\r\n Acciones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.acciones@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.accionistas.acciones', {\r\n title: 'Acciones',\r\n shortcuticon : 'icon-cash-multiple', \r\n state: 'app.accionistas.acciones'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.accionistas.acciones')\r\n .controller('AccionistasAccionesMassiveAddDialogController', accionistasAccionesMassiveAddDialogController);\r\n\r\n /** @ngInject */\r\n function accionistasAccionesMassiveAddDialogController($mdDialog, Callback, api, msg, ChangeStatus)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n vm.item = {\r\n date: new Date(),\r\n };\r\n }\r\n \r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function save(){\r\n var initNumber = parseInt(vm.item.initNumber);\r\n var endNumber = parseInt(vm.item.endNumber);\r\n if (endNumber < initNumber){\r\n msg.error(\"El número final no puede ser menor al número inicial.\")\r\n return;\r\n }\r\n\r\n msg.confirm(\"Esta seguro que desea agregar \" + (endNumber - initNumber + 1) + \" accion(es)?\", function(){\r\n vm.item.initNumber = initNumber;\r\n vm.item.endNumber = endNumber;\r\n ChangeStatus(\"Guardando...\");\r\n api.accionistas.acciones.save(vm.item, function(response){\r\n vm.callback();\r\n closeDialog();\r\n ChangeStatus(\"Acciones guardadas correctamente!\");\r\n }, function(errorResponse){\r\n ChangeStatus(\"Ocurrio un error al guardar.\"); \r\n });\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.security', \r\n [\r\n 'datatables',\r\n \r\n // Security Catalogs\r\n 'app.security.branches', \r\n 'app.security.users',\r\n 'app.security.userTypes'\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msApiProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.security', {\r\n abstract: true,\r\n url : '/security'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.security', {\r\n title : 'Seguridad',\r\n icon : 'icon-lock',\r\n weight: 3\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.security')\r\n .controller('SecurityUserController', securityUserController);\r\n\r\n /** @ngInject */\r\n function securityUserController($state, User, UserTypes, api, msg, Branches)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n// //////////\r\n\r\n init();\r\n\r\n function init(){\r\n vm.item = User;\r\n vm.userTypes = UserTypes;\r\n vm.branches = Branches;\r\n\r\n angular.forEach(vm.branches, function(branch){\r\n if (vm.item && vm.item.branches)\r\n branch.selected = vm.item.branches.filter(function(s){ return s.id == branch.id }).length > 0;\r\n });\r\n\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go('app.security.users');\r\n }\r\n\r\n function save(){\r\n vm.item.branches = [];\r\n angular.forEach(vm.branches, function(branch){\r\n if (branch.selected == true)\r\n vm.item.branches.push(branch);\r\n });\r\n\r\n api.security.users.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Usuario guardado correctamente.');\r\n if (vm.item.id != 0)\r\n $state.go('app.security.users');\r\n else\r\n vm.item = response;\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.security')\r\n .controller('SecurityUsersController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($state, api, msg)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n function init(){\r\n api.security.users.query(function(response) { return vm.users = response }); \r\n vm.dtInstance = {};\r\n vm.dtOptions = {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 3,\r\n filterable : false,\r\n sortable : false\r\n },\r\n {\r\n // Target the actions column\r\n targets : 4,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n };\r\n }\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n vm.resetPassword = resetPassword;\r\n //////////\r\n\r\n function gotoAdd()\r\n {\r\n $state.go('app.security.users.add');\r\n }\r\n\r\n function gotoDetail(id){\r\n $state.go('app.security.users.detail', { id: id });\r\n }\r\n\r\n function resetPassword(id){\r\n msg.confirm(\"Esta seguro que desea reestablecer la contraseña de este usuario?\", function(){\r\n api.security.users.change({\r\n changeType: 1 /* reset */,\r\n userId: id\r\n }, function(response){\r\n msg.success(\"Contraseña reestablecida correctamente\");\r\n })\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.security.userTypes')\r\n .controller('SecurityUserTypesController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($scope, UserTypes, $mdDialog, $document, msg, api, CONST_DATATABLES, $state)\r\n {\r\n\r\n var vm = this;\r\n \r\n _init();\r\n\r\n // Methods\r\n vm.deleteItem = deleteItem;\r\n vm.add = add;\r\n vm.edit = edit;\r\n //////////\r\n\r\n function _init(){\r\n vm.items = UserTypes;\r\n vm.dtUserTypesInstance = {};\r\n vm.dtUserTypesOptions = angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the status column\r\n targets : 2,\r\n filterable : false,\r\n sortable : false\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n });\r\n\r\n vm.items = api.security.userTypes.query();\r\n }\r\n\r\n function add(){\r\n $state.go('app.security.userTypes.add'); \r\n }\r\n\r\n function edit(item)\r\n {\r\n $state.go('app.security.userTypes.detail', { id: item.id });\r\n }\r\n\r\n function deleteItem(item)\r\n {\r\n msg.confirm('Estas seguro que deseas borrar este elemento?', function(){\r\n api.security.userTypes.delete({ id: item.id }, function(response){\r\n if (response){\r\n api.security.userTypes.query(function(response){\r\n vm.items = response;\r\n msg.success('Tipo borrado correctamente.');\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.security.userTypes')\r\n .controller('SecurityUserTypeController', securityUserTypeController);\r\n\r\n /** @ngInject */\r\n function securityUserTypeController(msUtils, api, msg, $state, UserType)\r\n {\r\n var vm = this;\r\n\r\n // Methods\r\n vm.save = save;\r\n vm.gotoReturn = gotoReturn;\r\n vm.selectAll = selectAll;\r\n //////////\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.item = angular.copy(UserType);\r\n if (!vm.item )\r\n {\r\n vm.item = {\r\n id : 0,\r\n name : '',\r\n active : true\r\n };\r\n }\r\n\r\n // Get Access \r\n var treeViewAccessData = []; \r\n vm.access = []; \r\n api.security.access.query(function(response){\r\n vm.originalAccess = response;\r\n angular.forEach(response.filter(function(a) { return a.isMenu; }), function(access){\r\n var menu = {\r\n id: access.id,\r\n label: access.name,\r\n children: [] \r\n };\r\n\r\n angular.forEach(response.filter(function(a) { return a.fatherAccessId == access.id }), function(subAcceso){\r\n var submenu = {\r\n id: subAcceso.id,\r\n label: subAcceso.name,\r\n selected: vm.item.access.filter(function(a) { return a.id == subAcceso.id }).length > 0,\r\n children: []\r\n };\r\n \r\n angular.forEach(response.filter(function(a) { return a.fatherAccessId == submenu.id }), function(control){\r\n submenu.children.push({\r\n id : control.id,\r\n label : control.name,\r\n selected: vm.item.access.filter(function(a) { return a.id == control.id }).length > 0,\r\n });\r\n });\r\n\r\n menu.children.push(submenu);\r\n });\r\n treeViewAccessData.push(menu);\r\n });\r\n angular.forEach(treeViewAccessData, function(menu){\r\n menu.selected = \r\n response.filter(function(x){ return x.fatherAccessId == menu.id }).length == menu.children.filter(function(x){ return x.selected }).length;\r\n });\r\n\r\n vm.access = treeViewAccessData; \r\n });\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go(\"app.security.userTypes\"); \r\n }\r\n\r\n function save(){\r\n // Access\r\n vm.item.access = [];\r\n angular.forEach(vm.access, function(menu){\r\n // Submenus\r\n angular.forEach(menu.children, function(subMenu){\r\n if (subMenu.selected == true){\r\n // Add Submenu Access\r\n var access = vm.originalAccess.filter(function(a){ return a.id == subMenu.id });\r\n if (access.length > 0){\r\n vm.item.access.push({\r\n id: access[0].id,\r\n name: access[0].name\r\n });\r\n }\r\n\r\n // Controls\r\n angular.forEach(subMenu.children, function(control){\r\n if (control.selected == true){\r\n //Add control access\r\n var accessControl = vm.originalAccess.filter(function(a){ return a.id == control.id });\r\n if (accessControl.length > 0)\r\n vm.item.access.push({\r\n id: accessControl[0].id,\r\n name: accessControl[0].name\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Save Item\r\n api.security.userTypes.save(vm.item, function(response){\r\n if (response){\r\n msg.success(\"Tipo de usuario guardado correctamente.\")\r\n $state.go(\"app.security.userTypes\");\r\n }\r\n });\r\n }\r\n\r\n function selectAll(menu){\r\n angular.forEach(menu.children, function(submenu){\r\n submenu.selected = menu.selected;\r\n angular.forEach(submenu.children, function(control){\r\n control.selected = menu.selected;\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.security')\r\n .controller('SecurityBranchesController', securityBranchesController);\r\n\r\n /** @ngInject */\r\n function securityBranchesController($state, api, CONST_DATATABLES)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n function init(){\r\n api.catalogs.branches.query(function(response) { return vm.branches = response }); \r\n vm.dtBranchInstance = {};\r\n vm.dtBranchOptions = angular.copy($.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 5,\r\n sortable : false\r\n },\r\n {\r\n // Target the actions column\r\n targets : 4,\r\n responsivePriority: 1,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function (){\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n }));\r\n }\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n //////////\r\n\r\n function gotoAdd()\r\n {\r\n $state.go('app.security.branches.add');\r\n }\r\n\r\n function gotoDetail(id)\r\n {\r\n $state.go('app.security.branches.detail', { id: id });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.security')\r\n .controller('SecurityBranchController', securityBranchController);\r\n\r\n /** @ngInject */\r\n function securityBranchController($state, Branch, api, msg, Warehouses, files)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n vm.uploadFile = uploadFile;\r\n vm.uploadCerFile = uploadCerFile;\r\n vm.uploadKeyFile = uploadKeyFile;\r\n vm.uploadXsltFile = uploadXsltFile;\r\n vm.uploadPfxFile = uploadPfxFile;\r\n vm.zipCodeChange = zipCodeChange;\r\n\r\n// //////////\r\n\r\n init();\r\n\r\n function init(){\r\n vm.item = Branch; \r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\");\r\n \r\n\r\n vm.discountTypes = [\r\n { id: 1, name: \"Descuento sobre descuento\" },\r\n { id: 2, name: \"Descuento sobre total\" },\r\n ];\r\n \r\n vm.discountOrders = [\r\n { id: 1, name: \"Beca -> Convenio -> Ausencia\" },\r\n { id: 2, name: \"Beca -> Ausencia -> Convenio\" },\r\n { id: 3, name: \"Ausencia -> Convenio -> Beca\" },\r\n { id: 4, name: \"Ausencia -> Beca -> Convenio\" },\r\n { id: 5, name: \"Convenio -> Beca -> Ausencia\" },\r\n { id: 6, name: \"Convenio -> Ausencia -> Beca\" },\r\n ];\r\n\r\n vm.warehouses = Warehouses;\r\n\r\n // Sat Security\r\n vm.satTaxes = api.sat.taxes.query();\r\n vm.satTaxTypes = api.sat.taxTypes.query();\r\n vm.satRegimenFiscales = api.sat.regimenFiscales.query();\r\n vm.satCoins = api.sat.coins.query();\r\n vm.satInvoiceTypes = api.sat.invoiceTypes.query();\r\n vm.satPaymentMethods = api.sat.paymentMethods.query();\r\n\r\n vm.invoicingModes = [\r\n { name : \"Prueba\", value: 0 },\r\n { name : \"Produccción\", value: 1 },\r\n ]; \r\n\r\n if (vm.item.setting.satZipCode){\r\n vm.zipCode = vm.item.setting.satZipCode.code;\r\n }\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go('app.security.branches');\r\n }\r\n\r\n function save(){\r\n if (vm.item.setting.satProduct && vm.item.setting.satUnit ){\r\n vm.item.setting.satProductId = vm.item.setting.satProduct.id;\r\n vm.item.setting.satUnitId = vm.item.setting.satUnit.id;\r\n }\r\n\r\n api.catalogs.branches.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Sucursal guardada correctamente.');\r\n if (vm.item.id == 0){\r\n vm.item = response;\r\n }else\r\n $state.go('app.security.branches');\r\n }\r\n });\r\n }\r\n\r\n function uploadFile(){\r\n files.uploadImage(\"inputFile\", \"settings\", [\r\n {\r\n key: \"branchId\",\r\n value: vm.item.id\r\n }\r\n ],\r\n function(response){\r\n msg.success(\"Imagen guardada correctamente\"); \r\n vm.item.setting.logoFile = response.fileName;\r\n });\r\n }\r\n\r\n function uploadCerFile(){\r\n files.uploadImage(\"inputFileCertificate\", \"settings-certificate\", [\r\n {\r\n key: \"branchId\",\r\n value: vm.item.id\r\n }\r\n ],\r\n function(response){\r\n msg.success(\"Certificado guardado correctamente.\"); \r\n vm.item.setting.certificateFilePath = response.fileName;\r\n vm.item.setting.certificateFileName = $(\"#inputFileCertificate\").get(0).files[0].name;\r\n vm.certificateEdit = false; \r\n });\r\n }\r\n\r\n function uploadKeyFile(){\r\n files.uploadImage(\"inputFileKey\", \"settings-key\", [\r\n {\r\n key: \"branchId\",\r\n value: vm.item.id\r\n }\r\n ],\r\n function(response){\r\n msg.success(\"Llave guardada correctamente.\"); \r\n vm.item.setting.keyFilePath = response.fileName;\r\n vm.item.setting.keyFileName = $(\"#inputFileKey\").get(0).files[0].name;\r\n vm.keyEdit = false; \r\n });\r\n }\r\n\r\n function uploadXsltFile(){\r\n files.uploadImage(\"inputFileXslt\", \"settings-xslt\", [\r\n {\r\n key: \"branchId\",\r\n value: vm.item.id\r\n }\r\n ],\r\n function(response){\r\n msg.success(\"Cadena original guardada correctamente.\"); \r\n vm.item.setting.satTransformationFilePath = response.fileName;\r\n vm.xsltEdit = false; \r\n });\r\n }\r\n\r\n function uploadPfxFile(){\r\n files.uploadImage(\"inputFilePfx\", \"settings-pfx\", [\r\n {\r\n key: \"branchId\",\r\n value: vm.item.id\r\n }\r\n ],\r\n function(response){\r\n msg.success(\"Archivo PFX guardado correctamente.\"); \r\n vm.item.setting.pfxFilePath = response.fileName;\r\n vm.pfxEdit = false; \r\n });\r\n }\r\n\r\n function zipCodeChange(){ \r\n vm.validatingZipCode = true;\r\n vm.item.setting.satZipCode = null;\r\n vm.item.setting.satZipCodeId = 0;\r\n api.sat.zipCodes.get({ zipcode: vm.zipCode }, function(response){\r\n if (response.id){\r\n vm.item.setting.satZipCode = response;\r\n vm.item.setting.satZipCodeId = response.id;\r\n }\r\n vm.validatingZipCode = false;\r\n }, function(response){\r\n vm.validatingZipCode = false; \r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnersController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($state, api, CONST_DATATABLES, msg, $mdDialog)\r\n {\r\n var vm = this;\r\n vm.keyword = \"\";\r\n vm.innerKeyword = \"\";\r\n vm.showFamiliars = false;\r\n vm.total = 0;\r\n vm.pageIndex = 1;\r\n vm.pageSize = 10;\r\n vm.pageTotal = 0;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n vm.changePayedDatesShow = changePayedDatesShow;\r\n vm.sendToOrder = sendToOrder;\r\n vm.showClubAccess = showClubAccess;\r\n vm.getPartners = getPartners;\r\n vm.nextPage = nextPage;\r\n vm.previousPage = previousPage;\r\n vm.search = search;\r\n //////////\r\n\r\n function getPartners(){\r\n api.partners.partners.getByFiltersPaginated({\r\n keyword: vm.innerKeyword !== \"\" ? vm.innerKeyword : \"empty\",\r\n pageNumber: vm.pageIndex,\r\n pageSize: vm.pageSize,\r\n showFamiliars: vm.showFamiliars\r\n }, function(response) { \r\n vm.partners = response.items;\r\n vm.total = response.total;\r\n vm.pageTotal = Math.ceil(vm.total / vm.pageSize);\r\n \r\n vm.selectedPartner = (vm.partners.length > 0) \r\n ? vm.partners[0]\r\n : null\r\n }); \r\n }\r\n \r\n function nextPage(){\r\n vm.pageIndex++;\r\n getPartners();\r\n }\r\n \r\n function previousPage(){\r\n vm.pageIndex--;\r\n getPartners();\r\n }\r\n\r\n function search(){\r\n vm.innerKeyword = vm.keyword;\r\n vm.pageIndex = 1;\r\n vm.pageSize = 10;\r\n getPartners();\r\n }\r\n\r\n function _init(){\r\n vm.familiarsFilter = false;\r\n getPartners();\r\n vm.dtPartnersInstance = {};\r\n vm.dtPartnersOptions = angular.copy(\r\n angular.extend(\r\n CONST_DATATABLES.OPTIONS, \r\n {\r\n dom : 'rt',\r\n columnDefs : [\r\n {\r\n // ID\r\n targets : 0,\r\n responsivePriority: 1,\r\n filterable : false,\r\n searchable : false,\r\n sortable : false,\r\n type : 'num'\r\n },\r\n {\r\n // INSCRIPTION DATE\r\n targets : 3,\r\n responsivePriority: 2,\r\n searchable : false,\r\n sortable : false\r\n },\r\n {\r\n // PAYED DATE\r\n targets : 4,\r\n responsivePriority: 3,\r\n searchable : false,\r\n sortable : false \r\n }\r\n\r\n ],\r\n pagingType : 'simple',\r\n scrollY : 'auto',\r\n responsive : true, \r\n filter : false,\r\n order : [[0, 'asc']] \r\n }\r\n )\r\n );\r\n\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n } \r\n\r\n function gotoAdd(){\r\n $state.go('app.partners.partners.add');\r\n }\r\n\r\n function gotoDetail(item){\r\n var titularId = 0;\r\n if (item.isFamily){\r\n titularId = item.parentPartnerId;\r\n }else\r\n titularId = item.id;\r\n $state.go('app.partners.partners.detail', { id: titularId });\r\n }\r\n\r\n function changePayedDatesShow(ev){\r\n if (!vm.selectedPartner){\r\n msg.error(\"Seleccione Socio para continuar.\");\r\n return;\r\n }\r\n\r\n if (vm.selectedPartner.isFamily)\r\n vm.selectedPartner = vm.partners.filter(function(p){ return !p.isFamily && p.id == vm.selectedPartner.parentPartnerId })[0];\r\n\r\n $mdDialog.show({\r\n controller : 'PartnersChangePayedDatesController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partners/dialogs/dialog-changePayedDates/dialog-changePayedDates.html',\r\n targetEvent : ev,\r\n locals : {\r\n Titular : vm.selectedPartner,\r\n Callback : _changePayedDates\r\n }\r\n });\r\n }\r\n \r\n function _changePayedDates(){\r\n getPartners();\r\n }\r\n\r\n function sendToOrder(item){\r\n var titularId = 0;\r\n if (item.isFamily){\r\n titularId = item.parentPartnerId;\r\n }else\r\n titularId = item.id;\r\n $state.go(\"app.invoices.add.partner\", { id: titularId })\r\n } \r\n\r\n function showClubAccess(ev, partner){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerDialogAccessController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-clubAccess/dialog-clubAccess.html',\r\n targetEvent : ev,\r\n escapeToClose: false,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : partner\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersPartnerController', partnersPartnerController);\r\n\r\n /** @ngInject */\r\n function partnersPartnerController($state, $mdDialog, $document, Partner, api, msg, Dues, Media, Countries, Agreements, Professions, Genders, ClubAccess, Employees, CalculationModes, utils, PartnerTypes, AccessTimeZones, Branches, settingsService, Acciones, authService)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n vm.birthdateChange = birthdateChange;\r\n\r\n vm.dueChange = dueChange;\r\n vm.showAutomaticPayment = showAutomaticPayment;\r\n vm.sendToOrder = sendToOrder;\r\n\r\n vm.showClubAccess = showClubAccess;\r\n vm.showAcciones = showAcciones;\r\n vm.searchAccion = searchAccion;\r\n vm.partnerTypeChange = partnerTypeChange;\r\n\r\n vm.sendToContract = sendToContract;\r\n vm.sendToKardex = sendToKardex;\r\n// //////////\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n vm.item = Partner;\r\n vm.partnerTypes = PartnerTypes;\r\n vm.dues = Dues;\r\n vm.media = Media;\r\n vm.countries = Countries;\r\n vm.agreements = Agreements;\r\n vm.professions = Professions;\r\n vm.genders = Genders;\r\n vm.clubAccess = ClubAccess;\r\n vm.employees = Employees.filter(function(e) { return e.employeeTypeId == 1 /*Seller*/; })\r\n vm.calculationModes = CalculationModes;\r\n vm.accessTimeZones = AccessTimeZones;\r\n vm.branches = Branches;\r\n vm.acciones = Acciones.filter(function(a) { return a.accionistaId != null && a.partnerId == null });\r\n vm.settings = authService.getAppData().settings; \r\n \r\n if (vm.item.accionId != 0)\r\n vm.accion = vm.item.accion;\r\n\r\n vm.minBirthdate = moment(vm.today).subtract(100, 'years').toDate();\r\n vm.maxBirthdate = moment(vm.today).subtract(1, 'years').toDate();\r\n \r\n vm.birthdate = vm.item.birthdate; \r\n birthdateChange();\r\n\r\n var agreements = angular.copy(vm.item.agreements);\r\n vm.item.agreements = [];\r\n angular.forEach(agreements, function(x) {\r\n vm.item.agreements.push(vm.agreements.filter(function(a){ return a.id == x.id })[0]); \r\n });\r\n \r\n var branches = angular.copy(vm.item.branches);\r\n vm.item.branches = [];\r\n angular.forEach(branches, function(ca) {\r\n vm.item.branches.push(vm.branches.filter(function(branch){ return branch.id == ca.id })[0]); \r\n });\r\n\r\n vm.saving = false;\r\n\r\n var duePeriodicityId = vm.item.duePeriodicityId;\r\n vm.duePrices = [];\r\n dueChange(function(){\r\n vm.item.duePeriodicityId = duePeriodicityId;\r\n });\r\n\r\n if (vm.item.prospectId && vm.item.id == 0){\r\n api.partners.prospects.get({id : vm.item.prospectId}, function(prospect){\r\n vm.item = angular.extend(vm.item, prospect, { id: 0, prospectId: prospect.id });\r\n });\r\n }\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go('app.partners.partners');\r\n }\r\n\r\n function save(){\r\n var isNew = vm.item.id == 0;\r\n vm.saving = true;\r\n api.partners.partners.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Socio guardado correctamente.');\r\n vm.item = response;\r\n \r\n var branches = angular.copy(response.branches);\r\n vm.item.branches = [];\r\n angular.forEach(branches, function(ca) {\r\n vm.item.branches.push(vm.branches.filter(function(branch){ return branch.id == ca.id })[0]); \r\n });\r\n \r\n var agreements = angular.copy(response.agreements);\r\n vm.item.agreements = [];\r\n angular.forEach(agreements, function(x) {\r\n vm.item.agreements.push(vm.agreements.filter(function(a){ return a.id == x.id })[0]); \r\n });\r\n\r\n if (isNew)\r\n showClubAccess(null);\r\n }\r\n\r\n vm.saving = false;\r\n }, function(){\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n function birthdateChange(){\r\n if (moment(vm.birthdate) > moment()){\r\n msg.error(\"Fecha invalida!\");\r\n return;\r\n }\r\n\r\n vm.item.birthdate = vm.birthdate;\r\n\r\n var birthdate = moment(vm.birthdate); \r\n vm.item.age = utils.calculateAge(birthdate.date(), birthdate.month(), birthdate.year()) \r\n } \r\n\r\n function dueChange(success){\r\n if (!vm.item || !vm.item.dueId || vm.item.dueId == 0)\r\n return;\r\n \r\n api.catalogs.duePrices.get({ \r\n dueId : vm.item.dueId,\r\n searchType : 2,\r\n searchId : vm.item.dueId\r\n }, function(response){\r\n if (response.length == 0){\r\n msg.error(\"No hay precios vigentes configurados para esa cuota\");\r\n vm.duePrices = [];\r\n }else{\r\n vm.duePrices = response;\r\n }\r\n vm.item.duePeriodicityId = null;\r\n if (success)\r\n success();\r\n });\r\n }\r\n\r\n function showAutomaticPayment(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerAutomaticPaymentController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-automaticPayment/dialog-automaticPayment.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Partner : vm.item\r\n }\r\n });\r\n }\r\n\r\n function sendToOrder(id){\r\n $state.go(\"app.invoices.add.partner\", { id: id })\r\n }\r\n\r\n function showClubAccess(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerDialogAccessController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-clubAccess/dialog-clubAccess.html',\r\n targetEvent : ev,\r\n escapeToClose: false,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : vm.item\r\n }\r\n });\r\n }\r\n\r\n function showAcciones(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerDialogAccionesController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/partner/dialogs/dialog-acciones/dialog-acciones.html',\r\n targetEvent : ev,\r\n escapeToClose : true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Acciones : vm.acciones,\r\n Callback : _accionesCallback\r\n }\r\n });\r\n }\r\n\r\n function _accionesCallback(item){\r\n var accion = angular.copy(item);\r\n vm.item.accion = accion;\r\n vm.item.accionId = accion.id;\r\n vm.accion = vm.item.accion;\r\n if (vm.item.partnerTypeId == 2 /*Propietario*/){\r\n vm.item.fatherLastname = accion.accionista.fatherLastname;\r\n vm.item.motherLastname = accion.accionista.motherLastname;\r\n vm.item.name = accion.accionista.name;\r\n }\r\n }\r\n\r\n function searchAccion(){\r\n if (!vm.accion || !vm.accion.serie || vm.accion.serie == '' || !vm.accion.number || vm.accion.number == '')\r\n return;\r\n\r\n var accionesFilter = vm.acciones.filter(function(a){ return a.serie.toUpperCase() == vm.accion.serie.toUpperCase() && a.number == vm.accion.number });\r\n if (accionesFilter.length > 0)\r\n _accionesCallback(accionesFilter[0]);\r\n else\r\n msg.error(\"Accion no encontrada\");\r\n }\r\n\r\n function partnerTypeChange(){\r\n switch(vm.item.partnerTypeId){\r\n case 1:\r\n vm.item.accionId = null;\r\n vm.item.accion = null;\r\n vm.accion = null;\r\n break;\r\n case 2:\r\n if(vm.item.accionId != null && vm.item.accion){\r\n vm.item.fatherLastname = vm.item.accion.accionista.fatherLastname;\r\n vm.item.motherLastname = vm.item.accion.accionista.motherLastname;\r\n vm.item.name = vm.item.accion.accionista.name;\r\n }\r\n break\r\n }\r\n }\r\n\r\n function sendToContract(partnerId){ \r\n if (!vm.settings.contractLayout || vm.settings.contractLayout === ''){\r\n $state.go('app.partners.partners.contract', { id: partnerId });\r\n }else{\r\n $state.go('app.partners.partners.contract.' + vm.settings.contractLayout, { id: partnerId });\r\n }\r\n }\r\n\r\n function sendToKardex(partnerId){\r\n $state.go('app.partners.partners.kardex', { id: partnerId });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners.partners')\r\n .controller('PartnersPartnersInfoController', partnersPartnersInfoController);\r\n\r\n /** @ngInject */\r\n function partnersPartnersInfoController($state, api, msg, $mdDialog)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.search = search;\r\n vm.partnerSelect = partnerSelect;\r\n vm.familiarSelected = familiarSelected;\r\n vm.goToPartnerDetails = goToPartnerDetails;\r\n vm.goToPartnerDgoToPartnerCredentialetails = goToPartnerDgoToPartnerCredentialetails;\r\n vm.showMessages = showMessages;\r\n vm.showPasses = showPasses;\r\n vm.showCredential = showCredential;\r\n //////////\r\n\r\n function _init(){\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n vm.filtersOptions = [\r\n { id: 1, name: \"Familia\" },\r\n { id: 2, name: \"Nombre\" },\r\n ];\r\n vm.filterType = 1;\r\n vm.titulars = [];\r\n vm.familiars = [];\r\n vm.keyword = '';\r\n }\r\n\r\n function search(){\r\n if (vm.keyword == '')\r\n {\r\n msg.error(\"Ingrese texto de busqueda\");\r\n return; \r\n }else if (vm.filterType == 1 && isNaN(vm.keyword)){\r\n msg.error(\"Se esperaba un número\");\r\n return; \r\n }\r\n\r\n vm.titulars = [];\r\n vm.familiars = [];\r\n \r\n api.partners.info.get({\r\n filterType : vm.filterType,\r\n keyword : vm.keyword\r\n },function(response){\r\n vm.searchResult = response; \r\n if(vm.searchResult.length > 0)\r\n partnerSelect(vm.searchResult[0]);\r\n else\r\n msg.error(\"No se encontraron resultados\"); \r\n });\r\n }\r\n\r\n function partnerSelect(item){\r\n if (vm.selectedPartner == item)\r\n return;\r\n vm.selectedPartner = item;\r\n var parentPartnerId = 0;\r\n if (item.isFamily){\r\n parentPartnerId = item.parentPartnerId;\r\n }else{\r\n parentPartnerId = item.id; \r\n }\r\n \r\n // Find All Family partners\r\n api.partners.info.get({\r\n filterType : 1,\r\n keyword : item.sequentialNumber\r\n },function(response){\r\n vm.familiars = response;\r\n if (vm.familiars.length > 0)\r\n familiarSelected(vm.familiars[0]);\r\n });\r\n }\r\n \r\n function familiarSelected(item){\r\n if (vm.selectedFamiliar == item)\r\n return;\r\n vm.selectedFamiliar = item;\r\n if (vm.selectedFamiliar.isFamily)\r\n vm.selectedTitular = vm.familiars.filter(function(f){ return f.id == vm.selectedFamiliar.parentPartnerId })[0];\r\n else\r\n vm.selectedTitular = vm.selectedFamiliar;\r\n \r\n vm.inscriptionDate = new Date(vm.selectedFamiliar.inscriptionDate);\r\n vm.payedDate = new Date(vm.selectedFamiliar.payedDate);\r\n vm.birthdate = new Date(vm.selectedFamiliar.birthdate);\r\n }\r\n\r\n function goToPartnerDetails(){\r\n $state.go('app.partners.partners.detail', { id: vm.selectedTitular.id });\r\n }\r\n\r\n function goToPartnerDgoToPartnerCredentialetails(){\r\n $state.go('app.partners.info.credential', { id: vm.selectedFamiliar.id });\r\n }\r\n\r\n function showMessages(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerInfoDialogMessagesController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/info/dialogs/dialog-messages/dialog-messages.html',\r\n targetEvent : ev,\r\n escapeToClose : true,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : vm.selectedFamiliar\r\n }\r\n });\r\n }\r\n\r\n function showPasses(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerInfoDialogPassesController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/info/dialogs/dialog-passes/dialog-passes.html',\r\n targetEvent : ev,\r\n escapeToClose : true,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : vm.selectedFamiliar\r\n }\r\n });\r\n }\r\n\r\n function showCredential(ev){\r\n $mdDialog.show({\r\n controller : 'PartnersPartnerInfoDialogCredentialController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/partners/info/dialogs/dialog-credential/dialog-credential.html',\r\n targetEvent : ev,\r\n escapeToClose : true,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Partner : vm.selectedFamiliar\r\n }\r\n });\r\n }\r\n }\r\n})(); \n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.orders\")\r\n .controller(\r\n \"InvoicesOrdersReceiptController\",\r\n InvoicesOrdersReceiptController\r\n );\r\n\r\n /** @ngInject */\r\n function InvoicesOrdersReceiptController($mdDialog, api, msg, Order, $state) {\r\n var vm = this;\r\n vm.order = Order;\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\", \"\");\r\n vm.settings = vm.order.branch.setting;\r\n\r\n vm.copies = [];\r\n if (vm.settings.receiptCopies == 0) {\r\n msg.error(\r\n \"El numero de copias del recibo es 0, verifique en las configuraciones de la sucursal.\"\r\n );\r\n return;\r\n } else {\r\n for (var i = 0; i < vm.settings.receiptCopies; i++) {\r\n vm.copies.push({ number: i });\r\n }\r\n }\r\n\r\n vm.invoiceGenerating = false;\r\n vm.generateInvoice = function (ev) {\r\n vm.invoiceGenerating = true;\r\n api.invoices.generate.save(\r\n [vm.order],\r\n function (response) {\r\n vm.invoice = response;\r\n vm.invoiceGenerating = false;\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/orders/dialogs/dialog-invoice/dialog-invoice.html\",\r\n targetEvent: ev,\r\n clickOutsideToClose: false,\r\n escapeToClose: false,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrdersInvoiceDialogController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Invoice: response,\r\n Callback: function (invoice) {\r\n $state.go(\"app.invoices.receipt\", { id: invoice.id });\r\n },\r\n },\r\n });\r\n },\r\n function (response) {\r\n vm.invoiceGenerating = false;\r\n }\r\n );\r\n };\r\n\r\n vm.chageSize = function () {\r\n var divLetter = document.getElementById(\"InvoiceLetter\");\r\n var divSeven = document.getElementById(\"InvoiceSeven\");\r\n var btnChangeSize = document.getElementById(\"btnChangeSize\");\r\n if (divLetter.classList.contains(\"invisible\")) {\r\n divLetter.classList.remove(\"invisible\");\r\n divSeven.classList.add(\"invisible\");\r\n btnChangeSize.classList.remove(\"icon-arrow-expand\");\r\n btnChangeSize.classList.add(\"icon-arrow-collapse\");\r\n } else {\r\n divLetter.classList.add(\"invisible\");\r\n divSeven.classList.remove(\"invisible\");\r\n btnChangeSize.classList.add(\"icon-arrow-expand\");\r\n btnChangeSize.classList.remove(\"icon-arrow-collapse\");\r\n }\r\n };\r\n }\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.orders\")\r\n .controller(\"InvoicesOrdersController\", InvoicesOrdersController);\r\n\r\n function InvoicesOrdersController(\r\n api,\r\n CONST_DATATABLES,\r\n msg,\r\n $state,\r\n $mdDialog\r\n ) {\r\n var vm = this;\r\n\r\n /// Methods\r\n vm.cancelOrder = cancelOrder;\r\n vm.getData = getData;\r\n vm.receipt = receipt;\r\n vm.coupon = coupon;\r\n vm.showOrderDetail = showOrderDetail;\r\n vm.select = select;\r\n vm.selectAll = selectAll;\r\n vm.generateInvoice = generateInvoice;\r\n vm.showInvoiceDetail = showInvoiceDetail;\r\n vm.showInvoice = showInvoice;\r\n vm.cancelInvoice = cancelInvoice;\r\n /////\r\n\r\n _init();\r\n\r\n function _init() {\r\n var now = moment();\r\n var from = moment([now.year(), now.month()]);\r\n var to = moment(from).endOf(\"month\");\r\n\r\n vm.from = from.toDate();\r\n vm.to = to.toDate();\r\n\r\n getData();\r\n }\r\n\r\n function _getOrders() {\r\n api.invoices.orders.getByPeriod(\r\n {\r\n from: moment(vm.from).format(\"DD-MM-YYYY\"),\r\n to: moment(vm.to).format(\"DD-MM-YYYY\"),\r\n },\r\n function (response) {\r\n vm.orders = response;\r\n _getPartnersFromOrders();\r\n }\r\n );\r\n }\r\n\r\n function _getPartnersFromOrders() {\r\n vm.partnersInOrders = [];\r\n angular.forEach(vm.orders, function (order) {\r\n if (\r\n vm.partnersInOrders.filter(function (p) {\r\n return p.id == order.partner.id;\r\n }).length == 0\r\n ) {\r\n vm.partnersInOrders.push(order.partner);\r\n }\r\n });\r\n }\r\n\r\n function getData() {\r\n _getOrders();\r\n _getInvoices();\r\n }\r\n\r\n function receipt(id) {\r\n $state.go(\"app.invoices.orders.receipt\", { id: id });\r\n }\r\n\r\n function coupon(id) {\r\n $state.go(\"app.invoices.orders.coupon\", { id: id, id2: 0, id3: 0 });\r\n }\r\n\r\n function cancelOrder(item) {\r\n msg.confirm(\r\n \"Esta seguro que desea cancelar el recibo: \" + item.folio + \"?\",\r\n function () {\r\n api.invoices.orders.cancel({ id: item.id }, function (response) {\r\n msg.success(\"Recibo cancelado correctamente.\");\r\n _getOrders();\r\n });\r\n }\r\n );\r\n }\r\n\r\n function showOrderDetail(ev, id) {\r\n $mdDialog.show({\r\n controller: \"InvoicesOrdersOrderDialogController\",\r\n controllerAs: \"vm\",\r\n templateUrl:\r\n \"app/main/invoices/views/orders/orders/dialogs/dialog-order/dialog-order.html\",\r\n targetEvent: ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals: {\r\n OrderId: id,\r\n },\r\n });\r\n }\r\n\r\n vm.ordersSelected = [];\r\n function select(item) {\r\n if (item.invoiceId || item.isCanceled) return;\r\n\r\n if (vm.ordersSelected.indexOf(item) == -1) {\r\n item.selected = true;\r\n vm.ordersSelected.push(item);\r\n } else {\r\n vm.ordersSelected.splice(vm.ordersSelected.indexOf(item), 1);\r\n item.selected = false;\r\n }\r\n }\r\n\r\n vm.selectAllFlag = false;\r\n function selectAll() {\r\n vm.ordersSelected = [];\r\n angular.forEach(\r\n vm.ordersFiltered.filter(function (o) {\r\n return !o.invoiceId;\r\n }),\r\n function (order) {\r\n if (vm.selectAllFlag == true) {\r\n order.selected = true;\r\n vm.ordersSelected.push(order);\r\n } else order.selected = false;\r\n }\r\n );\r\n }\r\n\r\n vm.invoiceGenerating = false;\r\n function generateInvoice(ev) {\r\n vm.invoiceGenerating = true;\r\n api.invoices.generate.save(\r\n vm.ordersSelected,\r\n function (response) {\r\n vm.invoice = response;\r\n vm.invoiceGenerating = false;\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/orders/dialogs/dialog-invoice/dialog-invoice.html\",\r\n targetEvent: ev,\r\n clickOutsideToClose: false,\r\n escapeToClose: false,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrdersInvoiceDialogController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Invoice: response,\r\n Callback: _generateInvoiceCallback,\r\n },\r\n });\r\n },\r\n function (response) {\r\n vm.invoiceGenerating = false;\r\n }\r\n );\r\n }\r\n\r\n function _generateInvoiceCallback() {\r\n getData();\r\n }\r\n\r\n function _getInvoices() {\r\n api.invoices.invoices.getByPeriod(\r\n {\r\n from: moment(vm.from).format(\"DD-MM-YYYY\"),\r\n to: moment(vm.to).format(\"DD-MM-YYYY\"),\r\n },\r\n function (response) {\r\n vm.invoices = response;\r\n }\r\n );\r\n }\r\n\r\n function showInvoiceDetail(ev, invoice) {\r\n api.invoices.invoices.get({ id: invoice.id }, function (response) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/orders/dialogs/dialog-invoice/dialog-invoice.html\",\r\n targetEvent: ev,\r\n clickOutsideToClose: false,\r\n escapeToClose: false,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrdersInvoiceDialogController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Invoice: response,\r\n Callback: function () {},\r\n },\r\n });\r\n });\r\n }\r\n\r\n function showInvoice(invoiceId) {\r\n $state.go(\"app.invoices.receipt\", { id: invoiceId });\r\n }\r\n\r\n function cancelInvoice(invoiceId) {\r\n // msg.confirm(\"Estas seguro que deseas cancelar la factura, no se podran deshacer los cambios?\", function(){\r\n // api.invoices.invoices.delete({ id: invoiceId }, function(response){\r\n // msg.success(\"Factura cancelada correctamente.\");\r\n // getData();\r\n // });\r\n // });\r\n vm.invoiceGenerating = true;\r\n api.invoices.generate.save(\r\n vm.ordersSelected,\r\n function (response) {\r\n vm.invoice = response;\r\n vm.invoiceGenerating = false;\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/orders/dialogs/dialog-cancel/dialog-cancel.html\",\r\n targetEvent: invoiceId,\r\n clickOutsideToClose: false,\r\n escapeToClose: false,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrdersCancelDialogController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n InvoiceId: invoiceId,\r\n Callback: function (response) {\r\n msg.success(\"Factura cancelada correctamente.\");\r\n getData();\r\n },\r\n },\r\n });\r\n },\r\n function (response) {\r\n vm.invoiceGenerating = false;\r\n }\r\n );\r\n }\r\n }\r\n})();\r\n\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.orders\")\r\n .controller(\"InvoicesOrderController\", invoicesOrderController);\r\n\r\n /** @ngInject */\r\n function invoicesOrderController(\r\n $state,\r\n $scope,\r\n api,\r\n msg,\r\n $mdDialog,\r\n $document,\r\n PaymentMethods,\r\n PaymentMethodOptions,\r\n Tpvs,\r\n Partner,\r\n Partners\r\n ) {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init() {\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\", \"\");\r\n vm.order = {};\r\n\r\n _initStep1();\r\n _initStep2();\r\n }\r\n\r\n // Step 1 - Calculo de cuotas y selección de productos\r\n\r\n //// Methods\r\n vm.calculate = calculate;\r\n vm.searchPartnerByCode = searchPartnerByCode;\r\n vm.searchProduct = searchProduct;\r\n vm.searchProductByCode = searchProductByCode;\r\n vm.showDiscountDialog = showDiscountDialog;\r\n vm.productRemove = productRemove;\r\n vm.cleanDiscount = cleanDiscount;\r\n vm.cleanAll = cleanAll;\r\n vm.cleanInterests = cleanInterests;\r\n vm.detailEditShow = detailEditShow;\r\n vm.productQuantityChange = productQuantityChange;\r\n //////////\r\n\r\n function _initStep1() {\r\n vm.partners = Partners;\r\n vm.titulares = vm.partners.filter(function (p) {\r\n return !p.isFamily;\r\n });\r\n vm.order.details = [];\r\n (vm.order.calcDate = new Date()),\r\n (vm.order.subtotal = 0),\r\n (vm.order.discountAmmount = 0),\r\n (vm.order.total = 0);\r\n\r\n if (Partner.id != 0) {\r\n vm.partnerSeachCode = Partner.sequentialNumber;\r\n vm.order.partner = Partner;\r\n calculate();\r\n }\r\n }\r\n\r\n $scope.$watch(\"vm.order.partner\", function (newValue) {\r\n if (newValue && !newValue.birthdate) {\r\n api.partners.partners.get({ id: newValue.id }, function (response) {\r\n vm.order.partner = response;\r\n console.log(\"Partner asignado: \" + response.id);\r\n });\r\n }\r\n });\r\n\r\n function searchPartnerByCode() {\r\n if (!vm.partnerSeachCode || vm.partnerSeachCode == \"\") {\r\n msg.error(\"Ingrese código de socio\");\r\n return;\r\n }\r\n var filter = vm.titulares.filter(function (p) {\r\n return p.sequentialNumber == vm.partnerSeachCode;\r\n });\r\n\r\n if (filter && filter.length > 0) {\r\n vm.order.partner = filter[0];\r\n calculate();\r\n } else {\r\n msg.error(\"El socio no existe, verifique.\");\r\n vm.partnerSeachCode = \"\";\r\n }\r\n }\r\n\r\n function calculate() {\r\n if (!vm.order.partner || !vm.order.calcDate) {\r\n msg.error(\"Seleccione socio y fecha de calculo para continuar\");\r\n return;\r\n }\r\n\r\n vm.calculating = true;\r\n // Verificar si hay turno del día abierto\r\n api.invoices.turns.get(\r\n {\r\n dateIni: moment().format(\"DD-MM-YYYY\"),\r\n },\r\n function (response) {\r\n var turns = response;\r\n if (turns.length == 0) {\r\n vm.calculating = false;\r\n msg.error(\"No hay turno abierto\");\r\n _showTurns();\r\n return;\r\n }\r\n if (vm.order.details.length > 0) {\r\n msg.confirm(\r\n \"Los detalles actuales de borraran esta seguro que desea recalcular?\",\r\n function () {\r\n _calculate();\r\n },\r\n function () {\r\n vm.calculating = false;\r\n }\r\n );\r\n } else _calculate();\r\n }\r\n );\r\n }\r\n\r\n vm.calculating = false;\r\n function _calculate() {\r\n // Check incompletePeriods\r\n api.invoices.calculation.check(\r\n {\r\n partnerId: vm.order.partner.id,\r\n calculationDate: moment(vm.order.calcDate).format(\"DD-MM-YYYY\"),\r\n },\r\n function (response) {\r\n var filter = response.filter(function (p) {\r\n return p.isIncomplete && p.type == 2 /*ByClass*/;\r\n });\r\n if (filter.length > 0) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-incompletePeriods/dialog-incompletePeriods.html\",\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDialogIncompletePeriodsController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Periods: filter,\r\n Callback: __calculate,\r\n },\r\n });\r\n vm.calculating = false;\r\n } else {\r\n __calculate();\r\n }\r\n }\r\n );\r\n }\r\n\r\n function __calculate(periods) {\r\n vm.calculating = true;\r\n vm.order.details = [];\r\n\r\n // Get messages\r\n api.partners.messages.getByFamily(\r\n {\r\n familyId: vm.order.partner.familyId,\r\n },\r\n function (response) {\r\n vm.partnerMessages = response.filter(function (m) {\r\n return !m.isViewed && m.isVisibleInOrder;\r\n });\r\n if (vm.partnerMessages.length > 0) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-messages/dialog-messages.html\",\r\n clickOutsideToClose: true,\r\n escapeToClose: true,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDialogMessagesController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Messages: vm.partnerMessages,\r\n },\r\n });\r\n }\r\n }\r\n );\r\n\r\n // Check Dues Rules\r\n api.catalogs.duesRules.checkByPartnerId(\r\n { id: vm.order.partner.id },\r\n function (duesRulesResponse) {\r\n // if array: show messages\r\n if (duesRulesResponse.length > 0) {\r\n // Show messages\r\n for (var i = 0; i < duesRulesResponse.length; i++) {\r\n var message = duesRulesResponse[i].message;\r\n alert(message);\r\n }\r\n }\r\n\r\n // Calculate\r\n api.invoices.calculation.calculate(\r\n {\r\n partnerId: vm.order.partner.id,\r\n calculationDate: vm.order.calcDate,\r\n incompletePeriods: periods,\r\n },\r\n function (response) {\r\n vm.calculating = false;\r\n vm.order.details = response;\r\n _updateTotals();\r\n },\r\n function () {\r\n vm.calculating = false;\r\n }\r\n );\r\n }\r\n );\r\n\r\n // Get titular due data\r\n api.catalogs.dues.get(\r\n { id: vm.order.partner.dueId },\r\n function (response) {\r\n vm.due = response;\r\n }\r\n );\r\n }\r\n\r\n function _showTurns() {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-turns/dialog-turns.html\",\r\n // clickOutsideToClose: true,\r\n // escapeToClose : true,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDialogTurnsController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Callback: _turnsCallback,\r\n },\r\n });\r\n }\r\n\r\n function _turnsCallback(turn) {\r\n _calculate();\r\n }\r\n\r\n function searchProductByCode() {\r\n var code = angular.copy(vm.codeToSearch);\r\n vm.codeToSearch = \"\";\r\n api.inventory.products.get(\r\n {\r\n code: code,\r\n },\r\n function (response) {\r\n if (!response.id || response.id === 0) {\r\n msg.error(\"No existe el código en el inventario.\");\r\n return;\r\n } else if (\r\n response.product.isStockRequired &&\r\n response.quantity == 0\r\n ) {\r\n msg.error(\"No hay disponibilidad del producto.\");\r\n return;\r\n }\r\n _searchProductCallback(response);\r\n }\r\n );\r\n }\r\n\r\n function _updateTotals() {\r\n if (vm.order.details.length > 0) {\r\n vm.order.subtotal =\r\n vm.order.details\r\n .map(function (x) {\r\n return x.subtotal;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n .toFixed(2) / 1;\r\n vm.order.interests =\r\n vm.order.details\r\n .map(function (x) {\r\n return x.interest;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n .toFixed(2) / 1;\r\n vm.order.discountAmmount =\r\n vm.order.details\r\n .map(function (x) {\r\n return x.discountAmmount;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n .toFixed(2) / 1;\r\n vm.order.total =\r\n vm.order.details\r\n .map(function (x) {\r\n return x.total;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n .toFixed(2) / 1;\r\n } else {\r\n vm.order.subtotal = 0;\r\n vm.order.interests = 0;\r\n vm.order.discountAmmount = 0;\r\n vm.order.total = 0;\r\n }\r\n vm.payment.ammount = (vm.order.total - vm.order.payed).toFixed(2) / 1;\r\n _updatePayed();\r\n }\r\n\r\n function searchProduct(ev) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-products/dialog-products.html\",\r\n parent: angular.element($document.find(\"#content-container\")),\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n escapeToClose: true,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDialogProductController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Callback: _searchProductCallback,\r\n },\r\n });\r\n }\r\n\r\n function _searchProductCallback(inventory) {\r\n var filter = vm.order.details.filter(function (d) {\r\n return d.productId == inventory.productId && d.detailType == 0;\r\n });\r\n if (filter.length == 0) {\r\n vm.order.details.push({\r\n productId: inventory.product.id,\r\n description: inventory.product.name,\r\n price: inventory.price,\r\n quantity: 1,\r\n subtotal: inventory.price,\r\n discountAmmount: 0,\r\n discountPercentage: 0,\r\n interest: 0,\r\n total: inventory.price,\r\n periodDate: new Date(),\r\n initialPeriodDate: new Date(),\r\n detailType: 0,\r\n });\r\n } else {\r\n filter[0].quantity = filter[0].quantity + 1;\r\n productQuantityChange(filter[0]);\r\n }\r\n\r\n _updateTotals();\r\n }\r\n\r\n function productRemove(item) {\r\n msg.confirm(\"Esta seguro que desea borrar este producto?\", function () {\r\n var deletable = true;\r\n if (item.serialDelete) {\r\n angular.forEach(vm.order.details, function (d) {\r\n if (\r\n d.detailType == item.detailType &&\r\n d.serialDelete &&\r\n d.serialDelete > item.serialDelete &&\r\n item.partnerId &&\r\n item.partnerId == d.partnerId\r\n ) {\r\n deletable = false;\r\n return;\r\n }\r\n });\r\n }\r\n if (!deletable) {\r\n msg.error(\r\n \"No se puede borrar este registro, debe borrar primero los registros con fecha posterior.\"\r\n );\r\n return;\r\n }\r\n vm.order.details.splice(vm.order.details.indexOf(item), 1);\r\n msg.success(\"Producto borrado correctamente.\");\r\n _updateTotals();\r\n });\r\n }\r\n\r\n function showDiscountDialog(ev, item) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-discount/dialog-discount.html\",\r\n parent: angular.element($document.find(\"#content-container\")),\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n escapeToClose: true,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDiscountDialogController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n ApplyDiscount: _discountAccept,\r\n Product: item,\r\n },\r\n });\r\n }\r\n\r\n function _discountAccept(product, discount) {\r\n if (product) {\r\n _applyDiscount(product, discount);\r\n } else {\r\n angular.forEach(vm.order.details, function (p) {\r\n _applyDiscount(p, discount);\r\n });\r\n }\r\n }\r\n\r\n function _applyDiscount(product, discount) {\r\n if (!discount) return;\r\n var discountAmmount = 0;\r\n if (product.quantity) product.subtotal = product.price * product.quantity;\r\n else product.subtotal = product.price;\r\n if (discount.type == 1) {\r\n // Ammount\r\n if (discount.ammount > product.subtotal)\r\n discountAmmount = product.subtotal;\r\n else discountAmmount = discount.ammount;\r\n } else if (discount.type == 2) {\r\n // Percentage\r\n discountAmmount = product.subtotal * (discount.ammount / 100);\r\n }\r\n\r\n product.subtotal = product.subtotal;\r\n product.total = product.subtotal - discountAmmount + product.interest;\r\n product.discountType = discount.type;\r\n product.discount = discount.ammount;\r\n product.discountAmmount = discountAmmount;\r\n\r\n _updateTotals();\r\n }\r\n\r\n function cleanDiscount() {\r\n msg.confirm(\r\n \"Todos los DESCUENTOS seran borrados, desea continuar?\",\r\n function () {\r\n angular.forEach(vm.order.details, function (detail) {\r\n _applyDiscount(detail, {\r\n type: 1,\r\n ammount: 0,\r\n });\r\n });\r\n _updateTotals();\r\n }\r\n );\r\n }\r\n\r\n function cleanAll() {\r\n msg.confirm(\r\n \"Todos los PRODUCTOS/SERVICIOS serán borrados, desea continuar?\",\r\n function () {\r\n vm.order.details = [];\r\n _updateTotals();\r\n }\r\n );\r\n }\r\n\r\n function cleanInterests() {\r\n msg.confirm(\r\n \"Todos los INTERESES seran borrados, desea continuar?\",\r\n function () {\r\n angular.forEach(vm.order.details, function (detail) {\r\n detail.interest = 0;\r\n detail.total =\r\n detail.price * detail.quantity +\r\n detail.interest -\r\n detail.discountAmmount;\r\n });\r\n _updateTotals();\r\n }\r\n );\r\n }\r\n\r\n function detailEditShow(ev, detail) {\r\n $mdDialog.show({\r\n templateUrl:\r\n \"app/main/invoices/views/orders/order/dialogs/dialog-edit/dialog-edit.html\",\r\n parent: angular.element($document.find(\"#content-container\")),\r\n targetEvent: ev,\r\n clickOutsideToClose: true,\r\n escapeToClose: true,\r\n disableParentScroll: true,\r\n controller: \"InvoicesOrderDialogEditController\",\r\n controllerAs: \"vm\",\r\n locals: {\r\n Callback: _detailEditCallback,\r\n Detail: detail,\r\n },\r\n });\r\n }\r\n\r\n function _detailEditCallback(oldItem, newItem) {\r\n vm.order.details[vm.order.details.indexOf(oldItem)] = newItem;\r\n _updateTotals();\r\n }\r\n\r\n function productQuantityChange(productDetail) {\r\n if (productDetail.detailType && productDetail.detailType != 0) {\r\n msg.error(\"No se puede cambiar la cantidad de este producto\");\r\n productDetail.quantity = 1;\r\n return;\r\n }\r\n\r\n productDetail.subtotal = productDetail.price * productDetail.quantity;\r\n productDetail.total = productDetail.subtotal;\r\n\r\n _applyDiscount(productDetail, {\r\n type: productDetail.discountType,\r\n ammount: productDetail.discount,\r\n });\r\n _updatePayed();\r\n _updateTotals();\r\n }\r\n //// Step 1\r\n\r\n // Step 2 - Forma de pago\r\n /// Methods\r\n vm.paymentMethodChange = paymentMethodChange;\r\n vm.addPayment = addPayment;\r\n vm.paymentRemove = paymentRemove;\r\n vm.generateNotes = generateNotes;\r\n /////\r\n\r\n function _initStep2() {\r\n vm.paymentMethods = PaymentMethods;\r\n vm.options = angular.copy(PaymentMethodOptions);\r\n vm.tpvs = Tpvs;\r\n\r\n vm.order.payments = [];\r\n vm.order.address = {};\r\n vm.order.partnerAddresses = [];\r\n vm.order.payed = 0;\r\n vm.modifyAddress = false;\r\n _newPayment();\r\n }\r\n\r\n function _newPayment() {\r\n vm.payment = {};\r\n if (vm.paymentMethods && vm.paymentMethods.length > 0)\r\n vm.payment.paymentMethod = vm.paymentMethods[0];\r\n }\r\n\r\n function paymentMethodChange() {\r\n vm.payment.paymentMethodId == vm.payment.paymentMethod.id;\r\n vm.paymentMethodOptions = vm.options.filter(function (o) {\r\n return o.paymentMethodId === vm.payment.paymentMethod.id;\r\n });\r\n vm.payment.paymentMethodOption = null;\r\n }\r\n\r\n function addPayment() {\r\n // Si ya existe efectivo\r\n var paymentFilter = vm.order.payments.filter(function (p) {\r\n return p.paymentMethod.id == vm.payment.paymentMethod.id;\r\n });\r\n if (\r\n vm.payment.paymentMethod.name.toLowerCase() == \"efectivo\" &&\r\n paymentFilter.length > 0\r\n )\r\n paymentFilter[0].ammount =\r\n paymentFilter[0].ammount + vm.payment.ammount;\r\n else vm.order.payments.push(angular.copy(vm.payment));\r\n _newPayment();\r\n vm.paymentMethodOptions = [];\r\n _updatePayed();\r\n }\r\n\r\n function _updatePayed() {\r\n if (vm.order.payments.length > 0)\r\n vm.order.payed =\r\n vm.order.payments\r\n .map(function (x) {\r\n return x.ammount;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n })\r\n .toFixed(2) / 1;\r\n else vm.order.payed = 0;\r\n vm.payment.ammount = (vm.order.total - vm.order.payed).toFixed(2) / 1;\r\n }\r\n\r\n function paymentRemove(item) {\r\n vm.order.payments.splice(vm.order.payments.indexOf(item), 1);\r\n msg.success(\"Pago borrado correctamente\");\r\n _updatePayed();\r\n }\r\n\r\n $scope.$watch(\"vm.order.partner\", function (newPartner) {\r\n if (!newPartner) return;\r\n api.partners.addresses.query(\r\n { partnerId: newPartner.id },\r\n function (response) {\r\n vm.partnerAddresses = response;\r\n if (response.length > 0) {\r\n var filter = response.filter(function (a) {\r\n return a.isDefault;\r\n });\r\n if (filter && filter.length > 0) vm.order.address = filter[0];\r\n else vm.order.address = response[0];\r\n }\r\n }\r\n );\r\n });\r\n\r\n function generateNotes() {\r\n var monthsAbrevs = [\r\n { month: 1, abrev: \"ene\" },\r\n { month: 2, abrev: \"feb\" },\r\n { month: 3, abrev: \"mzo\" },\r\n { month: 4, abrev: \"abr\" },\r\n { month: 5, abrev: \"may\" },\r\n { month: 6, abrev: \"jun\" },\r\n { month: 7, abrev: \"jul\" },\r\n { month: 8, abrev: \"ago\" },\r\n { month: 9, abrev: \"sep\" },\r\n { month: 10, abrev: \"oct\" },\r\n { month: 11, abrev: \"nov\" },\r\n { month: 12, abrev: \"div\" },\r\n ];\r\n\r\n var notes = \"\";\r\n angular.forEach(vm.order.details, function (detail) {\r\n if (detail.detailType == 1 /*Cuotas*/) {\r\n var periodicityAbrev = \"\";\r\n var description = detail.description.toLowerCase();\r\n if (description.indexOf(\"anual\") != -1) {\r\n periodicityAbrev = \"anu\";\r\n } else if (description.indexOf(\"semestral\") != -1) {\r\n periodicityAbrev = \"sem\";\r\n } else if (description.indexOf(\"trimestral\") != -1) {\r\n periodicityAbrev = \"trim\";\r\n } else if (description.indexOf(\"mensual\") != -1) {\r\n periodicityAbrev = \"men\";\r\n } else if (description.indexOf(\"semanal\") != -1) {\r\n periodicityAbrev = \"sem\";\r\n }\r\n\r\n var periodNote = \"\";\r\n var initPeriodDate = moment(detail.initPeriodDate);\r\n var endPeriodDate = moment(detail.endPeriodDate);\r\n if (initPeriodDate.month() == endPeriodDate.month())\r\n periodNote =\r\n initPeriodDate.format(\"DD\") +\r\n \"-\" +\r\n endPeriodDate.format(\"DD\") +\r\n monthsAbrevs.filter(function (m) {\r\n return m.month == initPeriodDate.month() + 1;\r\n })[0].abrev;\r\n\r\n notes = notes + \"Cuota \" + periodicityAbrev + \" \" + periodNote + \", \";\r\n }\r\n });\r\n\r\n if (vm.order.payments.length > 0) notes = notes + \"- \";\r\n angular.forEach(vm.order.payments, function (payment) {\r\n var paymentAbrev = \"\";\r\n if (payment.paymentMethod.name.length > 3)\r\n paymentAbrev = payment.paymentMethod.name.substring(0, 3);\r\n else paymentAbrev = payment.paymentMethod.name;\r\n\r\n if (payment.reference && payment.reference != \"\")\r\n notes = notes + paymentAbrev + \" \" + payment.reference + \"/\";\r\n else notes = notes + paymentAbrev + \"/\";\r\n });\r\n\r\n vm.order.notes = notes.toUpperCase();\r\n }\r\n //// Step 2\r\n\r\n // Step 3 - Preview\r\n /// Methods\r\n vm.saveOrder = saveOrder;\r\n /////\r\n\r\n function saveOrder() {\r\n vm.order.sending = true;\r\n vm.order.zipcode = vm.order.address.zipCode;\r\n api.invoices.orders.save(\r\n vm.order,\r\n function (response) {\r\n msg.success(\"Recibo guardado correctamente.\");\r\n $state.go(\"app.invoices.orders.receipt\", { id: response.id });\r\n vm.order.sending = false;\r\n },\r\n function (errorResponse) {\r\n vm.order.sending = false;\r\n }\r\n );\r\n }\r\n\r\n //// Step 3\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.orders')\r\n .controller('InvoicesOrdersCouponController',InvoicesOrdersCouponController);\r\n\r\n /** @ngInject */\r\n function InvoicesOrdersCouponController($mdDialog, api, msg, Order, $state)\r\n {\r\n var vm = this;\r\n vm.order = Order;\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\");\r\n vm.settings = vm.order.branch.setting;\r\n vm.products = Order.details[0].product;\r\n vm.range = new Array(Order.details[0].product.couponNumber);\r\n vm.partner = Order.partner;\r\n \r\n vm.copies = [];\r\n if (vm.products.couponNumber == 0)\r\n {\r\n msg.error(\"Este Recibo/Factura no contiene cupones\");\r\n return;\r\n }else{\r\n for(var i = 0; i < vm.products.couponNumber; i++ ){\r\n vm.copies.push({ number: i });\r\n }\r\n }\r\n\r\n vm.imageSaving = true;\r\n vm.emailSending = false;\r\n \r\n vm.logoSource = \"data:image/jpeg;base64, \" + vm.settings.logoBase64String;\r\n \r\n vm.invoiceGenerating = false;\r\n vm.generateInvoice = function(ev){\r\n vm.invoiceGenerating = true;\r\n api.invoices.generate.save([vm.order], function(response){\r\n vm.invoice = response;\r\n vm.invoiceGenerating = false;\r\n $mdDialog.show({\r\n templateUrl : 'app/main/invoices/views/orders/orders/dialogs/dialog-invoice/dialog-invoice.html',\r\n targetEvent : ev,\r\n clickOutsideToClose: false,\r\n escapeToClose : false,\r\n disableParentScroll: true,\r\n controller : \"InvoicesOrdersInvoiceDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Invoice : response,\r\n Callback : function(invoice){\r\n $state.go(\"app.invoices.receipt\", { id: invoice.id });\r\n }\r\n },\r\n });\r\n }, function(response){\r\n vm.invoiceGenerating = false;\r\n }); \r\n } \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices.notasCredito')\r\n .controller('InvoicesNotasCreditoController', invoicesNotasCreditoController);\r\n\r\n /** @ngInject */\r\n function invoicesNotasCreditoController(api, msg, NotasCredito, $mdDialog, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.showNotaCredito = showNotaCredito;\r\n vm.getNotasCredito = getNotasCredito;\r\n vm.view = view;\r\n ////////\r\n\r\n \r\n function _init(){\r\n var now = moment();\r\n var from = moment([now.year(), now.month()]);\r\n var to = moment(from).endOf('month');\r\n \r\n vm.from = from.format('MM/DD/YYYY');\r\n vm.to = to.format('MM/DD/YYYY');\r\n \r\n vm.notasCredito = [];\r\n getNotasCredito();\r\n }\r\n \r\n function getNotasCredito(){\r\n api.invoices.notasCredito.get({\r\n from: moment(vm.from).format(\"DD-MM-YYYY\"), \r\n to: moment(vm.to).format(\"DD-MM-YYYY\")\r\n },function(response){\r\n vm.notasCredito = response;\r\n });\r\n }\r\n\r\n function showNotaCredito(ev, nota){\r\n $mdDialog.show({\r\n controller : 'InvoicesNotasCreditoDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/invoices/views/notasCredito/notasCredito/dialogs/dialog-nota-credito/dialog-nota-credito.html',\r\n targetEvent : ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals : {\r\n NotaCredito : nota\r\n }\r\n });\r\n }\r\n\r\n function view(id){\r\n console.log('hola'); \r\n $state.go(\"app.invoices.receipt\", { id: id, type: \"creditNote\" });\r\n }\r\n }\r\n})();\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.inventory.inventories') \r\n .controller('InventoryInventoriesController', InventoryInventoriesController);\r\n\r\n /** @ngInject */\r\n function InventoryInventoriesController($state, api, CONST_DATATABLES, $mdDialog)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n \r\n // Methods\r\n vm.add = add;\r\n vm.save = save;\r\n //////////\r\n \r\n function init(){\r\n _get();\r\n\r\n vm.dtInventoryInstance = {};\r\n vm.dtInventoryOptions = angular.copy($.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>', \r\n columnDefs :[\r\n {\r\n targets : 3,\r\n searchable : false,\r\n sortable : false\r\n },\r\n {\r\n targets : 4,\r\n searchable : false,\r\n sortable : false\r\n },\r\n ], \r\n initComplete: function (){\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n filter: true,\r\n scrollY : 'auto',\r\n }));\r\n vm.saving = false;\r\n }\r\n\r\n function _get(){\r\n api.inventory.inventory.query(function(response){\r\n vm.inventory = response;\r\n });\r\n }\r\n\r\n function add(ev){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/inventory/views/inventories/inventories/dialogs/dialog-inventory/dialog-inventory.html',\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n escapeToClose : true,\r\n disableParentScroll: true,\r\n controller : \"InventoryInventoriesDialogInventoryController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _get,\r\n },\r\n });\r\n }\r\n\r\n function save(item){\r\n if (item.oldQuantity != item.quantity || item.oldPrice != item.price){\r\n vm.saving = true;\r\n api.inventory.inventory.save(item, function(response){\r\n vm.selected = response;\r\n vm.saving = false;\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.rentableZones')\r\n .controller('CatalogsRentableZonesController', CatalogsRentableZonesController);\r\n\r\n /** @ngInject */\r\n function CatalogsRentableZonesController($scope, RentableZones, $mdDialog, $document, msg, api, CONST_DATATABLES, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.add = add;\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n _refresh();\r\n vm.dtInstance = {};\r\n vm.dtOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px',\r\n responsivePriority: 0,\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 2,\r\n filterable : false,\r\n sortable : false\r\n },\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n }));\r\n }\r\n\r\n function _refresh(){\r\n vm.zones = api.catalogs.rentableZones.query();\r\n }\r\n\r\n function add(){\r\n $state.go(\"app.catalogs.rentableZones.add\");\r\n }\r\n\r\n function detail(item){\r\n $state.go(\"app.catalogs.rentableZones.detail\", { id: item.id });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm('Estas seguro que deseas borrar esta zona zon todos sus rentables?', function(){\r\n api.catalogs.dues.delete({ id: item.id }, function(response){\r\n if (response){\r\n _refresh();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.rentableZones')\r\n .controller('CatalogsRentableZoneController', rentableZoneController);\r\n\r\n /** @ngInject */\r\n function rentableZoneController(api, msg, $state, CONST_DATATABLES, RentableZone, $mdDialog, $document){\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.returnBack = returnBack;\r\n vm.save = save;\r\n vm.generateMatrix = generateMatrix;\r\n vm.configSelected = configSelected;\r\n\r\n vm.showPrices = showPrices;\r\n vm.priceDelete = priceDelete;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n vm.item = RentableZone;\r\n vm.rentablesGenerated = false;\r\n vm.saving = false;\r\n vm.startNumber = 1;\r\n \r\n if (vm.item && vm.item.id > 0){\r\n _getPrices();\r\n }\r\n\r\n // Sat Catalogs\r\n vm.satTaxes = api.sat.taxes.query();\r\n vm.satTaxTypes = api.sat.taxTypes.query();\r\n\r\n api.partners.rentables.getByRentableZone({familyId: 0, rentableZoneId: vm.item.id }, function(response){\r\n vm.assignedRentables = response;\r\n })\r\n }\r\n \r\n function returnBack(){\r\n $state.go(\"app.catalogs.rentableZones\");\r\n }\r\n\r\n function _save(){\r\n if (!vm.item.satProduct || !vm.item.satProduct.id || !vm.item.satUnit || !vm.item.satUnit.id)\r\n {\r\n msg.error(\"Seleccione producto del SAt y Unidad del SAT.\");\r\n vm.saving = false;\r\n return;\r\n }\r\n vm.item.satProductId = vm.item.satProduct.id;\r\n vm.item.satUnitId = vm.item.satUnit.id;\r\n // Save Item\r\n api.catalogs.rentableZones.save(\r\n vm.item,\r\n function(response){\r\n msg.success(\"Zona de rentables guardada correctamente.\");\r\n if (vm.item.id == 0)\r\n vm.item = response;\r\n else\r\n $state.go(\"app.catalogs.rentableZones\");\r\n vm.saving = false;\r\n }, function(errorResponse){\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n function save(){\r\n vm.saving = true;\r\n if (vm.item.id == 0){\r\n _save();\r\n return;\r\n }\r\n \r\n // Get rentables config\r\n var rentables = $(\"#matrix td.selected\");\r\n if (vm.item.id != 0 && rentables.length == 0){\r\n msg.confirm(\"NO HA CONFIGURADO NINGUN CASILLERO, Desea continuar?\", _save);\r\n return; \r\n }\r\n\r\n if (rentables.length > 0){\r\n msg.confirm(\"Esta seguto que desea guardar la configuración para \" + rentables.length + \" rentables\", function(){\r\n vm.item.rentables = [];\r\n rentables.each(function() {\r\n var id = $(this).attr(\"id\");\r\n var hdn = $(this).find(\"input[type='hidden']\");\r\n var name = $(this).html();\r\n vm.item.rentables.push({\r\n id: hdn && hdn.val() && hdn.val() != '' ? parseInt(hdn.val()) : 0,\r\n matrixId: id,\r\n name: name,\r\n rentableZoneId: vm.item.id,\r\n active: true\r\n });\r\n });\r\n \r\n _save();\r\n }, function(){\r\n vm.saving = false; \r\n });\r\n return;\r\n }\r\n }\r\n\r\n function generateMatrix(){\r\n // Clear table \r\n $(\"#matrix\").remove(); \r\n\r\n var table = document.createElement(\"TABLE\");\r\n table.id = \"matrix\";\r\n\r\n // Create table\r\n var counter = 1;\r\n var width = 700 / vm.item.matrixColumns;\r\n var height = 500 / vm.item.matrixRows;\r\n for(var row = 0; row < vm.item.matrixRows; row++){\r\n var htmlRow = document.createElement(\"TR\");\r\n for(var col = 0; col < vm.item.matrixColumns; col++){ \r\n var cell = document.createElement(\"TD\");\r\n cell.id = counter;\r\n cell.style.width = width + 'px';\r\n cell.style.height = height + 'px';\r\n // var inp = document.createElement(\"INPUT\");\r\n // cell.appendChild(inp);\r\n // htmlCol.innerHTML = counter;\r\n htmlRow.appendChild(cell);\r\n counter++;\r\n }\r\n table.appendChild(htmlRow);\r\n }\r\n\r\n $(\"#matrix-container\").html(table);\r\n\r\n \r\n if (vm.item.rentables && vm.item.rentables.length > 0){\r\n $(\"#matrix td\").each(function(index){\r\n var id = $(this).attr(\"id\");\r\n var filter = vm.item.rentables.filter(function(l){\r\n return l.matrixId == id;\r\n });\r\n if (filter.length > 0){\r\n \r\n $(this).html(\"\" + filter[0].name);\r\n $(this).addClass(\"selected\");\r\n\r\n if (vm.assignedRentables.filter(function(partnerRentable){ return partnerRentable.rentableId == filter[0].id }).length > 0){\r\n $(this).addClass(\"ignore\");\r\n } \r\n }\r\n });\r\n }\r\n\r\n // Rebind events\r\n $(\"#matrix td\")\r\n .mousedown(function () {\r\n isMouseDown = true;\r\n if (!$(this).hasClass(\"ignore\")){\r\n // Numeration\r\n if (!$(this).hasClass(\"selected\")){\r\n $(this).html($(\"#prefix\").val() + ($(\"#matrix td.selected\").length + parseInt($(\"#startNumber\").val())) + $(\"#postfix\").val());\r\n }else{\r\n // Get number and check if is last to Delete\r\n var html = $(this).html();\r\n var posibleNumber = html.substring(html.length - 2, html.length);\r\n var number = 0;\r\n if (isNaN(posibleNumber))\r\n number = parseInt(posibleNumber.substring(1,2));\r\n else\r\n number = parseInt(posibleNumber);\r\n // If is Last then delete html else show error\r\n if (parseInt(number) && parseInt(number) == $(\"#matrix td.selected\").length)\r\n $(this).html(\"\");\r\n else{\r\n msg.error(\"Comience a borrar a partir del último casillero.\");\r\n return;\r\n }\r\n }\r\n $(this).toggleClass(\"selected\");\r\n isHighlighted = $(this).hasClass(\"selected\");\r\n }\r\n return false; // prevent text selection\r\n })\r\n .mouseover(function () {\r\n if (isMouseDown) {\r\n if (!$(this).hasClass(\"ignore\")){\r\n // Numeration\r\n if (!$(this).hasClass(\"selected\") && isHighlighted){\r\n $(this).html($(\"#prefix\").val() + ($(\"#matrix td.selected\").length + parseInt($(\"#startNumber\").val())) + $(\"#postfix\").val());\r\n }else if(!isHighlighted){\r\n $(this).html(\"\");\r\n }\r\n $(this).toggleClass(\"selected\", isHighlighted);\r\n }\r\n }\r\n })\r\n .bind(\"selectstart\", function () {\r\n return false;\r\n });\r\n }\r\n\r\n function configSelected(){\r\n if (vm.item && vm.item.matrixRows > 0 && vm.item.matrixColumns > 0){\r\n generateMatrix();\r\n vm.rentablesGenerated = true;\r\n }\r\n }\r\n\r\n // Prices\r\n function _getPrices(){\r\n if (vm.item && vm.item.id != 0)\r\n vm.prices = api.catalogs.rentableZonePrices.query({ rentableZoneId: vm.item.id });\r\n }\r\n\r\n function showPrices(ev, rentableZoneId, priceGroupId){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/rentable-zones/rentable-zone/dialogs/dialog-prices/dialog-prices.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n escapeToClose : true,\r\n disableParentScroll: true,\r\n controller : \"CatalogsRentableZonesPricesDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _priceCallback,\r\n PriceGroupId : priceGroupId,\r\n RentableZoneId : rentableZoneId\r\n },\r\n }); \r\n }\r\n\r\n function _priceCallback(){\r\n _getPrices();\r\n }\r\n\r\n function priceDelete(groupId){\r\n msg.confirm(\"Esta seguro que desea borrar este precio?\", function(){\r\n api.catalogs.rentableZonePrices.delete({ groupId: groupId }, function(){\r\n msg.success(\"Precio borrado correctamente.\");\r\n _getPrices();\r\n });\r\n })\r\n }\r\n\r\n // /Prices\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.products')\r\n .controller('CatalogProductsController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($state, api, CONST_DATATABLES, $mdDialog, $document, msApi)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n function init(){\r\n _getProducts();\r\n vm.dtInstance = {};\r\n vm.dtOptions = $.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the Code column\r\n targets: 0,\r\n width : '72px',\r\n sortable: false,\r\n },\r\n {\r\n // Target the actions column\r\n targets : 4,\r\n width : '80px',\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function (){\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pageLength : 8,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true,\r\n });\r\n }\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n vm.massiveAdd = massiveAdd;\r\n //////////\r\n\r\n function gotoAdd(){\r\n $state.go('app.catalogs.products.add');\r\n }\r\n\r\n function gotoDetail(id){\r\n $state.go('app.catalogs.products.detail', { id: id });\r\n }\r\n\r\n function _getProducts(){\r\n vm.products = api.catalogs.products.query();\r\n }\r\n\r\n function massiveAdd(ev){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/products/products/dialogs/dialog-massive.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n clickOutsideToClose: false,\r\n escapeToClose : false,\r\n disableParentScroll: true,\r\n controller : \"ProductsMassiveDialogController\",\r\n controllerAs : \"vm\",\r\n locals :{\r\n Refresh : _getProducts\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.products')\r\n .controller('CatalogProductController', CatalogProductController);\r\n\r\n /** @ngInject */\r\n function CatalogProductController($scope, $document, $state, Product, ProductTypes, api, msg, $sce, Accounts)\r\n {\r\n var vm = this;\r\n vm.product = Product;\r\n vm.productTypes = ProductTypes;\r\n vm.accounts = Accounts;\r\n\r\n// // Methods\r\n vm.gotoProducts = gotoProducts;\r\n vm.save = save;\r\n vm.changeType = changeType;\r\n// //////////\r\n\r\n init();\r\n\r\n function init(){\r\n vm.loadingTemplate = false;\r\n if (vm.product.id != 0)\r\n changeType();\r\n\r\n // Sat Catalogs\r\n vm.satTaxes = api.sat.taxes.query();\r\n vm.satTaxTypes = api.sat.taxTypes.query();\r\n }\r\n\r\n function gotoProducts(){\r\n $state.go('app.catalogs.products');\r\n }\r\n\r\n function changeType(){\r\n vm.loadingTemplate = true;\r\n\r\n var options = vm.product.options;\r\n\r\n api.catalogs.templates.get({\r\n productTypeId: vm.product.productTypeId,\r\n }, function(response){ \r\n vm.product.options = [];\r\n angular.forEach(response.properties, function(p){\r\n var newOption = { \r\n productPropertyId: p.id, \r\n value: \"\" \r\n };\r\n\r\n if (options && options.length > 0){\r\n var filteredOptions = options.filter(function(opt){ return opt.productPropertyId == p.id });\r\n if (filteredOptions.length > 0)\r\n newOption = filteredOptions[0];\r\n }\r\n\r\n vm.product.options.push(newOption);\r\n });\r\n\r\n vm.html = $sce.trustAsHtml(response.html);\r\n \r\n vm.loadingTemplate = false;\r\n });\r\n }\r\n\r\n function save(){\r\n vm.product.satProductId = vm.product.satProduct.id; \r\n vm.product.satUnitId = vm.product.satUnit.id;\r\n api.catalogs.products.save(vm.product,function(response){\r\n if (response){\r\n msg.success(\"Producto guardado correctamente\");\r\n $state.go(\"app.catalogs.products\");\r\n }\r\n });\r\n } \r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs', \r\n [\r\n 'datatables',\r\n // Catalogs\r\n 'app.catalogs.warehouses',\r\n 'app.catalogs.employeeTypes',\r\n 'app.catalogs.employees',\r\n 'app.catalogs.clubAccess',\r\n 'app.catalogs.partnerTypes',\r\n 'app.catalogs.dues',\r\n 'app.catalogs.duesRules',\r\n 'app.catalogs.productTypes',\r\n 'app.catalogs.products',\r\n 'app.catalogs.rentableZones', \r\n 'app.catalogs.countries',\r\n 'app.catalogs.professions',\r\n 'app.catalogs.addressTypes',\r\n 'app.catalogs.media',\r\n 'app.catalogs.agreements',\r\n 'app.catalogs.accessTimeZones',\r\n 'app.catalogs.activities',\r\n 'app.catalogs.levels',\r\n 'app.catalogs.evaluations',\r\n 'app.catalogs.levelScores',\r\n 'app.catalogs.becas',\r\n \r\n 'app.catalogs.tpvs',\r\n 'app.catalogs.paymentMethods',\r\n 'app.catalogs.paymentMethodOptions',\r\n \r\n 'app.catalogs.zones',\r\n 'app.catalogs.passTypes',\r\n 'app.catalogs.passes',\r\n 'app.catalogs.conceptosNotaCredito',\r\n 'app.catalogs.accounts'\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs', {\r\n abstract: true,\r\n url : '/catalogs'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps', {\r\n title : '',\r\n group : true,\r\n weight: 1\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.catalogs', {\r\n title : 'Catalogos',\r\n icon : 'icon-archive',\r\n weight: 3\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs')\r\n .controller('CatalogsProductTypesController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($state, api, msg)\r\n {\r\n var vm = this;\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n vm.delete = remove;\r\n //////////\r\n\r\n _init();\r\n\r\n function _getProductTypes(){\r\n api.catalogs.productTypes.query(function(response) { \r\n return vm.productTypes = response \r\n }); \r\n }\r\n\r\n function _init(){\r\n _getProductTypes();\r\n vm.dtInstance = {};\r\n vm.dtOptions = {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the status column\r\n targets : 2,\r\n filterable: false,\r\n render : function (data, type)\r\n {\r\n if ( type === 'display' )\r\n {\r\n if ( data === 'true' )\r\n {\r\n return '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n if ( type === 'filter' )\r\n {\r\n if ( data )\r\n {\r\n return '1';\r\n }\r\n\r\n return '0';\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false,\r\n width : '120px'\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n };\r\n } \r\n\r\n function gotoAdd()\r\n {\r\n $state.go('app.catalogs.productTypes.add');\r\n }\r\n\r\n function gotoDetail(id)\r\n {\r\n $state.go('app.catalogs.productTypes.detail', { id: id });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Estas seguro que quieres dar de baja el tipo de producto \" + item.name, function(){\r\n api.catalogs.productTypes.delete({ id: item.id }, function(response){\r\n _getProductTypes();\r\n msg.success(\"Tipo de producto borrado correctamente\");\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.productTypes', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.productTypes', {\r\n url : '/productTypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/productTypes/productTypes/productTypes.html',\r\n controller : 'CatalogsProductTypesController as vm'\r\n }\r\n }\r\n })\r\n .state('app.catalogs.productTypes.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/productTypes/productType/productType.html',\r\n controller : 'CatalogsProductTypeController as vm'\r\n }\r\n },\r\n resolve : {\r\n ProductType: function ()\r\n {\r\n return { id: 0, name: '', active: true, properties: [] };\r\n }\r\n },\r\n })\r\n .state('app.catalogs.productTypes.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/productTypes/productType/productType.html',\r\n controller : 'CatalogsProductTypeController as vm'\r\n }\r\n },\r\n resolve : {\r\n ProductType: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.productTypes@get', { id: $stateParams.id });\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.productTypes', {\r\n title: 'Tipos de productos',\r\n state: 'app.catalogs.productTypes'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.catalogs.productTypes')\r\n .controller('CatalogsProductTypeController', catalogsProductTypeController);\r\n\r\n /** @ngInject */\r\n function catalogsProductTypeController($state, ProductType, api, msg)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n\r\n vm.propertyAdd = propertyAdd;\r\n vm.propertyEdit = propertyEdit;\r\n vm.propertySave = propertySave;\r\n vm.propertyDelete = propertyDelete;\r\n\r\n vm.optionAdd = optionAdd;\r\n vm.optionSave = optionSave;\r\n vm.optionDelete = optionDelete;\r\n \r\n// //////////\r\n\r\n init();\r\n\r\n function init(){\r\n vm.item = ProductType;\r\n vm.properties = [];\r\n _getProperties();\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go('app.catalogs.productTypes');\r\n }\r\n\r\n function save(){\r\n vm.item.properties = [];\r\n angular.forEach(vm.properties, function(prop){\r\n if (prop.selected == true)\r\n vm.item.properties.push(prop);\r\n });\r\n\r\n api.catalogs.productTypes.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Tipo de producto guardado correctamente.');\r\n if (vm.item.id != 0)\r\n $state.go('app.catalogs.productTypes');\r\n else\r\n vm.item = response;\r\n }\r\n });\r\n }\r\n\r\n /// Properties\r\n function _getProperties(){\r\n api.catalogs.productProperties.query(function(response){\r\n vm.properties = response;\r\n \r\n angular.forEach(vm.properties, function(prop){\r\n if (vm.item && vm.item.properties)\r\n prop.selected = vm.item.properties.filter(function(p){ return p.id == prop.id }).length > 0;\r\n });\r\n })\r\n }\r\n\r\n function propertyAdd(){\r\n vm.property = {\r\n id: 0,\r\n name: \"\",\r\n active: true,\r\n options: []\r\n };\r\n optionAdd();\r\n }\r\n \r\n function propertyEdit(item){\r\n vm.property = angular.copy(item);\r\n vm.property.isEditMode = true;\r\n _getOptions();\r\n optionAdd();\r\n }\r\n\r\n function propertySave(){\r\n\r\n\r\n api.catalogs.productProperties.save(vm.property, function(response){\r\n vm.property.id = response.id;\r\n _getProperties();\r\n optionAdd();\r\n msg.success(\"Propiedad guardada correctamente.\");\r\n });\r\n }\r\n\r\n function propertyDelete(item){\r\n msg.confirm(\"Esta seguro que quiere borrar la propiedad \" + item.name, function(){\r\n api.catalogs.productProperties.delete({ id: item.id }, function(response){\r\n _getProperties();\r\n msg.success(\"Propiedad borrada correctamente\");\r\n });\r\n });\r\n }\r\n\r\n /// Options\r\n function _getOptions(){\r\n if (!vm.property || vm.property.id == 0){\r\n msg.error(\"Seleccione propiedad\");\r\n return;\r\n }\r\n\r\n api.catalogs.productPropertyOptions.get({ propertyId: vm.property.id }, function(options){\r\n vm.options = options; \r\n });\r\n }\r\n\r\n function optionAdd(){\r\n vm.option = {\r\n productPropertyId : vm.property.id,\r\n id: 0,\r\n name: \"\",\r\n active: true\r\n };\r\n }\r\n\r\n function optionSave(){\r\n api.catalogs.productPropertyOptions.save(vm.option, function(option){\r\n _getOptions();\r\n optionAdd();\r\n msg.success(\"Opción guardada correctamente.\"); \r\n });\r\n }\r\n\r\n function optionDelete(item){\r\n msg.confirm(\"Esta seguro que quiere borrar la opción \" + item.value, function(){\r\n api.catalogs.productPropertyOptions.delete({ id: item.id }, function(option){\r\n _getOptions();\r\n msg.success(\"Opción borrada correctamente\");\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs')\r\n .controller('CatalogsEmployeesController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($state, api, msg)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n function init(){\r\n api.catalogs.employees.query(function(response) { return vm.employees = response }); \r\n vm.dtInstance = {};\r\n vm.dtOptions = {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the status column\r\n targets : 3,\r\n filterable: false \r\n },\r\n {\r\n // Target the actions column\r\n targets : 4,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false,\r\n width : '120px'\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n };\r\n }\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n vm.delete = remove;\r\n vm.showCalendar = showCalendar;\r\n //////////\r\n\r\n function gotoAdd()\r\n {\r\n $state.go('app.catalogs.employees.add');\r\n }\r\n\r\n function gotoDetail(id)\r\n {\r\n $state.go('app.catalogs.employees.detail', { id: id });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Estas seguro que quieres dar de baja a \" + item.name + \" \" + item.fatherLastname, function(){\r\n api.catalogs.employees.delete({ id: item.id }, function(response){\r\n api.catalogs.employees.query(function(response) { return vm.employees = response }); \r\n msg.success(\"Empleado borrado correctamente\");\r\n });\r\n });\r\n }\r\n\r\n function showCalendar(employeeId){\r\n $state.go(\"app.partners.prospects.calendar.employee\", { id: employeeId });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.employees', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.employees', {\r\n url : '/employees',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/employees/employees/employees.html',\r\n controller : 'CatalogsEmployeesController as vm'\r\n }\r\n }\r\n })\r\n .state('app.catalogs.employees.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/employees/employee/employee.html',\r\n controller : 'CatalogsEmployeeController as vm'\r\n }\r\n },\r\n resolve : {\r\n Employee: function ()\r\n {\r\n return { id: 0, name: '', active: true, birthdate: new Date(), startDate: new Date() };\r\n },\r\n EmployeeTypes: function(apiResolver){\r\n return apiResolver.resolve('catalogs.employeeTypes@query');\r\n },\r\n Users: function(apiResolver){\r\n return apiResolver.resolve('security.users@query');\r\n }\r\n },\r\n })\r\n .state('app.catalogs.employees.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/employees/employee/employee.html',\r\n controller : 'CatalogsEmployeeController as vm'\r\n }\r\n },\r\n resolve : {\r\n Employee: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@get', { id: $stateParams.id });\r\n },\r\n EmployeeTypes: function(apiResolver){\r\n return apiResolver.resolve('catalogs.employeeTypes@query');\r\n },\r\n Users: function(apiResolver){\r\n return apiResolver.resolve('security.users@query');\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.employees', {\r\n title: 'Empleados',\r\n state: 'app.catalogs.employees'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.catalogs.employees')\r\n .controller('CatalogsEmployeeController', catalogsEmployeeController);\r\n\r\n /** @ngInject */\r\n function catalogsEmployeeController($state, Employee, EmployeeTypes, Users, api, msg)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n vm.showCalendar = showCalendar; \r\n// //////////\r\n\r\n init();\r\n\r\n function init()\r\n {\r\n vm.item = Employee;\r\n vm.employeeTypes = EmployeeTypes;\r\n vm.users = Users;\r\n }\r\n\r\n function gotoReturn()\r\n {\r\n $state.go('app.catalogs.employees');\r\n }\r\n\r\n function save(){\r\n api.catalogs.employees.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Empleado guardado correctamente.');\r\n $state.go('app.catalogs.employees');\r\n }\r\n });\r\n }\r\n\r\n function showCalendar(){\r\n $state.go(\"app.partners.prospects.calendar.employee\", { id: vm.item.id });\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.catalogs.dues\")\r\n .controller(\"CatalogsDuesController\", controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction(\r\n $scope,\r\n Dues,\r\n $mdDialog,\r\n $document,\r\n msg,\r\n api,\r\n CONST_DATATABLES,\r\n $state\r\n ) {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.add = add;\r\n vm.openDetail = openDetail;\r\n vm.deleteItem = deleteItem;\r\n //////////\r\n\r\n function _init() {\r\n // Data\r\n // vm.dues = Dues;\r\n _refresh();\r\n vm.dtInstance = {};\r\n vm.dtOptions = $.extend(CONST_DATATABLES.OPTIONS, {\r\n dom: 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs: [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width: \"72px\",\r\n responsivePriority: 0,\r\n },\r\n {\r\n // Target the Active column\r\n targets: 2,\r\n responsivePriority: 2,\r\n filterable: false,\r\n sortable: false,\r\n },\r\n {\r\n // Target the Active column\r\n targets: 3,\r\n responsivePriority: 2,\r\n filterable: false,\r\n sortable: false,\r\n },\r\n {\r\n // Target the actions column\r\n targets: 4,\r\n responsivePriority: 1,\r\n filterable: false,\r\n sortable: false,\r\n },\r\n ],\r\n initComplete: function () {\r\n var api = this.api(),\r\n searchBox = angular.element(\"body\").find(\"#keyword-search\");\r\n\r\n // Bind an external input as a table wide search box\r\n if (searchBox.length > 0) {\r\n searchBox.on(\"keyup\", function (event) {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType: \"simple\",\r\n pageLength: 10,\r\n scrollY: \"auto\",\r\n responsive: true,\r\n filter: true,\r\n });\r\n }\r\n\r\n function _refresh() {\r\n vm.dues = api.catalogs.dues.query();\r\n }\r\n\r\n function add() {\r\n $state.go(\"app.catalogs.dues.add\");\r\n }\r\n\r\n function openDetail(item) {\r\n $state.go(\"app.catalogs.dues.detail\", { id: item.id });\r\n }\r\n\r\n function deleteItem(item) {\r\n msg.confirm(\"Estas seguro que deseas borrar este elemento?\", function () {\r\n api.catalogs.dues.delete({ idDue: item.id }, function (response) {\r\n if (response) {\r\n window.location.reload();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.dues')\r\n .controller('CatalogsDueController', dueController);\r\n\r\n /** @ngInject */\r\n function dueController(api, msg, $state, CONST_DATATABLES, Due, Periodicities, $mdDialog, $document, PartnerTypes, Accounts)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.returnBack = returnBack;\r\n vm.save = save;\r\n\r\n vm.showPrices = showPrices;\r\n vm.priceDelete = priceDelete;\r\n //////////\r\n\r\n function _init(){\r\n \r\n // Data\r\n vm.item = Due;\r\n vm.periodicities = Periodicities;\r\n vm.partnerTypes = PartnerTypes;\r\n vm.accounts = Accounts;\r\n\r\n vm.partnerTypes.push({ id: null, name: \"Todos\", active: true });\r\n\r\n if (vm.item && vm.item.id > 0){\r\n _getPrices();\r\n }\r\n\r\n vm.priceDtInstance = {};\r\n vm.priceDtOptions = $.extend(CONST_DATATABLES.OPTIONS, {\r\n filter: true \r\n });\r\n\r\n // Sat Catalogs\r\n vm.satTaxes = api.sat.taxes.query();\r\n vm.satTaxTypes = api.sat.taxTypes.query();\r\n }\r\n \r\n function returnBack(){\r\n $state.go(\"app.catalogs.dues\");\r\n }\r\n\r\n function save(){\r\n vm.item.satProductId = vm.item.satProduct.id; \r\n vm.item.satUnitId = vm.item.satUnit.id; \r\n\r\n // Save Item\r\n api.catalogs.dues.save(\r\n vm.item,\r\n function(response){\r\n msg.success(\"Cuota guardada correctamente.\");\r\n if (vm.item.id > 0){\r\n $state.go(\"app.catalogs.dues\");\r\n }else{\r\n vm.item = response; \r\n }\r\n });\r\n }\r\n\r\n\r\n // Prices\r\n function _getPrices(){\r\n if (vm.item && vm.item.id != 0)\r\n vm.prices = api.catalogs.duePrices.query({ dueId: vm.item.id });\r\n }\r\n\r\n function showPrices(ev, dueId, priceGroupId){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/dues/due/dialogs/dialog-prices/dialog-prices.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n escapeToClose : true,\r\n disableParentScroll: true,\r\n controller : \"CatalogsDuePricesDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _priceCallback,\r\n PriceGroupId : priceGroupId,\r\n DueId : dueId\r\n },\r\n }); \r\n }\r\n\r\n function _priceCallback(){\r\n _getPrices();\r\n }\r\n\r\n function priceDelete(groupId){\r\n msg.confirm(\"Esta seguro que desea borrar este precio?\", function(){\r\n api.catalogs.duePrices.delete({ groupId: groupId }, function(){\r\n msg.success(\"Precio borrado correctamente.\");\r\n _getPrices();\r\n });\r\n })\r\n }\r\n // /Prices\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.conceptosNotaCredito', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.conceptosNotaCredito', {\r\n url : '/conceptosNotaCredito',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/conceptos-nota-credito/conceptos-nota-credito/conceptos-nota-credito.html',\r\n controller : 'CatalogsConceptosNotaCreditoController as vm'\r\n }\r\n },\r\n resolve : {\r\n ConceptosNotaCredito: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.conceptosNotaCredito@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.conceptosNotaCredito.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/conceptos-nota-credito/concepto-nota-credito/concepto-nota-credito.html',\r\n controller : 'CatalogsConceptoNotaCreditoController as vm'\r\n }\r\n },\r\n resolve : {\r\n ConceptoNotaCredito: function (){ \r\n return { id: 0, name: '', active: true }\r\n },\r\n }\r\n })\r\n .state('app.catalogs.conceptosNotaCredito.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/conceptos-nota-credito/concepto-nota-credito/concepto-nota-credito.html',\r\n controller : 'CatalogsConceptoNotaCreditoController as vm'\r\n }\r\n },\r\n resolve : {\r\n ConceptoNotaCredito: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.conceptosNotaCredito@get', { id : $stateParams.id });\r\n },\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.conceptosNotaCredito', {\r\n title: 'Conceptos de NC',\r\n state: 'app.catalogs.conceptosNotaCredito'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.conceptosNotaCredito')\r\n .controller('CatalogsConceptosNotaCreditoController', catalogsConceptosNotaCreditoController);\r\n\r\n /** @ngInject */\r\n function catalogsConceptosNotaCreditoController($scope, ConceptosNotaCredito, $mdDialog, msg, api, CONST_DATATABLES, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.add = add;\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n _refresh();\r\n vm.dtConceptosInstance = {};\r\n vm.dtConceptosOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px',\r\n responsivePriority: 0,\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 2,\r\n filterable : false,\r\n sortable : false\r\n },\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n }\r\n\r\n function _refresh(){\r\n vm.conceptos = api.catalogs.conceptosNotaCredito.query();\r\n }\r\n\r\n function add(){\r\n $state.go(\"app.catalogs.conceptosNotaCredito.add\");\r\n }\r\n\r\n function detail(item){\r\n $state.go(\"app.catalogs.conceptosNotaCredito.detail\", { id: item.id });\r\n }\r\n\r\n function remove(item){\r\n msg.confirm('Estas seguro que deseas borrar este concepto?', function(){\r\n api.catalogs.conceptosNotaCredito.delete({ id: item.id }, function(response){\r\n if (response){\r\n _refresh();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.conceptosNotaCredito')\r\n .controller('CatalogsConceptoNotaCreditoController', catalogsConceptoNotaCreditoController);\r\n\r\n /** @ngInject */\r\n function catalogsConceptoNotaCreditoController(api, msg, $state, CONST_DATATABLES, ConceptoNotaCredito, $mdDialog, $document){\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.returnBack = returnBack;\r\n vm.save = save;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n vm.item = ConceptoNotaCredito;\r\n vm.saving = false;\r\n \r\n // Sat Catalogs\r\n vm.satTaxes = api.sat.taxes.query();\r\n vm.satTaxTypes = api.sat.taxTypes.query();\r\n }\r\n \r\n function returnBack(){\r\n $state.go(\"app.catalogs.conceptosNotaCredito\");\r\n }\r\n\r\n function save(){\r\n if (!vm.item.satProduct || !vm.item.satProduct.id || !vm.item.satUnit || !vm.item.satUnit.id)\r\n {\r\n msg.error(\"Seleccione producto del SAt y Unidad del SAT.\");\r\n vm.saving = false;\r\n return;\r\n }\r\n vm.item.satProductId = vm.item.satProduct.id;\r\n vm.item.satUnitId = vm.item.satUnit.id;\r\n // Save Item\r\n api.catalogs.conceptosNotaCredito.save(\r\n vm.item,\r\n function(response){\r\n msg.success(\"Concepto guardado correctamente.\");\r\n $state.go(\"app.catalogs.conceptosNotaCredito\");\r\n vm.saving = false;\r\n }, function(errorResponse){\r\n vm.saving = false;\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.activities', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.activities', {\r\n url : '/activities',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/activities/activities/activities.html',\r\n controller : 'CatalogsActivitiesController as vm'\r\n }\r\n },\r\n resolve : {\r\n Activities: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.activities@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.activities.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/activities/activity/activity.html',\r\n controller : 'CatalogsActivityController as vm'\r\n }\r\n },\r\n resolve : {\r\n Activity: function (){ \r\n return { id: 0, periodicityId: 0, name: '', prices: [], active: true }\r\n },\r\n Employees: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@query');\r\n }\r\n }\r\n })\r\n .state('app.catalogs.activities.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/activities/activity/activity.html',\r\n controller : 'CatalogsActivityController as vm'\r\n }\r\n },\r\n resolve : {\r\n Activity: function (apiResolver, $stateParams)\r\n {\r\n return apiResolver.resolve('catalogs.activities@get', { id : $stateParams.id });\r\n },\r\n Employees: function (apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.employees@query');\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.activities', {\r\n title: 'Actividades',\r\n state: 'app.catalogs.activities'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.activities')\r\n .controller('CatalogsActivityController', activityController);\r\n\r\n /** @ngInject */\r\n function activityController(api, msg, $state, CONST_DATATABLES, Activity, Employees, $mdDialog, $document)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.returnBack = returnBack;\r\n vm.save = save;\r\n\r\n vm.scheduleAdd = scheduleAdd;\r\n vm.scheduleAddCancel = scheduleAddCancel;\r\n vm.scheduleSave = scheduleSave;\r\n vm.scheduleEdit = scheduleEdit;\r\n vm.scheduleDelete = scheduleDelete;\r\n\r\n vm.allQuotaChange = allQuotaChange;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n vm.item = Activity;\r\n vm.employees = Employees.filter(function(e) { return e.active && e.employeeTypeId == 2 });\r\n vm.zones = api.catalogs.zones.query();\r\n\r\n if (vm.item && vm.item.id > 0){\r\n _getSchedule();\r\n }\r\n\r\n vm.scheduleDtInstance = {};\r\n vm.scheduleDtOptions = $.extend(CONST_DATATABLES.OPTIONS, {\r\n filter: true \r\n });\r\n }\r\n \r\n function returnBack(){\r\n $state.go(\"app.catalogs.activities\");\r\n }\r\n\r\n function save(){\r\n // Save Item\r\n api.catalogs.activities.save(\r\n vm.item,\r\n function(response){\r\n msg.success(\"Actividad guardada correctamente.\");\r\n if (vm.item.id > 0){\r\n $state.go(\"app.catalogs.activities\");\r\n }else{\r\n vm.item = response; \r\n }\r\n });\r\n }\r\n\r\n function _getSchedule(){\r\n if (vm.item && vm.item.id != 0)\r\n api.catalogs.activitiesSchedules.query({ activityId: vm.item.id }, function(response){\r\n vm.schedules = response;\r\n });\r\n }\r\n\r\n function scheduleAdd(ev){\r\n vm.schedule = {\r\n id : 0,\r\n activityId : vm.item.id,\r\n active : true,\r\n isMonday : true,\r\n mondayInitHour: \"1200\",\r\n mondayEndHour: \"1300\",\r\n isTuesday : false, \r\n tuesdayInitHour: \"1200\",\r\n tuesdayEndHour: \"1300\",\r\n isWednesday : false, \r\n wednesdayInitHour: \"1200\",\r\n wednesdayEndHour: \"1300\",\r\n isThursday : false, \r\n thursdayInitHour: \"1200\",\r\n thursdayEndHour: \"1300\",\r\n isFriday : false, \r\n fridayInitHour: \"1200\",\r\n fridayEndHour: \"1300\",\r\n isSaturday : false, \r\n saturdayInitHour: \"1200\",\r\n saturdayEndHour: \"1300\",\r\n isSunday : false, \r\n sundayInitHour: \"1200\",\r\n sundayEndHour: \"1300\",\r\n };\r\n angular.forEach(vm.zones, function(zone){ zone.selected = false }); \r\n\r\n $mdDialog.show({\r\n contentElement : '#detail-dialog-schedule',\r\n targetEvent : ev,\r\n clickOutsideToClose: true\r\n });\r\n }\r\n\r\n function scheduleAddCancel(){\r\n vm.schedule = null;\r\n $mdDialog.hide();\r\n }\r\n\r\n function scheduleSave(){\r\n vm.schedule.timeFrom = vm.schedule.fromHour + \":\" + vm.schedule.fromMinutes + \":00\" ;\r\n vm.schedule.timeTo = vm.schedule.toHour + \":\" + vm.schedule.toMinutes + \":00\";\r\n\r\n vm.schedule.zones = [];\r\n angular.forEach(vm.zones, function(zone) {\r\n if (zone.selected){\r\n vm.schedule.zones.push({\r\n id : 0,\r\n zoneId : zone.id,\r\n activityScheduleId : vm.schedule.id,\r\n quota : zone.quota\r\n });\r\n }\r\n });\r\n api.catalogs.activitiesSchedules.save(vm.schedule, function(response){\r\n msg.success(\"Horario agregado correctamente\");\r\n scheduleAddCancel();\r\n _getSchedule();\r\n });\r\n }\r\n\r\n function scheduleEdit(item, ev){\r\n vm.schedule = angular.copy(item);\r\n angular.forEach(vm.zones, function(zone){ zone.selected = false });\r\n angular.forEach(vm.schedule.zones, function(zone){\r\n \r\n var currentZone = vm.zones.filter(function(z){ return z.id == zone.zoneId})[0]\r\n currentZone.selected = true;\r\n currentZone.quota = zone.quota;\r\n });\r\n $mdDialog.show({\r\n contentElement : '#detail-dialog-schedule',\r\n targetEvent : ev,\r\n clickOutsideToClose: true\r\n });\r\n }\r\n\r\n function scheduleDelete(item){\r\n msg.confirm(\"Esta seguro que desea borrar este horario?\", function(){\r\n api.catalogs.activitiesSchedules.delete({ id: item.id }, function(){\r\n msg.success(\"Horario borrado correctamente.\");\r\n _getSchedule();\r\n });\r\n })\r\n }\r\n\r\n function allQuotaChange(){\r\n vm.schedule.mondayQuota = vm.allQuota;\r\n vm.schedule.tuesdayQuota = vm.allQuota;\r\n vm.schedule.wednesdayQuota = vm.allQuota;\r\n vm.schedule.thursdayQuota = vm.allQuota;\r\n vm.schedule.fridayQuota = vm.allQuota;\r\n vm.schedule.saturdayQuota = vm.allQuota;\r\n vm.schedule.sundayQuota = vm.allQuota;\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.activities')\r\n .controller('CatalogsActivitiesController', controllerFunction);\r\n\r\n /** @ngInject */\r\n function controllerFunction($scope, Activities, $mdDialog, $document, msg, api, CONST_DATATABLES, $state)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.add = add;\r\n vm.openDetail = openDetail;\r\n vm.deleteItem = deleteItem;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n vm.activities = Activities;\r\n vm.dtInstance = {};\r\n vm.dtOptions = $.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px',\r\n responsivePriority: 0,\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true\r\n });\r\n\r\n _refresh();\r\n }\r\n\r\n function _refresh(){\r\n vm.activities = api.catalogs.activities.query();\r\n }\r\n\r\n function add(){\r\n $state.go(\"app.catalogs.activities.add\");\r\n }\r\n\r\n function openDetail(item){\r\n $state.go(\"app.catalogs.activities.detail\", { id: item.id });\r\n }\r\n\r\n function deleteItem(item){\r\n msg.confirm('Estas seguro que deseas borrar esta Actividad?', function(){\r\n api.catalogs.activities.delete({ id: item.id }, function(response){\r\n if (response){\r\n _refresh();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs')\r\n .controller('CatalogsAccessTimeZonesController', catalogsAccessTimeZonesController);\r\n\r\n /** @ngInject */\r\n function catalogsAccessTimeZonesController($state, api, CONST_DATATABLES)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n function init(){\r\n api.catalogs.accessTimeZones.query(function(response) { return vm.accessTimeZones = response }); \r\n vm.dtAccessTimeZoneInstance = {};\r\n vm.dtAccessTimeZoneOptions = angular.copy($.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n responsivePriority: 1,\r\n },\r\n {\r\n // Target the actions column\r\n targets : 9,\r\n filterable : false,\r\n sortable : false\r\n },\r\n {\r\n // Target the actions column\r\n targets : 10,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function (){\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n }\r\n\r\n // Methods\r\n vm.gotoAdd = gotoAdd;\r\n vm.gotoDetail = gotoDetail;\r\n //////////\r\n\r\n function gotoAdd()\r\n {\r\n $state.go('app.catalogs.accessTimeZones.add');\r\n }\r\n\r\n function gotoDetail(id)\r\n {\r\n $state.go('app.catalogs.accessTimeZones.detail', { id: id });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var treeViewAccessData = [];\r\n\r\n angular\r\n .module('app.catalogs')\r\n .controller('CatalogsAccessTimeZoneController', catalogsAccessTimeZoneController);\r\n\r\n /** @ngInject */\r\n function catalogsAccessTimeZoneController($state, AccessTimeZone, api, msg)\r\n {\r\n var vm = this;\r\n\r\n// // Methods\r\n vm.gotoReturn = gotoReturn;\r\n vm.save = save;\r\n// //////////\r\n\r\n init();\r\n\r\n function init()\r\n {\r\n vm.item = AccessTimeZone;\r\n }\r\n\r\n function gotoReturn(){\r\n $state.go('app.catalogs.accessTimeZones');\r\n }\r\n\r\n function save(){\r\n api.catalogs.accessTimeZones.save(vm.item, function(response){\r\n if (response){\r\n msg.success('Horario de acceso guardado correctamente.');\r\n $state.go('app.catalogs.accessTimeZones');\r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.reports')\r\n .controller('ReportsTstController', reportsTstController);\r\n\r\n /** @ngInject */\r\n function reportsTstController(reportsService, api, authService)\r\n {\r\n var vm = this;\r\n \r\n vm.print = print;\r\n\r\n _init();\r\n\r\n function _init(){\r\n var appData = authService.getAppData();\r\n vm.logo = api.baseUrl.replace(\"api/\",\"\") + appData.settings.logoFile;\r\n vm.data = reportsService.getReportData().data;\r\n }\r\n\r\n function print(){\r\n var printContents = document.getElementById('printable').innerHTML;\r\n var originalContents = document.body.innerHTML; \r\n \r\n if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\r\n var popupWin = window.open('', '_blank', 'width=600,height=600,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no');\r\n popupWin.window.focus();\r\n popupWin.document.write(\r\n '' +\r\n '' +\r\n ''+\r\n ''+\r\n '
' + \r\n printContents + \r\n '
'+\r\n ''+\r\n '');\r\n popupWin.onbeforeunload = function (event) {\r\n popupWin.close();\r\n return '.\\n';\r\n };\r\n popupWin.onabort = function (event) {\r\n popupWin.document.close();\r\n popupWin.close();\r\n }\r\n } else {\r\n var popupWin = window.open('', '_blank', 'width=800,height=600');\r\n popupWin.document.open();\r\n popupWin.document.write(\r\n ''+\r\n ''+\r\n ''+\r\n '' + \r\n printContents + \r\n ''+\r\n '');\r\n popupWin.document.close();\r\n }\r\n popupWin.document.close();\r\n\r\n // var printContents = document.getElementById('printable').innerHTML;\r\n // var popupWin = window.open('', '_blank', 'width=800,height=800');\r\n // popupWin.document.open();\r\n // popupWin.document.write(\r\n // ''+\r\n // '' + \r\n // ''+\r\n // ''+\r\n // ''+\r\n // ''+\r\n // ''+\r\n // ''+\r\n // '' + printContents + ''+\r\n // '');\r\n // popupWin.document.close();\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.reports\")\r\n .controller(\"ReportsSelectorController\", reportsSelectorController);\r\n\r\n /** @ngInject */\r\n function reportsSelectorController(\r\n api,\r\n msg,\r\n ReportGroups,\r\n $state,\r\n reportsService,\r\n Branches,\r\n Users,\r\n authService\r\n ) {\r\n var vm = this;\r\n var appData = authService.getAppData();\r\n vm.user = appData.user;\r\n vm.branch = appData.branch;\r\n\r\n /// Methods\r\n vm.generate = generate;\r\n vm.paymentMethodChange = paymentMethodChange;\r\n /////////\r\n\r\n _init();\r\n\r\n function _init() {\r\n vm.branches = Branches;\r\n vm.users = Users.filter(function (u) {\r\n return u.active;\r\n });\r\n // vm.products = Products.filter(function(u) { return u.active });\r\n vm.products = api.catalogs.products.query();\r\n vm.dues = api.catalogs.dues.query();\r\n vm.periodicities = api.catalogs.periodicities.query();\r\n vm.employees = api.catalogs.employees.query();\r\n vm.paymentMethods = api.catalogs.paymentMethods.query();\r\n vm.paymentMethodOptions = api.catalogs.paymentMethodOptions.query();\r\n vm.agreements = api.catalogs.agreements.query();\r\n\r\n api.partners.partners.getByFilters(\r\n {\r\n keyword: \"dummy\",\r\n pageNumber: 0,\r\n pageSize: 0\r\n },\r\n function (response) {\r\n vm.partners = response;\r\n }\r\n );\r\n\r\n vm.generating = false;\r\n vm.selectedGroup = {\r\n reports: []\r\n };\r\n vm.selectedReport = {\r\n parameters: []\r\n };\r\n vm.groups = ReportGroups;\r\n\r\n vm.orderTypes = [\r\n { id: 0, name: \"TODOS\" },\r\n { id: 1, name: \"Recibos\" },\r\n { id: 2, name: \"Facturas\" }\r\n ];\r\n\r\n vm.viewModes = [\r\n { id: 1, name: \"Consolidado\" },\r\n { id: 2, name: \"Desglosado\" }\r\n ];\r\n\r\n vm.statusVigente = [\r\n { id: 1, name: \"Vigentes\" },\r\n { id: 2, name: \"Vencidos\" }\r\n ];\r\n\r\n vm.include = [\r\n { id: 1, name: \"Si\" },\r\n { id: 2, name: \"No\" }\r\n ];\r\n vm.generating = false;\r\n }\r\n\r\n function generate() { \r\n vm.generating = true;\r\n api.reports.reports.generate(\r\n vm.selectedReport,\r\n function (response) {\r\n vm.data = response;\r\n vm.generating = false;\r\n reportsService.setReportData({\r\n report: vm.selectedReport,\r\n data: response\r\n });\r\n var viewModeFilter = vm.selectedReport.parameters.filter(function (\r\n p\r\n ) {\r\n return p.type == 9; /*ViewMode*/\r\n });\r\n if (viewModeFilter.length > 0)\r\n $state.go(\r\n vm.selectedReport.state +\r\n \"-\" +\r\n viewModeFilter[0].value.name.toLowerCase()\r\n );\r\n else $state.go(vm.selectedReport.state);\r\n },\r\n function () {\r\n vm.generating = false; \r\n }\r\n );\r\n }\r\n\r\n function paymentMethodChange(itemId) {\r\n vm.pmid = itemId;\r\n }\r\n\r\n vm.selectedUsers = [];\r\n vm.usersSelectUnselectAll = function () {\r\n if (vm.selectedUsers.length == vm.users.length) vm.selectedUsers = [];\r\n else vm.selectedUsers = vm.users;\r\n };\r\n\r\n vm.selectedProducts = [];\r\n vm.productSelectUnselectAll = function () {\r\n if (vm.selectedProducts.length == vm.products.length)\r\n vm.selectedProducts = [];\r\n else vm.selectedProducts = vm.products;\r\n };\r\n }\r\n})();\r\n\n/* eslint-disable no-undef */\r\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.reports\")\r\n .controller(\"ReportsDashboardController\", reportsDashboardController);\r\n\r\n /** @ngInject */\r\n function reportsDashboardController(\r\n api,\r\n $filter \r\n ) {\r\n var vm = this; \r\n var currencyTooltipConfig = {\r\n callbacks: {\r\n label: function(tooltipItem) {\r\n return currencyFriendlyFormat(tooltipItem.value);\r\n }\r\n }\r\n };\r\n var currnecyYAxisTicksConfig = { \r\n callback: function (label) {\r\n return currencyFriendlyFormat(label, 0)\r\n }\r\n };\r\n\r\n _init();\r\n\r\n function _init() {\r\n _loadPopulation();\r\n _loadDebts();\r\n _loadPartnersByAge();\r\n _loadPartnersByGender();\r\n _loadInscriptions();\r\n _loadInscriptionsByWeek();\r\n _loadSales();\r\n _loadSalesByType();\r\n _loadSalesTop();\r\n _loadSalesTopByType();\r\n _loadSalesYear();\r\n _loadSalesYearByType();\r\n }\r\n\r\n function _loadPopulation(){\r\n api.reports.dashboard.population(\r\n function(data){ \r\n vm.population = {\r\n labels: data.map(function(x) { return x.name }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: data.map(function(x) { return x.amount}).reduce(function(a,b) {return a + b}),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n ); \r\n\r\n }\r\n\r\n function _loadDebts(){\r\n api.reports.dashboard.debts(\r\n function(data){ \r\n vm.debts = {\r\n labels: data.map(function(x) { return x.name }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n );\r\n }\r\n \r\n function _loadPartnersByAge(){\r\n api.reports.dashboard.age(\r\n function(data){ \r\n vm.byage = {\r\n labels: data.map(function(x) { return x.name }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n );\r\n }\r\n \r\n function _loadPartnersByGender(){\r\n api.reports.dashboard.gender(\r\n function(data){ \r\n vm.bygender = {\r\n labels: data.map(function(x) { return x.name }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n );\r\n }\r\n \r\n function _loadInscriptions(){\r\n api.reports.dashboard.inscriptions(\r\n function(data){ \r\n \r\n var group = _(data)\r\n .groupBy(function(x) { return x.type })\r\n .map(function(i, k) { return ({\r\n type: k,\r\n items: i\r\n })})\r\n .value(); \r\n\r\n vm.inscriptions = {\r\n labels: group[0].items.map(function(x) { return x.name }),\r\n data: group.map(function(x) { return x.items.map(function(y) { return y.amount }) }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n series: group.map(function(x) { return x.type }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n );\r\n \r\n }\r\n \r\n function _loadInscriptionsByWeek(){\r\n api.reports.dashboard.inscriptionsbyweek(\r\n function(data){ \r\n if (!data || !data.length){\r\n vm.inscriptionsbyweek = {};\r\n return;\r\n }\r\n var group = _(data)\r\n .groupBy(function(x) { return x.type })\r\n .map(function(i, k) { return ({\r\n type: k,\r\n items: i\r\n })})\r\n .value(); \r\n\r\n vm.inscriptionsbyweek = {\r\n labels: group[0].items.map(function(x) { return x.name }),\r\n data: group.map(function(x) { return x.items.map(function(y) { return y.amount }) }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n series: group.map(function(x) { return x.type }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n );\r\n \r\n }\r\n \r\n function _loadSales(){\r\n api.reports.dashboard.sales(\r\n function(data){ \r\n vm.sales = {\r\n labels: data.map(function(x) { return x.date.split('T')[0] }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: { \r\n scales: {\r\n yAxes: [{ \r\n ticks: currnecyYAxisTicksConfig\r\n }]\r\n },\r\n tooltips: currencyTooltipConfig\r\n } \r\n };\r\n }\r\n ); \r\n }\r\n \r\n function _loadSalesByType(){\r\n api.reports.dashboard.salesbytype(\r\n function(data){ \r\n if (!data || !data.length){\r\n vm.salesbytype = {}\r\n return;\r\n }\r\n\r\n var group = _(data)\r\n .groupBy(function(x) { return x.type })\r\n .map(function(i, k) { return ({\r\n type: k,\r\n items: i\r\n })})\r\n .value(); \r\n\r\n vm.salesbytype = {\r\n labels : group[0].items.map(function(x) { return x.date.split('T')[0] }),\r\n data : group.map(function(x) { return x.items.map(function(y) { return y.amount }) }),\r\n total : _(data).sumBy(function(x) { return x.amount }),\r\n series : group.map(function(x) { return x.type }),\r\n options: {\r\n legend : { \r\n display : true, \r\n position : \"top\"\r\n },\r\n scaleShowVerticalLines: false,\r\n responsive: true,\r\n scales: {\r\n xAxes: [{\r\n stacked: true \r\n }],\r\n yAxes: [{\r\n stacked: true,\r\n ticks: currnecyYAxisTicksConfig\r\n }]\r\n },\r\n tooltips: currencyTooltipConfig\r\n }\r\n };\r\n }\r\n ); \r\n }\r\n\r\n function _loadSalesTop(){\r\n api.reports.dashboard.salestop(\r\n function(data){ \r\n if (!data || !data.length){\r\n vm.salestop = {}\r\n return;\r\n }\r\n\r\n vm.salestop = {\r\n labels: data.map(function(x) { return x.name }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }\r\n }\r\n };\r\n }\r\n ); \r\n }\r\n\r\n function _loadSalesTopByType(){\r\n api.reports.dashboard.salestopbytype(\r\n function(data){ \r\n var total = _(data).sumBy(function(x) { return x.amount });\r\n vm.salestopbytype = {\r\n labels: data.map(function(x) { return x.name + ' - ' + Math.round((x.amount / total) * 100) + '%' }),\r\n data: data.map(function(x) { return x.amount }),\r\n total: total,\r\n options: { \r\n legend : { \r\n display : true, \r\n position : \"right\"\r\n }, \r\n }\r\n };\r\n }\r\n ); \r\n }\r\n \r\n function _loadSalesYear(){\r\n api.reports.dashboard.salesyear(\r\n function(data){ \r\n if (!data || !data.length){\r\n vm.salesyear = {}\r\n return;\r\n }\r\n\r\n\r\n var group = _(data)\r\n .groupBy(function(x) { return x.year })\r\n .map(function(i, k) { return ({\r\n year: k,\r\n items: i\r\n })})\r\n .value();\r\n\r\n vm.salesyear = {\r\n labels: group[0].items.map(function(x) { return x.monthName }),\r\n data: group.map(function(x) { return x.items.map(function(y) { return y.amount }) }),\r\n series : group.map(function(x) { return x.year }),\r\n total: _(data).sumBy(function(x) { return x.amount }),\r\n options: {\r\n legend : { \r\n display : true, \r\n position : \"top\"\r\n }, \r\n scales: {\r\n yAxes: [{ \r\n ticks: currnecyYAxisTicksConfig\r\n }]\r\n },\r\n tooltips: currencyTooltipConfig\r\n } \r\n };\r\n }\r\n ); \r\n }\r\n\r\n function _loadSalesYearByType(){\r\n api.reports.dashboard.salesyearbytype(\r\n function(data){ \r\n if (!data || !data.length){\r\n vm.salesyearbytype = {}\r\n return;\r\n }\r\n\r\n var group = _(data)\r\n .groupBy(function(x) { return x.type })\r\n .map(function(i, k) { return ({\r\n type: k,\r\n items: i\r\n })})\r\n .value(); \r\n\r\n vm.salesyearbytype = {\r\n labels : group[0].items.map(function(x) { return x.monthName }),\r\n data : group.map(function(x) { return x.items.map(function(y) { return y.amount }) }),\r\n total : _(data).sumBy(function(x) { return x.amount }),\r\n series : group.map(function(x) { return x.type }),\r\n options: {\r\n legend : { \r\n display : true, \r\n position : \"top\"\r\n },\r\n scaleShowVerticalLines: false,\r\n responsive: true, \r\n scales: {\r\n xAxes: [{\r\n stacked: true \r\n }],\r\n yAxes: [{\r\n stacked: true,\r\n ticks: currnecyYAxisTicksConfig\r\n }]\r\n },\r\n tooltips: currencyTooltipConfig\r\n }\r\n };\r\n }\r\n ); \r\n }\r\n\r\n function currencyFriendlyFormat(value, decimals){\r\n if (value >= 1000000){\r\n return $filter('currency')(value / 1000000, '$ ', decimals ? decimals : 2) + ' M';\r\n }else if(value > 10000) {\r\n return $filter('currency')(value / 1000, '$ ', decimals ? decimals : 0) + ' k';\r\n }else{\r\n return $filter('currency')(value, '$ ', decimals ? decimals : 0);\r\n }\r\n }\r\n\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.partners')\r\n .controller('PartnersProspectsController', partnersProspectsController);\r\n\r\n /** @ngInject */\r\n function partnersProspectsController($state, api, CONST_DATATABLES, msg, $mdDialog, Prospects)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.selectProspect = selectProspect;\r\n vm.showDetail = showDetail;\r\n vm.prospectRemove = prospectRemove;\r\n vm.prospectSignup = prospectSignup;\r\n vm.prospectsFilter = prospectsFilter\r\n vm.commentAdd = commentAdd;\r\n vm.commentAccept = commentAccept;\r\n vm.commentCancel = commentCancel;\r\n vm.showCalendar = showCalendar;\r\n ////////////\r\n\r\n function _init(){\r\n vm.prospects = Prospects;\r\n vm.prospectComments = []; \r\n _getProspects();\r\n }\r\n\r\n function _getProspects(){\r\n vm.prospects = api.partners.prospects.query(); \r\n vm.prospectComments = [];\r\n }\r\n\r\n function showDetail(ev, item){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/partners/views/prospects/dialogs/dialog-prospect/dialog-prospect.html',\r\n targetEvent : ev,\r\n clickOutsideToClose: false,\r\n escapeToClose : false,\r\n disableParentScroll: true,\r\n controller : \"PartnersProspectsProspectDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Prospect : item,\r\n Callback : _getProspects\r\n }\r\n });\r\n }\r\n\r\n vm.selecting = false;\r\n function selectProspect(prospect, fromSuccesComment){\r\n if (vm.selectedProspect && (vm.selectedProspect.id == prospect.id && !fromSuccesComment))\r\n return;\r\n vm.selecting = true;\r\n vm.selectedProspect = prospect;\r\n vm.prospectComments = [];\r\n api.partners.prospects.get({id: prospect.id }, function(response){\r\n vm.prospectComments = response.comments;\r\n vm.selecting = false;\r\n }, function(error){\r\n vm.selecting = false;\r\n });\r\n }\r\n\r\n function prospectRemove(prospect){\r\n msg.confirm(\"Esta seguro que desea remover este prospecto\", function(){\r\n api.partners.prospects.delete({id: prospect.id}, function(response){\r\n msg.success(\"Prospecto borrado correctamente.\");\r\n _showDetailCallback();\r\n });\r\n });\r\n }\r\n\r\n function commentAdd(){\r\n if (!vm.selectedProspect)\r\n {\r\n msg.error(\"Seleccione prospecto\");\r\n return;\r\n }\r\n vm.addingComment = true;\r\n vm.comment = {\r\n id: 0,\r\n comment: '',\r\n prospectId: vm.selectedProspect.id,\r\n prospect: vm.prospect\r\n };\r\n }\r\n\r\n function commentAccept(){\r\n api.partners.prospectComments.save(vm.comment, function(response){\r\n msg.success(\"Comentario guardado correctamente\");\r\n vm.comment = {};\r\n selectProspect(vm.selectedProspect, true);\r\n vm.addingComment = false;\r\n });\r\n }\r\n\r\n function commentCancel(){\r\n vm.comment = {};\r\n vm.addingComment = false; \r\n }\r\n\r\n function prospectSignup(prospect){\r\n msg.confirm(\"Esta seguro que desea inscribir a \" + prospect.completeName + \"?\", function(){\r\n $state.go(\"app.partners.partners.add.prospect\", { id: prospect.id });\r\n });\r\n }\r\n\r\n function prospectsFilter(){ \r\n vm.prospectsFiltered = vm.prospects;\r\n if (vm.onlySignedUpFilter === true){\r\n vm.prospectsFiltered = vm.prospects.filter(function(p){ return p.isSignedUp });\r\n }\r\n }\r\n\r\n function showCalendar(employeeId, prospectId){\r\n if (employeeId && prospectId)\r\n $state.go(\"app.partners.prospects.calendar.employee-prospect\", { id: employeeId, prospectId: prospectId }); \r\n else\r\n $state.go(\"app.partners.prospects.calendar\");\r\n }\r\n }\r\n})();\n(function(){\r\n\r\n 'use strict';\r\n \r\n angular\r\n .module('app.partners')\r\n .controller('PartnersProspectCalendarController', partnerProspectCallendarController);\r\n\r\n /** @ngInject */\r\n function partnerProspectCallendarController($mdDialog, api, msg, Seller, Prospect, authService)\r\n {\r\n var vm = this;\r\n \r\n // Methods\r\n vm.addEvent = addEvent;\r\n vm.next = next;\r\n vm.prev = prev;\r\n vm.closeDialog = closeDialog;\r\n vm.selectedSellerChange = selectedSellerChange;\r\n vm.selectedProspectChange = selectedProspectChange;\r\n //////////\r\n\r\n _init();\r\n \r\n function _init(){\r\n vm.events = [];\r\n var appData = authService.getAppData(); \r\n api.catalogs.employees.query(function(response){\r\n vm.sellers = response.filter(function(e){ return e.employeeTypeId == 1 /*Seller*/ ;})\r\n \r\n if (!appData.user.userType.isShowAllProspects){\r\n vm.sellers = vm.sellers.filter(function(e){ return e.userId == appData.user.id });\r\n }\r\n\r\n if (vm.sellers.length > 0){\r\n if (Seller.id == 0)\r\n vm.selectedSeller = vm.sellers[0]; \r\n else\r\n vm.selectedSeller = vm.sellers.filter(function(s){ return s.id == Seller.id })[0]; \r\n }\r\n _getEvents();\r\n });\r\n\r\n api.partners.prospects.query(function(response){\r\n vm.prospects = response.filter(function(p){ return !p.isSignedUp; })\r\n if (vm.prospects.length > 0){\r\n if (Prospect.id != 0)\r\n vm.selectedProspect = vm.prospects.filter(function(p){ return p.id == Prospect.id })[0]; \r\n }\r\n _getEvents();\r\n });\r\n\r\n vm.calendarUiConfig = {\r\n calendar: {\r\n defaultView : 'month',\r\n editable : true,\r\n eventLimit : false,\r\n header : '',\r\n handleWindowResize: false,\r\n aspectRatio : 1,\r\n dayNames : ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'],\r\n dayNamesShort : ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'],\r\n monthNames : [\"Enero\", 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],\r\n viewRender : function (view)\r\n {\r\n vm.calendarView = view;\r\n vm.calendar = vm.calendarView.calendar;\r\n vm.currentMonthShort = vm.calendar.getDate().format('MMM');\r\n },\r\n columnFormat : {\r\n month: 'ddd',\r\n week : 'ddd D',\r\n day : 'ddd D'\r\n },\r\n selectable : true,\r\n selectHelper : true,\r\n eventClick : eventDetail,\r\n select : select\r\n }\r\n };\r\n }\r\n\r\n function _getEvents(){\r\n // vm.events = [];\r\n\r\n if (!vm.selectedSeller)\r\n return;\r\n\r\n\r\n if (vm.prospect){\r\n api.catalogs.employeeCalendarEvents.getByProspect({\r\n id: vm.selectedSeller.id,\r\n prospectId: vm.prospect.id\r\n }, function(response){ \r\n _getEventsResponse(response); \r\n });\r\n }else{\r\n api.catalogs.employeeCalendarEvents.getByProspect({\r\n id: vm.selectedSeller.id }, function(response){ \r\n _getEventsResponse(response);\r\n });\r\n }\r\n\r\n }\r\n\r\n function _getEventsResponse(response){\r\n var eventList = [];\r\n eventList = response;\r\n if (vm.events.length == 0)\r\n vm.events.push(eventList);\r\n else\r\n vm.events[0] = eventList;\r\n }\r\n\r\n /**\r\n * Go to next on current view (week, month etc.)\r\n */\r\n function next(){\r\n vm.calendarView.calendar.next();\r\n }\r\n\r\n /**\r\n * Go to previous on current view (week, month etc.)\r\n */\r\n function prev(){\r\n vm.calendarView.calendar.prev();\r\n }\r\n\r\n /**\r\n * Show event detail\r\n *\r\n * @param calendarEvent\r\n * @param e\r\n */\r\n function eventDetail(calendarEvent, e){\r\n // if (calendarEvent.title && calendarEvent.title != '' && calendarEvent.title.indexOf(\" - (\") != -1)\r\n // calendarEvent.title = calendarEvent.title.split(\" - (\")[0];\r\n showEventFormDialog(\"edit\", calendarEvent, calendarEvent.start, calendarEvent.end, e );\r\n }\r\n\r\n /**\r\n * Add new event in between selected dates\r\n *\r\n * @param start\r\n * @param end\r\n * @param e\r\n */\r\n function select(start, end, e){\r\n if (start.format(\"HHmmss\") == \"000000\" && end.format(\"HHmmss\") == \"000000\")\r\n end.add(-1,'d');\r\n showEventFormDialog('add', null, start, end, e);\r\n }\r\n\r\n /**\r\n * Add event\r\n *\r\n * @param e\r\n */\r\n function addEvent(e){\r\n var start = new Date(),\r\n end = new Date();\r\n\r\n showEventFormDialog('add', null, start, end, e);\r\n }\r\n\r\n /**\r\n * Show event add/edit form dialog\r\n *\r\n * @param type\r\n * @param calendarEvent\r\n * @param start\r\n * @param end\r\n * @param e\r\n */\r\n function showEventFormDialog(type, calendarEvent, start, end, e){\r\n var dialogData = {\r\n type : type,\r\n calendarEvent: calendarEvent,\r\n start : moment.utc(start),\r\n end : moment.utc(end)\r\n };\r\n\r\n $mdDialog.show({\r\n controller : 'PartnersProspectCalendarEventController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/partners/views/prospectCalendar/dialogs/dialog-event/dialog-event.html',\r\n targetEvent : e,\r\n clickOutsideToClose: true,\r\n locals : {\r\n DialogData : dialogData,\r\n Seller : vm.selectedSeller,\r\n Prospects : vm.prospects,\r\n Prospect : vm.selectedProspect\r\n }\r\n }).then(function (response){\r\n _getEvents();\r\n // if (response){\r\n // $scope.onLoadCallback({newEvent: response });\r\n // _getEvents();\r\n // }\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function selectedSellerChange(){\r\n _getEvents();\r\n }\r\n\r\n function selectedProspectChange(){\r\n _getEvents();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.license', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.license', {\r\n url : '/license',\r\n views : {\r\n 'main@' : {\r\n templateUrl: 'app/core/layouts/content-only.html',\r\n controller: 'MainController as vm'\r\n },\r\n 'content@app.license': {\r\n templateUrl: 'app/main/license/license.html',\r\n controller: 'LicenseController as vm'\r\n }\r\n }\r\n });\r\n }\r\n\r\n \r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.license')\r\n .controller('LicenseLoginDialogController', licenseLoginDialogController);\r\n\r\n /** @ngInject */\r\n function licenseLoginDialogController(api, $mdDialog, msg, Callback)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){\r\n vm.callback = Callback;\r\n vm.item = {\r\n date: new Date()\r\n };\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function accept(){\r\n api.app.access.license(vm.item, function(response){\r\n vm.callback(response.license);\r\n close();\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices', \r\n [\r\n 'datatables',\r\n // Submodules\r\n 'app.invoices.orders', \r\n 'app.invoices.plannedProducts',\r\n 'app.invoices.turns',\r\n 'app.invoices.notasCredito',\r\n 'app.invoices.complements',\r\n 'app.invoices.batch'\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices', {\r\n abstract: true,\r\n url : '/invoices'\r\n })\r\n .state('app.invoices.receipt', {\r\n url : '/:id/:type',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/receipt/receipt.html',\r\n controller : 'InvoicesReceiptController as vm'\r\n }\r\n },\r\n resolve : {\r\n Item: function (apiResolver, $stateParams)\r\n { \r\n if ($stateParams.type && $stateParams.type !== '' && $stateParams.type === \"complement\")\r\n return apiResolver.resolve('invoices.complements@getReceipt', { id : $stateParams.id });\r\n else\r\n return apiResolver.resolve('invoices.invoices@get', { id : $stateParams.id });\r\n }\r\n },\r\n bodyClass: 'invoice printable'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps', {\r\n title : '',\r\n group : true,\r\n weight: 1\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.invoices', {\r\n title : 'Facturación',\r\n icon : 'icon-currency-usd',\r\n weight: 3\r\n }); \r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices')\r\n .controller('InvoicesTurnsController', invoicesTurnsController);\r\n\r\n /** @ngInject */\r\n function invoicesTurnsController(api, msg)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.closeTurn = closeTurn;\r\n vm.openTurn = openTurn;\r\n vm.getTurns = getTurns;\r\n ////////\r\n\r\n function _init(){\r\n var from = moment().add(-1, 'days');\r\n var to = moment(); \r\n \r\n vm.from = from.format('MM/DD/YYYY');\r\n vm.to = to.format('MM/DD/YYYY');\r\n\r\n getTurns();\r\n\r\n vm.filterOpenOptions = [\r\n { text: 'Todos', value: '' },\r\n { text: 'Solo Abiertos', value: true },\r\n { text: 'Solo Cerrados', value: false },\r\n ];\r\n vm.isOpen = '';\r\n }\r\n\r\n function getTurns(){\r\n api.invoices.turns.get({\r\n dateIni: moment(vm.from).format(\"DD-MM-YYYY\"), \r\n dateEnd: moment(vm.to).format(\"DD-MM-YYYY\")\r\n },function(response){\r\n vm.turns = response;\r\n });\r\n }\r\n\r\n function closeTurn(turn){\r\n if (confirm(\"Estas seguro que deseas cerrar el turno \" + turn.id + \"?\")){\r\n turn.isOpen = false;\r\n api.invoices.turns.save(turn, function(response){\r\n getTurns();\r\n msg.success(\"Turno cerrado\");\r\n });\r\n }\r\n }\r\n\r\n function openTurn(){\r\n if (confirm(\"Se abrira un nuevo turno, desea continuar?\")){\r\n api.invoices.turns.save({\r\n id: 0\r\n }, function(response){\r\n getTurns();\r\n msg.success(\"Turno creado correctamente.\");\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n\r\n\r\n angular\r\n .module('app.invoices')\r\n .controller('InvoicesReceiptController', invoicesReceiptController);\r\n\r\n /** @ngInject */\r\n function invoicesReceiptController($scope, api, Item, authService, msg, $stateParams)\r\n {\r\n var vm = this;\r\n\r\n vm.item = Item;\r\n vm.picturesUrl = api.baseUrl.replace(\"api/\",\"\");\r\n vm.settings = authService.getAppData().settings;\r\n vm.logoSource = \"data:image/jpeg;base64, \" + vm.settings.logoBase64String;\r\n vm.pdfSaving = true; \r\n\r\n // Generate QR code\r\n var qrcode = new QRCode(document.getElementById(\"qrcode\"));\r\n qrcode.makeCode(vm.item.qrCode);\r\n \r\n $scope.$on('$viewContentLoaded', function() {\r\n vm.pdfSaving = true; \r\n // Send to Api for Save in PDF\r\n setTimeout(sendToApi, 1500);\r\n });\r\n\r\n\r\n // Save PDF\r\n vm.pdfDownload = function(){\r\n html2canvas(document.querySelector(\"#invoice-card\")).then(function(canvas){\r\n var data = canvas.toDataURL();\r\n var docDefinition = {\r\n content: [{\r\n image: data,\r\n width: 500,\r\n }]\r\n };\r\n pdfMake.createPdf(docDefinition).download(vm.item.folio + \".pdf\"); \r\n // pdfMake.createPdf(docDefinition).open();\r\n }); \r\n }\r\n\r\n vm.sendMail = function(){\r\n msg.prompt(\"Correo Electrónico\", \"Ingrese correo electrónico\", function(email){\r\n if (!email || email == ''){\r\n msg.error(\"Correo electrónico inválido. verifique\");\r\n return;\r\n }\r\n\r\n api.invoices.email.save({\r\n invoiceId: vm.item.id,\r\n invoiceFolio : vm.item.folio,\r\n email: email\r\n }, function(response){\r\n msg.success(\"Correo Electrónico enviado correctamente.\");\r\n });\r\n\r\n }, null, null, vm.item.partner.email);\r\n }\r\n\r\n function sendToApi(){\r\n vm.pdfSaving = true;\r\n html2canvas(document.querySelector(\"#invoice-card\")).then(function(canvas){\r\n var data = canvas.toDataURL();\r\n var docDefinition = {\r\n content: [{\r\n image: data,\r\n width: 500,\r\n }]\r\n };\r\n pdfMake.createPdf(docDefinition).getBase64(function(encodedString) {\r\n // Send to API Service\r\n api.invoices.pdf.save({\r\n invoiceId : vm.item.id,\r\n invoiceFolio : vm.item.folio,\r\n base64String : encodedString\r\n }, function(response){\r\n vm.pdfSaving = false;\r\n });\r\n });\r\n });\r\n }\r\n\r\n vm.fileDownload = function(filePath,extension){\r\n api.catalogs.files.getFile({\r\n data: filePath\r\n }, function(response){\r\n // Set up the link\r\n var link = document.createElement(\"a\");\r\n link.setAttribute(\"target\",\"_blank\");\r\n link.setAttribute(\"href\",\"data:application/octet-stream;base64,\" + response.data);\r\n link.setAttribute(\"download\",vm.item.folio + \".\" + extension );\r\n link.click();\r\n });\r\n }\r\n\r\n \r\n var unidades = [\"\", \"uno\", \"dos\", \"tres\", \"cuatro\", \"cinco\", \"seis\", \"siete\", \"ocho\", \"nueve\"];\r\n var especiales = [\"diez\", \"once\", \"doce\", \"trece\", \"catorce\", \"quince\", \"dieciséis\", \"diecisiete\", \"dieciocho\", \"diecinueve\"];\r\n var decenas = [\"\", \"\", \"veinte\", \"treinta\", \"cuarenta\", \"cincuenta\", \"sesenta\", \"setenta\", \"ochenta\", \"noventa\"];\r\n var centenas = [\"\", \"ciento\", \"doscientos\", \"trescientos\", \"cuatrocientos\", \"quinientos\", \"seiscientos\", \"setecientos\", \"ochocientos\", \"novecientos\"];\r\n \r\n function convertirGrupo(n) {\r\n if (n === \"000\") return \"\";\r\n var texto = \"\";\r\n var c = parseInt(n[0]), d = parseInt(n[1]), u = parseInt(n[2]);\r\n \r\n if (c > 0) {\r\n texto += (c === 1 && d === 0 && u === 0) ? \"cien\" : centenas[c] + \" \";\r\n }\r\n if (d === 1) {\r\n texto += especiales[u];\r\n } else {\r\n texto += decenas[d] + (d > 2 && u > 0 ? \" y \" : \"\") + (u === 1 ? \"un\" : unidades[u]);\r\n }\r\n return texto.trim();\r\n }\r\n\r\n function convertirNumero(num) {\r\n var numStr = num.toString().split(\".\");\r\n var entero = numStr[0].padStart(9, \"0\"); // Asegura que tenga al menos 9 dígitos\r\n var centavos = numStr[1] ? numStr[1].padEnd(2, \"0\").substring(0, 2) : \"00\"; // Obtiene los centavos\r\n \r\n var millones = entero.substring(0, 3);\r\n var miles = entero.substring(3, 6);\r\n var centenas = entero.substring(6, 9);\r\n \r\n var texto = \"\";\r\n \r\n if (millones !== \"000\") {\r\n texto += millones === \"001\" ? \"un millón \" : convertirGrupo(millones) + \" millones \";\r\n }\r\n if (miles !== \"000\") {\r\n texto += miles === \"001\" ? \"mil \" : convertirGrupo(miles) + \" mil \";\r\n }\r\n if (centenas !== \"000\") {\r\n texto += convertirGrupo(centenas);\r\n }\r\n \r\n texto = texto.trim() || \"cero\"; // Si el número es 0, devolver \"cero\" \r\n \r\n return texto + (parseInt(num) === 1 ? ' peso ' : ' pesos ') + centavos + '/100 M.N.';\r\n }\r\n \r\n vm.numberToLetters = function(num) {\r\n \r\n if (isNaN(num)) return \"Valor no válido\"; \r\n return convertirNumero(num).toUpperCase(); \r\n }\r\n\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.invoices')\r\n .controller('InvoicesPlannedProductsController', invoicesPlannedProductsController);\r\n\r\n /** @ngInject */\r\n function invoicesPlannedProductsController($state, api, CONST_DATATABLES, $mdDialog, $document, PlannedProducts, msg)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.add = add;\r\n vm.remove = remove;\r\n //////////\r\n\r\n function init(){\r\n vm.plannedProducts = PlannedProducts;\r\n }\r\n\r\n function add(ev){\r\n $mdDialog.show({\r\n controller : 'InvoicesPlannedProductsDialogAddController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/invoices/views/plannedProducts/dialogs/dialog-add/dialog-add.html',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n locals : {\r\n Callback : _addCallback\r\n }\r\n });\r\n }\r\n \r\n function _addCallback(){\r\n vm.plannedProducts = api.invoices.plannedProducts.query();\r\n }\r\n\r\n function remove(item){\r\n msg.confirm(\"Esta seguro que desea borrar este elemento?\", function(){\r\n if (item.groupId && item.groupId != 0){\r\n msg.confirm(\"Este registro pertenece a un lote, se borrara el lote completo, desea continuar?\", function(){\r\n _remove(item);\r\n });\r\n }else{\r\n _remove(item);\r\n }\r\n });\r\n }\r\n\r\n function _remove(item){\r\n api.invoices.plannedProducts.delete({ id: item.id }, function(response){\r\n msg.success(\"Registro(s) borrado(s) correctamente.\");\r\n _addCallback();\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.complements', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.complements', {\r\n url : '/complements',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/complements/complements.html',\r\n controller : 'InvoicesComplementsController as vm'\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.complements', {\r\n title: 'Complementos',\r\n shortcuticon : 'icon-plus', \r\n state: 'app.invoices.complements'\r\n });\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.complements\")\r\n .controller(\"InvoicesComplementsController\", invoicesComplementsController);\r\n\r\n /** @ngInject */\r\n function invoicesComplementsController(api, msg, $state) {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.getPendingInvoices = getPendingInvoices;\r\n // vm.view = view;\r\n vm.selectInvoice = selectInvoice;\r\n vm.saveComplement = saveComplement;\r\n vm.view = view;\r\n ////////\r\n\r\n function _init() {\r\n var now = moment();\r\n\r\n var fromFake = moment([now.year() - 1, now.month()]); // TODO: HARDCODE - Quitar\r\n var from = moment([now.year(), now.month()]);\r\n\r\n var to = moment(from).endOf(\"month\");\r\n vm.from = fromFake.format(\"MM/DD/YYYY\");\r\n vm.to = to.format(\"MM/DD/YYYY\");\r\n vm.maxDate = new Date();\r\n\r\n vm.invoice = null;\r\n vm.pendingInvoices = [];\r\n vm.invoiceComplements = [];\r\n vm.includeCompletePayed = false;\r\n vm.complement = {};\r\n vm.satPayments = [];\r\n\r\n // Get SAT Payment Methods\r\n api.sat.payments.query(function (response) {\r\n vm.satPayments = response;\r\n });\r\n\r\n api.sat.banks.query(function (response) {\r\n vm.satBanks = response;\r\n });\r\n\r\n api.sat.cadenas.query(function (response) {\r\n vm.satCadenas = response;\r\n });\r\n\r\n getPendingInvoices();\r\n\r\n vm.balance = 0;\r\n }\r\n\r\n function selectInvoice(invoice) { \r\n vm.selectedInvoice = invoice;\r\n vm.complement = {\r\n id: 0,\r\n invoiceId: invoice.id,\r\n rfcReceptor: invoice.targetRfc,\r\n rfcEmisorBeneficiario: invoice.rfc,\r\n paymentDate: new moment()\r\n };\r\n api.invoices.invoices.get({ id: invoice.id }, function (response) {\r\n vm.invoice = response;\r\n vm.complement.satCoin = response.satCoin;\r\n vm.complement.satCoinId = response.satCoin.id;\r\n vm.complement.expeditionSatZipCode = response.satZipcode;\r\n vm.complement.expeditionSatZipCodeId = response.satZipcode.id;\r\n\r\n // Get complements\r\n getcomplementsByInvoice(invoice);\r\n \r\n });\r\n }\r\n \r\n function getcomplementsByInvoice(invoice){ \r\n api.invoices.complements.get({ id: invoice.id },\r\n function (complementsResponse) {\r\n vm.invoiceComplements = complementsResponse;\r\n if (complementsResponse.length > 0)\r\n vm.complement.sequentialNumber = complementsResponse.length + 1;\r\n else vm.complement.sequentialNumber = 1;\r\n\r\n var totalComplements =\r\n complementsResponse.length == 0\r\n ? 0\r\n : complementsResponse\r\n .map(function (comp) {\r\n return comp.amount;\r\n })\r\n .reduce(function (a, b) {\r\n return a + b;\r\n });\r\n\r\n vm.balance = vm.invoice.total - totalComplements;\r\n\r\n var MontoAnterior = invoice.total;\r\n angular.forEach(vm.invoiceComplements, function (Complement) {\r\n Complement.saldoAnterior = MontoAnterior;\r\n Complement.saldoInsoluto = MontoAnterior - Complement.amount;\r\n MontoAnterior = Complement.saldoInsoluto;\r\n });\r\n }\r\n );\r\n }\r\n\r\n function getPendingInvoices() {\r\n api.invoices.complements.getByPeriod(\r\n {\r\n from: moment(vm.from).format(\"DD-MM-YYYY\"),\r\n to: moment(vm.to).format(\"DD-MM-YYYY\"),\r\n includeCompletePayed: vm.includeCompletePayed,\r\n },\r\n function (response) {\r\n vm.pendingInvoices = response;\r\n }\r\n );\r\n }\r\n\r\n function saveComplement() {\r\n vm.complement.satCoinId = vm.complement.satCoin.id;\r\n vm.complement.expeditionSatZipCodeId = vm.complement.expeditionSatZipCode.id;\r\n vm.complement.satPaymentId = vm.complement.satPayment.id;\r\n\r\n api.invoices.complements.save(\r\n vm.complement,\r\n function (_) {\r\n msg.success(\"Complemento registrado correctamente.\");\r\n getcomplementsByInvoice(vm.selectedInvoice);\r\n },\r\n function (errorResponse) {\r\n msg.success(\"Auch, algo salio mal, Error:\" + errorResponse);\r\n }\r\n );\r\n }\r\n\r\n function view(id){ \r\n $state.go(\"app.invoices.receipt\", { id: id, type: \"complement\" });\r\n }\r\n }\r\n})();\r\n\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.batch', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.batch', {\r\n url : '/batch',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/batch/batch.html',\r\n controller : 'InvoicesBatchOrdersController as vm'\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.batch', {\r\n title: 'Carga Masiva',\r\n shortcuticon : 'icon-plus', \r\n state: 'app.invoices.batch'\r\n });\r\n }\r\n})();\n/* eslint-disable no-undef */\r\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.invoices.batch\")\r\n .controller(\"InvoicesBatchOrdersController\", InvoicesBatchOrdersController);\r\n\r\n /** @ngInject */\r\n function InvoicesBatchOrdersController(api, msg, $scope, localStorageService) {\r\n var vm = this;\r\n vm.result; \r\n vm.loading = false; \r\n vm.apiUrl = api.baseUrl.replace(\"api/\",\"\");\r\n\r\n _init();\r\n\r\n // Methods\r\n vm.save = save;\r\n ////////\r\n\r\n function _init() {\r\n \r\n }\r\n\r\n function save(){\r\n vm.result = null;\r\n var files = $(\"#inputFile\").get(0).files;\r\n\r\n // Validate data\r\n if (files.length == 0) {\r\n msg.error(\"Seleccione archivo a subir!.\");\r\n return;\r\n }\r\n\r\n var file = files[0];\r\n var data = new FormData();\r\n data.append(\"file\", file);\r\n\r\n var authData = localStorageService.get('authorizationData'); \r\n var appData = localStorageService.get(\"appData\");\r\n vm.loading = true;\r\n $.ajax({\r\n type: \"POST\",\r\n url: api.baseUrl + \"BatchOrders\",\r\n contentType: false,\r\n processData: false,\r\n data: data,\r\n headers: { \r\n \"Authorization\": 'Bearer ' + authData.token,\r\n \"BranchId\": appData.branch.id\r\n },\r\n success: function (response) {\r\n $scope.$apply(function() {\r\n vm.result = response; \r\n vm.loading = false; \r\n });\r\n },\r\n error: function (errorResponse) {\r\n $scope.$apply(function() {\r\n vm.loading = false; \r\n });\r\n if (errorResponse.status == 400 && errorResponse.responseText != null){\r\n msg.error(errorResponse.responseText);\r\n }else \r\n msg.error(\"Error al subir archivo, comunicate con el administrador!!!!\"); \r\n } \r\n });\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.passes')\r\n .controller('CatalogsPassesController', catalogsPassesController);\r\n\r\n /** @ngInject */\r\n function catalogsPassesController($scope, $mdDialog, msg, api, CONST_DATATABLES, Passes, $filter)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.massiveAdd = massiveAdd;\r\n vm.remove = remove;\r\n vm.massiveRemove = massiveRemove;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n _getPasses();\r\n vm.dtPassesInstance = {};\r\n vm.dtPassesOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n vm.status=\"\";\r\n }\r\n\r\n function _getPasses(){\r\n vm.items = api.catalogs.passes.query();\r\n }\r\n\r\n function massiveAdd(ev){\r\n var last = 50000;\r\n if (vm.items.length > 0){\r\n var ordered = $filter('orderBy')(vm.items, 'number');\r\n var last = ordered[ordered.length - 1].number;\r\n }\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/passes/dialogs/dialog-massivePasses/dialog-massivePasses.html',\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n escapeToClose : true,\r\n disableParentScroll: true,\r\n controller : \"CatalogsPassesMassiveAddDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _getPasses,\r\n LastNumber : last,\r\n ChangeStatus : _changeStatus\r\n },\r\n }); \r\n }\r\n\r\n function remove(item){\r\n msg.confirm('Estas seguro que deseas borrar este pase?', function(){\r\n api.catalogs.passes.delete({ id: item.id }, function(response){\r\n if (response){\r\n _getPasses();\r\n }\r\n });\r\n });\r\n }\r\n\r\n vm.deleting = false;\r\n function massiveRemove(ev){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/passes/dialogs/dialog-massivePassesRemove/dialog-massivePassesRemove.html',\r\n targetEvent : ev,\r\n clickOutsideToClose: true,\r\n escapeToClose : true,\r\n disableParentScroll: true,\r\n controller : \"CatalogsPassesMassiveRemoveDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _getPasses,\r\n ChangeStatus : _changeStatus\r\n },\r\n }); \r\n }\r\n\r\n function _changeStatus(message){\r\n vm.status = message;\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.catalogs.duesRules')\r\n .controller('CatalogsDuesRulesController', catalogsDuesRulesController);\r\n\r\n /** @ngInject */\r\n function catalogsDuesRulesController($scope, $mdDialog, msg, api, CONST_DATATABLES, DuesRules)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.detail = detail;\r\n vm.remove = remove;\r\n //////////\r\n\r\n function _init(){\r\n // Data\r\n _getDuesRules();\r\n vm.dtDuesRulesInstance = {};\r\n vm.dtDuesRulesOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n }\r\n\r\n function _getDuesRules(){\r\n vm.items = api.catalogs.duesRules.query();\r\n }\r\n\r\n function detail(ev, item){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/catalogs/views/duesRules/dialogs/dialog-detail/dialog-detail.html',\r\n targetEvent : ev,\r\n disableParentScroll: true,\r\n controller : \"CatalogsDuesRulesDetailDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _getDuesRules,\r\n DueRule : item \r\n },\r\n }); \r\n }\r\n\r\n function remove(id){\r\n msg.confirm('Estas seguro que deseas borrar esta regla?', function(){\r\n api.catalogs.duesRules.delete({ id: id }, function(response){\r\n if (response){\r\n _getDuesRules();\r\n msg.success(\"Regla de cuota borrada correctamente\");\r\n }\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.accionistas.purchase', [ \r\n ])\r\n .config(accionistasPurchaseConfig);\r\n\r\n /** @ngInject */\r\n function accionistasPurchaseConfig($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.accionistas.purchase', {\r\n url : '/purchase',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/accionistas/views/purchase/purchase.html',\r\n controller : 'AccionistasPurchaseController as vm'\r\n }\r\n },\r\n resolve : {\r\n Acciones: function (apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.acciones@query');\r\n },\r\n Accionistas: function (apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.accionistas@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.accionistas.purchase', {\r\n title: 'Compra',\r\n shortcuticon : 'icon-cash-multiple', \r\n state: 'app.accionistas.purchase'\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.accionistas.purchase')\r\n .controller('AccionistasTransferController', accionistasTransferController);\r\n\r\n /** @ngInject */\r\n function accionistasTransferController($scope, $mdDialog, msg, api, $state, Accionistas)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.accionistaSourceChange = accionistaSourceChange;\r\n vm.selectAccion = selectAccion;\r\n vm.save = save;\r\n //////////\r\n\r\n function _init(){\r\n vm.accionistas = Accionistas;\r\n vm.transferToClub = true;\r\n vm.accionesSource = [];\r\n vm.accionistaSource = null;\r\n vm.book = '';\r\n vm.folio = '';\r\n vm.row = '';\r\n }\r\n\r\n function accionistaSourceChange(){\r\n vm.accionistasTaget = vm.accionistas.filter(function(a){ return a.id != vm.accionistaSource.id });\r\n vm.selectedAcciones = []; \r\n api.accionistas.accionistas.get({ \r\n id: vm.accionistaSource.id\r\n }, function(response){\r\n vm.accionesSource = response.acciones;\r\n });\r\n }\r\n\r\n function selectAccion(accion){\r\n accion.selected = !accion.selected; \r\n }\r\n\r\n function save(){\r\n var error = ''; \r\n var selectedAcciones = vm.accionesSource.filter(function(a){ return a.selected });\r\n if (selectedAcciones.length == 0)\r\n error = \"Seleccione al menos una accion a tranferir\";\r\n else if (!vm.transferToClub){\r\n if(!vm.accionistaTarget)\r\n error = \"Seleccione accionista a traspasar las acciones\";\r\n else if ((!vm.book || vm.book == '') || (!vm.folio || vm.folio == '') || (!vm.row || vm.row == ''))\r\n error = \"Ingrese todos los campos obligatorios\";\r\n }\r\n if (error != '')\r\n {\r\n msg.error(error);\r\n return;\r\n } \r\n\r\n angular.forEach(selectedAcciones, function(a){\r\n a.book = vm.book;\r\n a.folio = vm.folio;\r\n a.row = vm.row;\r\n });\r\n \r\n msg.confirm(\"Estas seguro que deseas transferir \" + selectedAcciones.length + \" accion(es)?\", function(){\r\n api.accionistas.transfers.save({\r\n type : vm.transferToClub ? 1: 2,\r\n acciones : selectedAcciones,\r\n accionistaSource: vm.accionistaSource,\r\n accionistaTarget: vm.accionistaTarget\r\n }, function(response){\r\n msg.success(\"Acciones transferidas\");\r\n _init();\r\n vm.accionistas = api.accionistas.accionistas.query();\r\n });\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.accionistas.purchase')\r\n .controller('AccionistasPurchaseController', accionistasPurchaseController);\r\n\r\n /** @ngInject */\r\n function accionistasPurchaseController($scope, $mdDialog, msg, api, Acciones, $state, Accionistas)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n // Methods\r\n vm.goToStep = goToStep;\r\n vm.selectAccion = selectAccion;\r\n vm.selectAllAcciones = selectAllAcciones;\r\n vm.unselectAccion = unselectAccion;\r\n vm.unselectAllAcciones = unselectAllAcciones;\r\n vm.newAccionista = newAccionista;\r\n vm.fromClubChange = fromClubChange;\r\n vm.getAccionesFromAccionista = getAccionesFromAccionista;\r\n //////////\r\n\r\n function _init(){\r\n vm.accionistas = Accionistas;\r\n vm.acciones = Acciones; \r\n vm.isAccionista = true;\r\n vm.step = 1;\r\n vm.purchaseFromClub = true;\r\n\r\n fromClubChange();\r\n newAccionista();\r\n }\r\n\r\n function newAccionista(){\r\n if (vm.accionista && vm.accionista.acciones && vm.accionista.acciones.length > 0)\r\n unselectAllAcciones();\r\n\r\n vm.accionista = {\r\n id : 0,\r\n date : new Date(),\r\n active : true,\r\n acciones: []\r\n };\r\n }\r\n\r\n function goToStep(stepNumber){\r\n \r\n var error = '';\r\n switch(stepNumber){\r\n case 2: // Client selection To Acciones selection\r\n if ((!vm.accionista.fatherLastname || vm.accionista.fatherLastname == '') && (!vm.accionista.companyName || vm.accionista.companyName == ''))\r\n error = \"Ingrese al menos el nombre de la persona y/o empresa.\"\r\n break;\r\n case 3: // Save\r\n if (!vm.accionista.acciones || vm.accionista.acciones.length == 0)\r\n error = \"Seleccione al menos una acción a comprar\";\r\n break\r\n }\r\n\r\n if (error != '')\r\n {\r\n msg.error(error);\r\n return; \r\n }\r\n\r\n // STEP 3 IS SAVE\r\n if (stepNumber == 3)\r\n _save();\r\n else\r\n vm.step = stepNumber; \r\n \r\n // POST SELECT ACTIONS\r\n switch(stepNumber){\r\n case 2: // Client selection To Acciones selection \r\n if (vm.accionista.acciones.length > 0)\r\n {\r\n vm.currentAcciones = vm.accionista.acciones;\r\n vm.accionista.acciones = [];\r\n } \r\n if (vm.availableAcciones.length > 0)\r\n vm.availableAccion = vm.availableAcciones[0];\r\n break;\r\n }\r\n\r\n }\r\n\r\n function selectAccion(accion){\r\n vm.accionista.acciones.push(accion);\r\n vm.availableAcciones.splice(vm.availableAcciones.indexOf(accion), 1);\r\n if (vm.availableAcciones.length > 0)\r\n vm.availableAccion = vm.availableAcciones[0];\r\n }\r\n\r\n function selectAllAcciones(){\r\n angular.forEach(vm.availableAcciones, function(a) {\r\n vm.accionista.acciones.push(a);\r\n });\r\n vm.availableAcciones = [];\r\n }\r\n\r\n function unselectAccion(accion){\r\n vm.availableAcciones.push(accion);\r\n vm.accionista.acciones.splice(vm.accionista.acciones.indexOf(accion), 1);\r\n if (vm.accionista.acciones.length > 0)\r\n vm.selectedAccion = vm.accionista.acciones[0];\r\n }\r\n\r\n function unselectAllAcciones(){\r\n angular.forEach(vm.accionista.acciones, function(a) {\r\n vm.availableAcciones.push(a);\r\n });\r\n vm.accionista.acciones = [];\r\n }\r\n\r\n function _save(){\r\n angular.forEach(vm.accionista.acciones, function(a){\r\n a.book = vm.book;\r\n a.folio = vm.folio;\r\n a.row = vm.row;\r\n });\r\n\r\n api.accionistas.accionistas.save(vm.accionista, function(response){\r\n msg.success(\"Accionista guardado correctamente.\");\r\n $state.reload();\r\n });\r\n }\r\n\r\n function getAccionesFromAccionista(){\r\n if (vm.accionista.id == vm.sellerAccionistaId){\r\n msg.error(\"No puedes comprarte acciones a ti mismo\");\r\n return;\r\n }\r\n api.accionistas.accionistas.get({\r\n id: vm.sellerAccionistaId\r\n }, function(response){\r\n vm.availableAcciones = response.acciones;\r\n });\r\n }\r\n\r\n function fromClubChange(){\r\n if (vm.purchaseFromClub){\r\n vm.availableAcciones = vm.acciones.filter(function(a){ return !a.accionistaId });\r\n if (vm.availableAcciones.length > 0)\r\n vm.availableAccion = vm.availableAcciones[0];\r\n }else{\r\n vm.availableAcciones = [];\r\n vm.availableAccion = null;\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.accionistas.acciones')\r\n .controller('AccionistasAccionesController', accionistasAccionesController);\r\n\r\n /** @ngInject */\r\n function accionistasAccionesController($scope, $mdDialog, msg, api, CONST_DATATABLES, Acciones)\r\n {\r\n var vm = this;\r\n\r\n // Methods\r\n vm.massiveAdd = massiveAdd;\r\n vm.remove = remove;\r\n //////////\r\n\r\n _init();\r\n \r\n function _init(){\r\n // Data\r\n _getAcciones();\r\n vm.dtAccionesInstance = {};\r\n vm.dtAccionesOptions = angular.copy(angular.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n vm.status=\"\";\r\n }\r\n\r\n function _getAcciones(){\r\n vm.items = api.accionistas.acciones.query();\r\n }\r\n\r\n function massiveAdd(ev){\r\n $mdDialog.show({\r\n templateUrl : 'app/main/accionistas/views/acciones/dialogs/dialog-massiveAdd/dialog-massiveAdd.html',\r\n targetEvent : ev,\r\n disableParentScroll: true,\r\n controller : \"AccionistasAccionesMassiveAddDialogController\",\r\n controllerAs : \"vm\",\r\n locals : {\r\n Callback : _getAcciones,\r\n ChangeStatus : _changeStatus\r\n },\r\n }); \r\n }\r\n\r\n vm.removing = false;\r\n function remove(id){\r\n msg.confirm('Estas seguro que deseas borrar esta accíon?', function(){\r\n vm.removing = true;\r\n _changeStatus(\"Borrando...\"); \r\n api.accionistas.acciones.delete({ id: id }, function(response){\r\n if (response){\r\n _getAcciones();\r\n vm.removing = false;\r\n _changeStatus(\"Accion borrada correctamente\");\r\n }\r\n }, function(errorResponse){\r\n vm.removing = false;\r\n _changeStatus(\"Ocurrio un error al borrar la accion\");\r\n });\r\n });\r\n }\r\n\r\n function _changeStatus(message){\r\n vm.status = message;\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.quick-panel', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($translatePartialLoaderProvider, msApiProvider)\r\n {\r\n // Translation\r\n $translatePartialLoaderProvider.addPart('app/quick-panel');\r\n\r\n // Api\r\n // msApiProvider.register('quickPanel.activities', ['app/data/quick-panel/activities.json']);\r\n // msApiProvider.register('quickPanel.contacts', ['app/data/quick-panel/contacts.json']);\r\n // msApiProvider.register('quickPanel.events', ['app/data/quick-panel/events.json']);\r\n // msApiProvider.register('quickPanel.notes', ['app/data/quick-panel/notes.json']);\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.quick-panel')\r\n .controller('ChatTabController', ChatTabController);\r\n\r\n /** @ngInject */\r\n function ChatTabController(msApi, $timeout)\r\n {\r\n // var vm = this;\r\n\r\n // // Data\r\n // vm.chat = {};\r\n // vm.chatActive = false;\r\n // vm.replyMessage = '';\r\n\r\n // // msApi.request('quickPanel.contacts@get', {},\r\n // // // Success\r\n // // function (response)\r\n // // {\r\n // // vm.contacts = response.data;\r\n // // }\r\n // // );\r\n\r\n // // Methods\r\n // vm.toggleChat = toggleChat;\r\n // vm.reply = reply;\r\n\r\n // //////////\r\n\r\n // function toggleChat(contact)\r\n // {\r\n // vm.chatActive = !vm.chatActive;\r\n\r\n // if ( vm.chatActive )\r\n // {\r\n // vm.replyMessage = '';\r\n // vm.chat.contact = contact;\r\n // scrollToBottomOfChat(0);\r\n // }\r\n // }\r\n\r\n // function reply()\r\n // {\r\n // if ( vm.replyMessage === '' )\r\n // {\r\n // return;\r\n // }\r\n\r\n // if ( !vm.chat.contact.dialog )\r\n // {\r\n // vm.chat.contact.dialog = [];\r\n // }\r\n\r\n // vm.chat.contact.dialog.push({\r\n // who : 'user',\r\n // message: vm.replyMessage,\r\n // time : 'Just now'\r\n // });\r\n\r\n // vm.replyMessage = '';\r\n\r\n // scrollToBottomOfChat(400);\r\n // }\r\n\r\n // function scrollToBottomOfChat(speed)\r\n // {\r\n // var chatDialog = angular.element('#chat-dialog');\r\n\r\n // $timeout(function ()\r\n // {\r\n // chatDialog.animate({\r\n // scrollTop: chatDialog[0].scrollHeight\r\n // }, speed);\r\n // }, 0);\r\n\r\n // }\r\n }\r\n\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.test', \r\n [\r\n 'datatables',\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msApiProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.test', {\r\n abstract: true,\r\n url : '/test'\r\n })\r\n .state('app.test.selection', {\r\n url : '/selection',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/test/drag-selection/drag-selection.html',\r\n controller : 'TestSelectionController as vm'\r\n }\r\n }\r\n })\r\n .state('app.test.excel', {\r\n url : '/excel',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/test/excel/excel1.html',\r\n controller : 'ExcelController as vm'\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.test', {\r\n title : 'Pruebas',\r\n icon : 'icon-lock',\r\n weight: 3\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.test.selection', {\r\n title: 'Multiseleccion',\r\n state: 'app.test.selection'\r\n });\r\n \r\n msNavigationServiceProvider.saveItem('apps.test.excel', {\r\n title: 'Excel',\r\n state: 'app.test.excel'\r\n });\r\n }\r\n})();\nvar isMouseDown = false,\r\n isHighlighted;\r\n(function ()\r\n{\r\n 'use strict';\r\n\r\n\r\n angular\r\n .module('app.test')\r\n .factory('Excel',function($window){\r\n var uri='data:application/vnd.ms-excel;base64,',\r\n template='{table}
',\r\n base64=function(s){return $window.btoa(unescape(encodeURIComponent(s)));},\r\n format=function(s,c){return s.replace(/{(\\w+)}/g,function(m,p){return c[p];})};\r\n return {\r\n tableToExcel:function(tableId,worksheetName){\r\n var table=$(tableId),\r\n ctx={worksheet:worksheetName,table:table.html()},\r\n href=uri+base64(format(template,ctx));\r\n return href;\r\n }\r\n };\r\n })\r\n .controller('ExcelController', excelController);\r\n\r\n /** @ngInject */\r\n function excelController(Excel,$timeout)\r\n {\r\n var vm = this;\r\n\r\n _init();\r\n\r\n function _init(){\r\n\r\n }\r\n\r\n vm.excelExport = function(tableId){ // ex: '#my-table'\r\n var exportHref=Excel.tableToExcel(tableId,'TestSheetName');\r\n $timeout(function(){location.href=exportHref;},100); // trigger download\r\n }\r\n }\r\n})();\nvar isMouseDown = false,\r\n isHighlighted;\r\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.test')\r\n .controller('TestSelectionController', TestSelectionController);\r\n\r\n /** @ngInject */\r\n function TestSelectionController($state, api, msg)\r\n {\r\n var vm = this;\r\n\r\n vm.generate = generate;\r\n\r\n\r\n function generate(){\r\n // Clear table \r\n $(\"#our_table > tr\").remove(); \r\n\r\n // Create table\r\n var counter = 1;\r\n var width = 900 / vm.cols;\r\n var height = 600 / vm.rows;\r\n for(var row = 0; row < vm.rows; row++){\r\n var htmlRow = document.createElement(\"TR\");\r\n for(var col = 0; col < vm.cols; col++){ \r\n var cell = document.createElement(\"TD\");\r\n cell.id = counter;\r\n cell.style.width = width + 'px';\r\n cell.style.height = height + 'px';\r\n // var inp = document.createElement(\"INPUT\");\r\n // cell.appendChild(inp);\r\n // htmlCol.innerHTML = counter;\r\n htmlRow.appendChild(cell);\r\n counter++;\r\n }\r\n document.getElementById(\"our_table\").appendChild(htmlRow);\r\n }\r\n\r\n // Rebind events\r\n $(\"#our_table td\")\r\n .mousedown(function () {\r\n isMouseDown = true;\r\n $(this).toggleClass(\"highlighted\");\r\n isHighlighted = $(this).hasClass(\"highlighted\");\r\n return false; // prevent text selection\r\n })\r\n .mouseover(function () {\r\n if (isMouseDown) {\r\n $(this).toggleClass(\"highlighted\", isHighlighted);\r\n }\r\n })\r\n .bind(\"selectstart\", function () {\r\n return false;\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.pages', \r\n [\r\n 'app.pages.profile',\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msApiProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.pages', {\r\n abstract: true,\r\n url : '/pages'\r\n });\r\n\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.pages')\r\n .controller('PagesProfileController', pagesProfileController);\r\n\r\n function pagesProfileController($state, api, msg, authService, localStorageService)\r\n {\r\n var vm = this;\r\n \r\n // Methods\r\n vm.mainSave = mainSave;\r\n vm.mainAvatarSave = mainAvatarSave;\r\n vm.pwdSave = pwdSave;\r\n ////////////\r\n\r\n init();\r\n\r\n function init()\r\n {\r\n var appData = authService.getAppData();\r\n vm.user = appData.user;\r\n vm.avatarsUrl = api.baseUrl.replace(\"api/\",\"\"); \r\n }\r\n\r\n function mainSave(){\r\n vm.user.username = authService.getAppData().user.username;\r\n api.security.users.save(vm.user, function(response){\r\n msg.success(\"Datos guardados correctamente\");\r\n authService.updateUserData(vm.user);\r\n $state.reload();\r\n });\r\n }\r\n\r\n function mainAvatarSave(){\r\n var files = $(\"#inputFile\").get(0).files;\r\n\r\n // Validate data\r\n if (files.length == 0) {\r\n msg.error(\"Seleccione archivo a subir!.\");\r\n return;\r\n }\r\n\r\n var file = files[0];\r\n var data = new FormData();\r\n data.append(\"file\", file);\r\n data.append(\"userId\", vm.user.id);\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n $.ajax({\r\n type: \"POST\",\r\n url: api.baseUrl + \"UserFiles\",\r\n contentType: false,\r\n processData: false,\r\n data: data,\r\n headers: { \r\n \"Authorization\": 'Bearer ' + authData.token\r\n },\r\n success: function (response) {\r\n msg.success(\"Avatar cambiado!\");\r\n $(\"#inputFile\").val('');\r\n vm.user.avatar = response.avatar;\r\n authService.updateUserData(vm.user);\r\n $state.reload();\r\n },\r\n error: function (errorResponse) {\r\n if (errorResponse.status == 500){\r\n msg.error(errorResponse.responseJSON.exceptionMessage);\r\n }else \r\n msg.error(\"Error al subir archivo, comunicate con el administrador!!!!\"); \r\n }\r\n });\r\n }\r\n\r\n function pwdSave(){\r\n vm.changePassword.username = vm.user.username;\r\n vm.changePassword.changeType = 2; /* Change */\r\n api.security.users.change(vm.changePassword, function(response){\r\n msg.success(\"Cantraseña modificada correctamente\");\r\n vm.changePassword = {};\r\n });\r\n }\r\n\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.login', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.login', {\r\n url : '/',\r\n views : {\r\n 'main@' : {\r\n templateUrl: 'app/core/layouts/content-only.html',\r\n controller: 'MainController as vm'\r\n },\r\n 'content@app.login': {\r\n templateUrl: 'app/main/login/login.html',\r\n controller: 'LoginController as vm'\r\n }\r\n }\r\n });\r\n }\r\n\r\n \r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.login')\r\n .controller('LoginDialogController2', LoginDialogController2);\r\n\r\n /** @ngInject */\r\n function LoginDialogController2(api, $mdDialog, Callback, User, Password) {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.cerrarSesiones = cerrarSesiones;\r\n vm.cancel = cancel;\r\n ////\r\n\r\n function _init() {\r\n vm.contesena = \"\";\r\n }\r\n\r\n function cerrarSesiones() {\r\n Callback.login({\r\n userName: User,\r\n password: Password\r\n }).then(function () {\r\n\r\n // Get APP access \r\n api.app.access.closeSession({contrasena: vm.contesena},\r\n function (accessResponse) {\r\n if (accessResponse.$resolved) {\r\n //SUCCESS\r\n $mdDialog.hide(vm.contesena);\r\n }\r\n else {\r\n $mdDialog.hide(\"02\");\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n function cancel() {\r\n $mdDialog.hide(\"02\");\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.toolbar', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($translatePartialLoaderProvider)\r\n {\r\n $translatePartialLoaderProvider.addPart('app/toolbar');\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.toolbar')\r\n .controller('LoginDialogController', loginDialogController);\r\n\r\n /** @ngInject */\r\n function loginDialogController(api, $mdDialog, Callback)\r\n {\r\n var vm = this;\r\n _init();\r\n\r\n /// Methods\r\n vm.accept = accept;\r\n vm.close = close;\r\n ////\r\n\r\n function _init(){\r\n vm.item = {};\r\n vm.callback = Callback;\r\n } \r\n\r\n function close(){\r\n $mdDialog.hide();\r\n }\r\n\r\n function accept(){\r\n api.security.controlsAccess.login(vm.item, function(response){\r\n vm.callback(response);\r\n close();\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core',\r\n [\r\n 'ngAnimate',\r\n 'ngAria',\r\n 'ngCookies',\r\n 'ngMessages',\r\n 'ngResource',\r\n 'ngSanitize',\r\n 'ngMaterial',\r\n 'pascalprecht.translate',\r\n 'ui.router'\r\n ]);\r\n})();\n(function (){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('selectOnFocus', selectOnFocus);\r\n\r\n function selectOnFocus($timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n var focusedElement = null;\r\n\r\n element.on('focus', function () {\r\n var self = this;\r\n if (focusedElement != self) {\r\n focusedElement = self;\r\n $timeout(function () {\r\n self.select();\r\n }, 10);\r\n }\r\n });\r\n\r\n element.on('blur', function () {\r\n focusedElement = null;\r\n });\r\n }\r\n }\r\n } \r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('dynamicTemplate', [\"$compile\", \"$parse\", dynamicTemplate]);\r\n \r\n function dynamicTemplate($compile, $parse) {\r\n return {\r\n restrict: 'A',\r\n link: function($scope, element, attr) {\r\n var parse = $parse(attr.ngBindHtml);\r\n function value() { return (parse($scope) || '').toString(); }\r\n\r\n $scope.$watch(value, function() {\r\n $compile(element, null, -9999)($scope); \r\n });\r\n }\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('compareTo', compareTo);\r\n\r\n function compareTo() {\r\n return {\r\n require: \"ngModel\",\r\n scope: {\r\n otherModelValue: \"=compareTo\"\r\n },\r\n link: function(scope, element, attributes, ngModel) {\r\n \r\n ngModel.$validators.compareTo = function(modelValue) {\r\n return modelValue == scope.otherModelValue;\r\n };\r\n \r\n scope.$watch(\"otherModelValue\", function() {\r\n ngModel.$validate();\r\n });\r\n }\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular.module('app.core')\r\n .directive('signaturePad', function($window) {\r\n return {\r\n restrict: 'E',\r\n template: '',\r\n scope: {\r\n signature: '='\r\n },\r\n link: function(scope, element) {\r\n var canvas = element.find('canvas')[0];\r\n var signaturePad = new SignaturePad(canvas, {\r\n backgroundColor: 'rgba(255, 255, 255, 0)',\r\n penColor: 'rgb(0, 0, 0)'\r\n });\r\n\r\n function initSignaturePad() {\r\n var ratio = Math.max($window.devicePixelRatio || 1, 2);\r\n canvas.width = (element[0].clientWidth * ratio)-20;\r\n canvas.height = (element[0].clientHeight * ratio)-20;\r\n canvas.getContext('2d').scale(ratio, ratio);\r\n\r\n signaturePad = new SignaturePad(canvas, {\r\n backgroundColor: 'rgba(255, 255, 255, 0)',\r\n penColor: 'rgb(0, 0, 0)'\r\n });\r\n }\r\n\r\n function resizeCanvas() {\r\n var ratio = Math.max($window.devicePixelRatio || 1, 1);\r\n canvas.width = element[0].clientWidth * ratio;\r\n canvas.height = element[0].clientHeight * ratio;\r\n canvas.getContext('2d').scale(ratio, ratio);\r\n if (signaturePad) {\r\n signaturePad.clear(); // clear the canvas on resize\r\n }\r\n }\r\n\r\n angular.element($window).on('load', function() {\r\n initSignaturePad();\r\n });\r\n\r\n\r\n $window.addEventListener('resize', resizeCanvas);\r\n // resizeCanvas();\r\n\r\n scope.$watch('signature', function(newValue) {\r\n if (newValue) {\r\n signaturePad.fromDataURL(newValue);\r\n }\r\n });\r\n\r\n scope.$on('$destroy', function() {\r\n $window.removeEventListener('resize', resizeCanvas);\r\n });\r\n\r\n signaturePad.onEnd = function() {\r\n scope.$apply(function() {\r\n scope.signature = signaturePad.toDataURL();\r\n });\r\n };\r\n\r\n scope.$on('clearSignature', function() {\r\n signaturePad.clear();\r\n });\r\n }\r\n };\r\n\r\n // DirectiveEnd\r\n \r\n });\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdSatSelect', ['api', catalogSelect]);\r\n \r\n function catalogSelect(api) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n mdSelectedItem : '='\r\n },\r\n transclude: true,\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.label = attrs.label; \r\n var apiGroupName = \"sat\";\r\n var apiName = attrs.apiList;\r\n var apiService = api[apiGroupName][apiName];\r\n \r\n scope.required = attrs.required === undefined ? false: true;\r\n scope.search = function(keyword){\r\n return apiService.get({id: keyword}, function(response){\r\n return response;\r\n }); \r\n }\r\n },\r\n templateUrl: 'app/main/directives/cd-sat-select/cd-sat-select.template.html'\r\n }\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"app.core\")\r\n .directive(\"cdReportDatesRange\", dateFolioDirective);\r\n\r\n function dateFolioDirective() {\r\n return {\r\n restrict: \"E\",\r\n // scope: true,\r\n scope: {\r\n ngModel: \"=\",\r\n },\r\n require: \"^ngModel\",\r\n transclude: true,\r\n link: function (scope, element, attrs, catalogCtrl) {\r\n scope.date = {\r\n from: getNowUTC(),\r\n to: getNowUTC(),\r\n };\r\n\r\n scope.changeEvent = function () {\r\n scope.ngModel = scope.date;\r\n };\r\n\r\n scope.changeEvent();\r\n },\r\n templateUrl:\r\n \"app/main/directives/cd-report-dates-range/cd-report-dates-range.template.html\",\r\n };\r\n }\r\n\r\n function getNowUTC() {\r\n const now = new Date();\r\n return now.getTime() + now.getTimezoneOffset() * 60000;\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdReportDatePeriod', cdReportDatePeriod);\r\n \r\n function cdReportDatePeriod() {\r\n return {\r\n restrict: 'E',\r\n // scope: true, \r\n scope: {\r\n ngModel: \"=\",\r\n periodicities: '='\r\n },\r\n require: '^ngModel',\r\n transclude: true,\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.filterByDate = true;\r\n scope.date = {\r\n type : 1,\r\n from : new Date(),\r\n to : new Date()\r\n };\r\n scope.period = {\r\n type: 2,\r\n periodicityId: null,\r\n periods : 1\r\n };\r\n\r\n scope.changeEvent = function(){\r\n if (scope.filterByDate){\r\n scope.ngModel = scope.date;\r\n }else{\r\n scope.ngModel = scope.period;\r\n }\r\n }\r\n\r\n scope.changeEvent(); \r\n },\r\n templateUrl: 'app/main/directives/cd-report-date-period/cd-report-date-period.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdReportAgeRanges', cdReportAgeRangesDirective);\r\n \r\n function cdReportAgeRangesDirective(msg) {\r\n return {\r\n restrict: 'E',\r\n // scope: true, \r\n scope: {\r\n ngModel: \"=\"\r\n },\r\n require: '^ngModel',\r\n transclude: true,\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.ageRanges = \r\n [\r\n { id: 1, from: 0, to: 0 },\r\n ];\r\n\r\n scope.changeEvent = function(){\r\n scope.ngModel = scope.ageRanges;\r\n };\r\n\r\n scope.addRange = function(){\r\n if (scope.ageRanges.length == 4)\r\n {\r\n msg.error(\"No se pueden agregar mas rangos\");\r\n return;\r\n }\r\n scope.ageRanges.push({\r\n id: scope.ageRanges.length + 1,\r\n from: null,\r\n to: null\r\n });\r\n };\r\n\r\n // scope.removeRange = function(range){\r\n // scope.ageRanges.splice(scope.ageRanges.indexOf(range), 1);\r\n // };\r\n\r\n scope.changeEvent();\r\n },\r\n templateUrl: 'app/main/directives/cd-report-age-ranges/cd-report-age-ranges.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdRentableSelection', directive);\r\n\r\n function directive() {\r\n\r\n function mainController($scope, msg, api, $element){\r\n var vm = this;\r\n\r\n _init();\r\n\r\n /// Methods \r\n vm.zoneChange = zoneChange;\r\n ///\r\n\r\n function _init(){\r\n api.catalogs.rentableZones.query(function(response){\r\n vm.rentableZones = response;\r\n if ($scope.zoneId){\r\n vm.rentableZone = vm.rentableZones.filter(function(z){ return z.id == $scope.zoneId })[0];\r\n zoneChange();\r\n }\r\n });\r\n vm.rentable = $scope.rentable;\r\n }\r\n\r\n function zoneChange(){\r\n \r\n $scope.ngModel = null;\r\n api.partners.rentables.getByRentableZone({\r\n familyId: 0,\r\n rentableZoneId: vm.rentableZone.id\r\n }, function(response){\r\n vm.assignedRentables = [];\r\n angular.forEach(response, function(assigned){\r\n vm.assignedRentables.push(angular.extend(assigned.rentable, { partnerName: assigned.partner.completeName }));\r\n });\r\n\r\n api.catalogs.rentableZones.get({ id: vm.rentableZone.id }, function(response){\r\n vm.rentableZone.rentables = response.rentables; \r\n _generateMatrix();\r\n });\r\n });\r\n }\r\n\r\n function _generateMatrix(){\r\n // Clear table \r\n $(\"#matrix\").remove(); \r\n\r\n var table = document.createElement(\"TABLE\");\r\n table.id = \"matrix\";\r\n\r\n // Create matrix\r\n var counter = 1;\r\n var width = 700 / vm.rentableZone.matrixColumns;\r\n var height = 470 / vm.rentableZone.matrixRows;\r\n for(var row = 0; row < vm.rentableZone.matrixRows; row++){\r\n var htmlRow = document.createElement(\"TR\");\r\n for(var col = 0; col < vm.rentableZone.matrixColumns; col++){ \r\n var cell = document.createElement(\"TD\");\r\n cell.id = counter;\r\n cell.style.width = width + 'px';\r\n cell.style.height = height + 'px';\r\n htmlRow.appendChild(cell);\r\n counter++;\r\n }\r\n table.appendChild(htmlRow);\r\n }\r\n $(\"#matrix-container\").html(table);\r\n\r\n // Create current created rentables \r\n if (vm.rentableZone.rentables && vm.rentableZone.rentables.length > 0){\r\n $(\"#matrix td\").each(function(index){\r\n var id = $(this).attr(\"id\");\r\n var filter = vm.rentableZone.rentables.filter(function(l){\r\n return l.matrixId == id;\r\n });\r\n if (filter.length > 0){\r\n $(this).html(\"\" + filter[0].name);\r\n $(this).addClass(\"available\");\r\n }\r\n });\r\n }\r\n\r\n // Mark available rentables\r\n $(\"#matrix td\").each(function(index){\r\n if ($(this).hasClass(\"available\")){\r\n var id = $(this).attr(\"id\");\r\n var filter = vm.assignedRentables.filter(function(l){ return l.matrixId == id; });\r\n if (filter.length > 0){\r\n $(this).removeClass(\"available\").addClass(\"occuped\");\r\n $(this).html($(this).html() + \"\"+ filter[0].partnerName +\"\");\r\n }\r\n }\r\n });\r\n\r\n\r\n // Set events\r\n $(\"#matrix td\")\r\n .mousedown(function () {\r\n if ($(this).hasClass(\"available\")){\r\n $(\"#matrix td.assign\").removeClass(\"assign\");\r\n $(this).addClass(\"assign\");\r\n\r\n // Set Rentable Id to ng-model\r\n var rentableId = parseInt($(this).find(\"input[type='hidden']\").val());\r\n var ngModel = $element.controller('ngModel');\r\n ngModel.$setViewValue(rentableId);\r\n }else{\r\n $(this).find(\".tooltip\").show();\r\n }\r\n return false; // prevent text selection\r\n });\r\n \r\n $(\"#matrix td\")\r\n .mouseup(function () {\r\n $(this).find(\".tooltip\").hide(); \r\n });\r\n }\r\n\r\n }\r\n\r\n return {\r\n restrict : 'E',\r\n transclude : true,\r\n require : 'ngModel',\r\n scope : {\r\n ngModel : '=', \r\n zoneId : '='\r\n },\r\n controllerAs: 'vm',\r\n controller : mainController,\r\n templateUrl : 'app/main/directives/cd-rentable-selection/cd-rentable-selection.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdPatternModel', function patternModelOverwriteDirective() {\r\n return {\r\n restrict: 'A',\r\n require: '?ngModel',\r\n priority: 1,\r\n compile: function() {\r\n var regexp, patternExp;\r\n \r\n return {\r\n pre: function(scope, elm, attr, ctrl) {\r\n if (!ctrl) return;\r\n \r\n attr.$observe('pattern', function(regex) {\r\n /**\r\n * The built-in directive will call our overwritten validator\r\n * (see below). We just need to update the regex.\r\n * The preLink fn guarantees our observer is called first.\r\n */\r\n if (angular.isString(regex) && regex.length > 0) {\r\n regex = new RegExp('^' + regex + '$');\r\n }\r\n \r\n if (regex && !regex.test) {\r\n //The built-in validator will throw at this point\r\n return;\r\n }\r\n \r\n regexp = regex || undefined;\r\n });\r\n \r\n },\r\n post: function(scope, elm, attr, ctrl) {\r\n if (!ctrl) return;\r\n \r\n regexp, patternExp = attr.ngPattern || attr.pattern;\r\n \r\n //The postLink fn guarantees we overwrite the built-in pattern validator\r\n ctrl.$validators.pattern = function(value) {\r\n return ctrl.$isEmpty(value) ||\r\n angular.isUndefined(regexp) ||\r\n regexp.test(value);\r\n };\r\n }\r\n };\r\n }\r\n };\r\n });\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdPartnersRange', partnersDirective);\r\n \r\n function partnersDirective() {\r\n return {\r\n restrict: 'E',\r\n // scope: true, \r\n scope: {\r\n ngModel: \"=\"\r\n },\r\n require: '^ngModel',\r\n transclude: true,\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.partnersRange = {\r\n from :0,\r\n to :0\r\n };\r\n\r\n scope.changeEvent = function(){\r\n scope.ngModel = scope.partnersRange;\r\n };\r\n\r\n scope.changeEvent(); \r\n },\r\n templateUrl: 'app/main/directives/cd-partners-range/cd-partners-range.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdInputTime', inputTime);\r\n \r\n function inputTime() {\r\n return {\r\n restrict: 'E',\r\n require: '?ngModel',\r\n transclude: true,\r\n scope: {\r\n ngModel: \"=\"\r\n },\r\n templateUrl: 'app/main/directives/cd-input-time/cd-input-time.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('Excel',function($window){\r\n var uri='data:application/vnd.ms-excel;base64,',\r\n template=\r\n ''+\r\n ''+\r\n ' '+\r\n ' '+\r\n ''+\r\n ''+\r\n ' {table}
'+\r\n ''+\r\n '',\r\n base64=function(s){return $window.btoa(unescape(encodeURIComponent(s)));},\r\n format=function(s,c){return s.replace(/{(\\w+)}/g,function(m,p){return c[p];})};\r\n return {\r\n tableToExcel:function(tableId,worksheetName){\r\n var table=$(tableId),\r\n // ctx={worksheet:worksheetName,table:table.html()},\r\n // var table = document.getElementById(tableId),\r\n ctx={worksheet:worksheetName, table:processTable(table)},\r\n href=uri+base64(format(template,ctx));\r\n return href;\r\n }\r\n };\r\n })\r\n .directive('cdExportExcelButton', exportExcelDirective);\r\n \r\n function processTable($table) {\r\n var rows = $table.find('tr');\r\n rows.each(function() {\r\n var cells = $(this).find('td');\r\n cells.each(function() {\r\n var cellContent = $(this).text(); \r\n if (!isNaN(cellContent) && cellContent.length > 15) {\r\n $(this).html('=\"' + cellContent + '\"');\r\n }\r\n });\r\n });\r\n return $table.html();\r\n }\r\n\r\n function exportExcelDirective(Excel, $timeout, msg) {\r\n return {\r\n restrict: 'E',\r\n scope: true, \r\n transclude: true,\r\n link: function(scope){ \r\n scope.exportToExcel = function(){ \r\n if ($('.excel-exportable').length == 0)\r\n {\r\n msg.info('Nothing to export');\r\n return;\r\n }\r\n var exportHref = Excel.tableToExcel('.excel-exportable','ReportData'); \r\n $timeout(\r\n function(){\r\n location.href=exportHref;\r\n },1);\r\n } \r\n },\r\n templateUrl: 'app/main/directives/cd-export-excel-button/cd-export-excel-button.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n /**\r\n * Main module of the Fuse\r\n */\r\n angular\r\n .module('fuse', [\r\n 'LocalStorageModule',\r\n 'ui.mask',\r\n 'moment-picker', \r\n \r\n // Core\r\n 'app.core',\r\n\r\n // Navigation\r\n 'app.navigation',\r\n\r\n // Toolbar\r\n 'app.toolbar',\r\n\r\n // Quick Panel\r\n 'app.quick-panel',\r\n \r\n // Apps\r\n 'app.login',\r\n 'app.license',\r\n 'app.home',\r\n 'app.accionistas',\r\n 'app.partners',\r\n 'app.invoices',\r\n 'app.catalogs',\r\n 'app.inventory',\r\n 'app.security',\r\n 'app.pages',\r\n 'app.reports', \r\n ]);\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module ('fuse')\r\n .directive(\"cdEnter\", cdEnterDirective);\r\n\r\n function cdEnterDirective () {\r\n function mainController($scope, $element, $attrs){\r\n $element.bind(\"keydown keypress\", function (event) {\r\n if(event.which === 13) {\r\n $scope.$apply(function (){\r\n $scope.$eval($attrs.cdEnter);\r\n });\r\n \r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n controller: mainController\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdDateFolio', dateFolioDirective);\r\n \r\n function dateFolioDirective() {\r\n return {\r\n restrict: 'E',\r\n // scope: true, \r\n scope: {\r\n ngModel: \"=\"\r\n },\r\n require: '^ngModel',\r\n transclude: true,\r\n link: function(scope){ \r\n scope.filterByDate = true;\r\n scope.date = {\r\n type : 1,\r\n from : new Date(),\r\n to : new Date()\r\n };\r\n console.log(scope.date);\r\n scope.folio = {\r\n type: 2,\r\n from : null,\r\n to : null\r\n };\r\n\r\n scope.changeEvent = function(){\r\n if (scope.filterByDate){\r\n // scope.ngModel = '|1|' + moment(scope.date.from).format('DD-MM-YYYY') + '|' + moment(scope.date.to).format('DD-MM-YYYY') + '|'\r\n scope.ngModel = scope.date;\r\n }else{\r\n // scope.ngModel = '|2|' + scope.folio.from + '|' + scope.folio.to + '|';\r\n scope.ngModel = scope.folio;\r\n }\r\n }\r\n\r\n scope.changeEvent(); \r\n },\r\n templateUrl: 'app/main/directives/cd-date-folio/cd-date-folio.template.html'\r\n }\r\n }\r\n})();\n(function() {\r\n \r\n /**\r\n * Config\r\n */\r\n var moduleName = 'app.core';\r\n var DEFAULT_ID = '__default';\r\n\r\n /**\r\n * Module\r\n */\r\n angular.module(moduleName)\r\n .directive('cdCustomGrid', ['$compile', '$parse', 'paginationService', dirPaginateDirective])\r\n .directive('dirPaginateNoCompile', noCompileDirective)\r\n .directive('dirPaginationControls', ['paginationService', 'paginationTemplate', dirPaginationControlsDirective])\r\n .filter('itemsPerPage', ['paginationService', itemsPerPageFilter])\r\n .service('paginationService', paginationService)\r\n .provider('paginationTemplate', paginationTemplateProvider)\r\n .run(['$templateCache',dirPaginationControlsTemplateInstaller]);\r\n\r\n function dirPaginateDirective($compile, $parse, paginationService) {\r\n\r\n return {\r\n terminal: true,\r\n multiElement: true,\r\n priority: 100,\r\n compile: dirPaginationCompileFn\r\n };\r\n\r\n function dirPaginationCompileFn(tElement, tAttrs){\r\n\r\n var expression = tAttrs.cdCustomGrid;\r\n // regex taken directly from https://github.com/angular/angular.js/blob/v1.4.x/src/ng/directive/ngRepeat.js#L339\r\n if (expression.indexOf(\"itemsPerPage\") == -1){\r\n expression = expression + ' | itemsPerPage: (10)'; \r\n }\r\n \r\n var match = expression.match(/^\\s*([\\s\\S]+?)\\s+in\\s+([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+track\\s+by\\s+([\\s\\S]+?))?\\s*$/);\r\n \r\n var filterPattern = /\\|\\s*itemsPerPage\\s*:\\s*(.*\\(\\s*\\w*\\)|([^\\)]*?(?=\\s+as\\s+))|[^\\)]*)/;\r\n if (match[2].match(filterPattern) === null) {\r\n throw 'pagination directive: the \\'itemsPerPage\\' filter must be set.';\r\n }\r\n var itemsPerPageFilterRemoved = match[2].replace(filterPattern, '');\r\n var collectionGetter = $parse(itemsPerPageFilterRemoved);\r\n\r\n addNoCompileAttributes(tElement);\r\n\r\n // If any value is specified for paginationId, we register the un-evaluated expression at this stage for the benefit of any\r\n // dir-pagination-controls directives that may be looking for this ID.\r\n var rawId = tAttrs.paginationId || DEFAULT_ID;\r\n paginationService.registerInstance(rawId);\r\n\r\n return function dirPaginationLinkFn(scope, element, attrs){\r\n\r\n // Now that we have access to the `scope` we can interpolate any expression given in the paginationId attribute and\r\n // potentially register a new ID if it evaluates to a different value than the rawId.\r\n var paginationId = $parse(attrs.paginationId)(scope) || attrs.paginationId || DEFAULT_ID;\r\n \r\n // (TODO: this seems sound, but I'm reverting as many bug reports followed it's introduction in 0.11.0.\r\n // Needs more investigation.)\r\n // In case rawId != paginationId we deregister using rawId for the sake of general cleanliness\r\n // before registering using paginationId\r\n // paginationService.deregisterInstance(rawId);\r\n paginationService.registerInstance(paginationId);\r\n\r\n var repeatExpression = getRepeatExpression(expression, paginationId);\r\n addNgRepeatToElement(element, attrs, repeatExpression);\r\n\r\n removeTemporaryAttributes(element);\r\n var compiled = $compile(element);\r\n\r\n var currentPageGetter = makeCurrentPageGetterFn(scope, attrs, paginationId);\r\n paginationService.setCurrentPageParser(paginationId, currentPageGetter, scope);\r\n\r\n if (typeof attrs.totalItems !== 'undefined') {\r\n paginationService.setAsyncModeTrue(paginationId);\r\n scope.$watch(function() {\r\n return $parse(attrs.totalItems)(scope);\r\n }, function (result) {\r\n if (0 <= result) {\r\n paginationService.setCollectionLength(paginationId, result);\r\n }\r\n });\r\n } else {\r\n paginationService.setAsyncModeFalse(paginationId);\r\n scope.$watchCollection(function() {\r\n return collectionGetter(scope);\r\n }, function(collection) {\r\n if (collection) {\r\n var collectionLength = (collection instanceof Array) ? collection.length : Object.keys(collection).length;\r\n paginationService.setCollectionLength(paginationId, collectionLength);\r\n }\r\n });\r\n }\r\n\r\n // Delegate to the link function returned by the new compilation of the ng-repeat\r\n compiled(scope);\r\n \r\n // (TODO: Reverting this due to many bug reports in v 0.11.0. Needs investigation as the\r\n // principle is sound)\r\n // When the scope is destroyed, we make sure to remove the reference to it in paginationService\r\n // so that it can be properly garbage collected\r\n // scope.$on('$destroy', function destroyDirPagination() {\r\n // paginationService.deregisterInstance(paginationId);\r\n // });\r\n };\r\n }\r\n\r\n /**\r\n * If a pagination id has been specified, we need to check that it is present as the second argument passed to\r\n * the itemsPerPage filter. If it is not there, we add it and return the modified expression.\r\n *\r\n * @param expression\r\n * @param paginationId\r\n * @returns {*}\r\n */\r\n function getRepeatExpression(expression, paginationId) {\r\n var repeatExpression,\r\n idDefinedInFilter = !!expression.match(/(\\|\\s*itemsPerPage\\s*:[^|]*:[^|]*)/);\r\n\r\n if (paginationId !== DEFAULT_ID && !idDefinedInFilter) {\r\n repeatExpression = expression.replace(/(\\|\\s*itemsPerPage\\s*:\\s*[^|\\s]*)/, \"$1 : '\" + paginationId + \"'\");\r\n } else {\r\n repeatExpression = expression;\r\n }\r\n\r\n return repeatExpression;\r\n }\r\n\r\n /**\r\n * Adds the ng-repeat directive to the element. In the case of multi-element (-start, -end) it adds the\r\n * appropriate multi-element ng-repeat to the first and last element in the range.\r\n * @param element\r\n * @param attrs\r\n * @param repeatExpression\r\n */\r\n function addNgRepeatToElement(element, attrs, repeatExpression) {\r\n if (element[0].hasAttribute('dir-paginate-start') || element[0].hasAttribute('data-dir-paginate-start')) {\r\n // using multiElement mode (dir-paginate-start, dir-paginate-end)\r\n attrs.$set('ngRepeatStart', repeatExpression);\r\n element.eq(element.length - 1).attr('ng-repeat-end', true);\r\n } else {\r\n attrs.$set('ngRepeat', repeatExpression);\r\n }\r\n }\r\n\r\n /**\r\n * Adds the dir-paginate-no-compile directive to each element in the tElement range.\r\n * @param tElement\r\n */\r\n function addNoCompileAttributes(tElement) {\r\n angular.forEach(tElement, function(el) {\r\n if (el.nodeType === 1) {\r\n angular.element(el).attr('dir-paginate-no-compile', true);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes the variations on dir-paginate (data-, -start, -end) and the dir-paginate-no-compile directives.\r\n * @param element\r\n */\r\n function removeTemporaryAttributes(element) {\r\n angular.forEach(element, function(el) {\r\n if (el.nodeType === 1) {\r\n angular.element(el).removeAttr('dir-paginate-no-compile');\r\n }\r\n });\r\n element.eq(0).removeAttr('dir-paginate-start').removeAttr('cd-custom-grid').removeAttr('data-dir-paginate-start').removeAttr('data-dir-paginate');\r\n element.eq(element.length - 1).removeAttr('dir-paginate-end').removeAttr('data-dir-paginate-end');\r\n }\r\n\r\n /**\r\n * Creates a getter function for the current-page attribute, using the expression provided or a default value if\r\n * no current-page expression was specified.\r\n *\r\n * @param scope\r\n * @param attrs\r\n * @param paginationId\r\n * @returns {*}\r\n */\r\n function makeCurrentPageGetterFn(scope, attrs, paginationId) {\r\n var currentPageGetter;\r\n if (attrs.currentPage) {\r\n currentPageGetter = $parse(attrs.currentPage);\r\n } else {\r\n // If the current-page attribute was not set, we'll make our own.\r\n // Replace any non-alphanumeric characters which might confuse\r\n // the $parse service and give unexpected results.\r\n // See https://github.com/michaelbromley/angularUtils/issues/233\r\n var defaultCurrentPage = (paginationId + '__currentPage').replace(/\\W/g, '_');\r\n scope[defaultCurrentPage] = 1;\r\n currentPageGetter = $parse(defaultCurrentPage);\r\n }\r\n return currentPageGetter;\r\n }\r\n }\r\n\r\n /**\r\n * This is a helper directive that allows correct compilation when in multi-element mode (ie dir-paginate-start, dir-paginate-end).\r\n * It is dynamically added to all elements in the dir-paginate compile function, and it prevents further compilation of\r\n * any inner directives. It is then removed in the link function, and all inner directives are then manually compiled.\r\n */\r\n function noCompileDirective() {\r\n return {\r\n priority: 5000,\r\n terminal: true\r\n };\r\n }\r\n\r\n function dirPaginationControlsTemplateInstaller($templateCache) {\r\n $templateCache.put('angularUtils.directives.dirPagination.template', '{{range.total}} registro(s)');\r\n }\r\n\r\n function dirPaginationControlsDirective(paginationService, paginationTemplate) {\r\n\r\n var numberRegex = /^\\d+$/;\r\n\r\n var DDO = {\r\n restrict: 'AE',\r\n scope: {\r\n maxSize: '=?',\r\n onPageChange: '&?',\r\n paginationId: '=?',\r\n autoHide: '=?'\r\n },\r\n link: dirPaginationControlsLinkFn\r\n };\r\n\r\n // We need to check the paginationTemplate service to see whether a template path or\r\n // string has been specified, and add the `template` or `templateUrl` property to\r\n // the DDO as appropriate. The order of priority to decide which template to use is\r\n // (highest priority first):\r\n // 1. paginationTemplate.getString()\r\n // 2. attrs.templateUrl\r\n // 3. paginationTemplate.getPath()\r\n var templateString = paginationTemplate.getString();\r\n if (templateString !== undefined) {\r\n DDO.template = templateString;\r\n } else {\r\n DDO.templateUrl = function(elem, attrs) {\r\n return attrs.templateUrl || paginationTemplate.getPath();\r\n };\r\n }\r\n return DDO;\r\n\r\n function dirPaginationControlsLinkFn(scope, element, attrs) {\r\n\r\n // rawId is the un-interpolated value of the pagination-id attribute. This is only important when the corresponding dir-paginate directive has\r\n // not yet been linked (e.g. if it is inside an ng-if block), and in that case it prevents this controls directive from assuming that there is\r\n // no corresponding dir-paginate directive and wrongly throwing an exception.\r\n var rawId = attrs.paginationId || DEFAULT_ID;\r\n var paginationId = scope.paginationId || attrs.paginationId || DEFAULT_ID;\r\n\r\n if (!paginationService.isRegistered(paginationId) && !paginationService.isRegistered(rawId)) {\r\n var idMessage = (paginationId !== DEFAULT_ID) ? ' (id: ' + paginationId + ') ' : ' ';\r\n if (window.console) {\r\n console.warn('Pagination directive: the pagination controls' + idMessage + 'cannot be used without the corresponding pagination directive, which was not found at link time.');\r\n }\r\n }\r\n\r\n if (!scope.maxSize) { scope.maxSize = 9; }\r\n scope.autoHide = scope.autoHide === undefined ? true : scope.autoHide;\r\n scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : true;\r\n scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : false;\r\n\r\n var paginationRange = Math.max(scope.maxSize, 5);\r\n scope.pages = [];\r\n scope.pagination = {\r\n last: 1,\r\n current: 1\r\n };\r\n scope.range = {\r\n lower: 1,\r\n upper: 1,\r\n total: 1\r\n };\r\n\r\n scope.$watch('maxSize', function(val) {\r\n if (val) {\r\n paginationRange = Math.max(scope.maxSize, 5);\r\n generatePagination();\r\n }\r\n });\r\n\r\n scope.$watch(function() {\r\n if (paginationService.isRegistered(paginationId)) {\r\n return (paginationService.getCollectionLength(paginationId) + 1) * paginationService.getItemsPerPage(paginationId);\r\n }\r\n }, function(length) {\r\n if (0 < length) {\r\n generatePagination();\r\n }\r\n });\r\n\r\n scope.$watch(function() {\r\n if (paginationService.isRegistered(paginationId)) {\r\n return (paginationService.getItemsPerPage(paginationId));\r\n }\r\n }, function(current, previous) {\r\n if (current != previous && typeof previous !== 'undefined') {\r\n goToPage(scope.pagination.current);\r\n }\r\n });\r\n\r\n scope.$watch(function() {\r\n if (paginationService.isRegistered(paginationId)) {\r\n return paginationService.getCurrentPage(paginationId);\r\n }\r\n }, function(currentPage, previousPage) {\r\n if (currentPage != previousPage) {\r\n goToPage(currentPage);\r\n }\r\n });\r\n\r\n scope.setCurrent = function(num) {\r\n if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {\r\n num = parseInt(num, 10);\r\n paginationService.setCurrentPage(paginationId, num);\r\n }\r\n };\r\n\r\n /**\r\n * Custom \"track by\" function which allows for duplicate \"...\" entries on long lists,\r\n * yet fixes the problem of wrongly-highlighted links which happens when using\r\n * \"track by $index\" - see https://github.com/michaelbromley/angularUtils/issues/153\r\n * @param id\r\n * @param index\r\n * @returns {string}\r\n */\r\n scope.tracker = function(id, index) {\r\n return id + '_' + index;\r\n };\r\n\r\n function goToPage(num) {\r\n if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {\r\n var oldPageNumber = scope.pagination.current;\r\n\r\n scope.pages = generatePagesArray(num, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);\r\n scope.pagination.current = num;\r\n updateRangeValues();\r\n\r\n // if a callback has been set, then call it with the page number as the first argument\r\n // and the previous page number as a second argument\r\n if (scope.onPageChange) {\r\n scope.onPageChange({\r\n newPageNumber : num,\r\n oldPageNumber : oldPageNumber\r\n });\r\n }\r\n }\r\n }\r\n\r\n function generatePagination() {\r\n if (paginationService.isRegistered(paginationId)) {\r\n var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1;\r\n scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);\r\n scope.pagination.current = page;\r\n scope.pagination.last = scope.pages[scope.pages.length - 1];\r\n if (scope.pagination.last < scope.pagination.current) {\r\n scope.setCurrent(scope.pagination.last);\r\n } else {\r\n updateRangeValues();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This function updates the values (lower, upper, total) of the `scope.range` object, which can be used in the pagination\r\n * template to display the current page range, e.g. \"showing 21 - 40 of 144 results\";\r\n */\r\n function updateRangeValues() {\r\n if (paginationService.isRegistered(paginationId)) {\r\n var currentPage = paginationService.getCurrentPage(paginationId),\r\n itemsPerPage = paginationService.getItemsPerPage(paginationId),\r\n totalItems = paginationService.getCollectionLength(paginationId);\r\n\r\n scope.range.lower = (currentPage - 1) * itemsPerPage + 1;\r\n scope.range.upper = Math.min(currentPage * itemsPerPage, totalItems);\r\n scope.range.total = totalItems;\r\n }\r\n }\r\n function isValidPageNumber(num) {\r\n return (numberRegex.test(num) && (0 < num && num <= scope.pagination.last));\r\n }\r\n }\r\n\r\n /**\r\n * Generate an array of page numbers (or the '...' string) which is used in an ng-repeat to generate the\r\n * links used in pagination\r\n *\r\n * @param currentPage\r\n * @param rowsPerPage\r\n * @param paginationRange\r\n * @param collectionLength\r\n * @returns {Array}\r\n */\r\n function generatePagesArray(currentPage, collectionLength, rowsPerPage, paginationRange) {\r\n var pages = [];\r\n var totalPages = Math.ceil(collectionLength / rowsPerPage);\r\n var halfWay = Math.ceil(paginationRange / 2);\r\n var position;\r\n\r\n if (currentPage <= halfWay) {\r\n position = 'start';\r\n } else if (totalPages - halfWay < currentPage) {\r\n position = 'end';\r\n } else {\r\n position = 'middle';\r\n }\r\n\r\n var ellipsesNeeded = paginationRange < totalPages;\r\n var i = 1;\r\n while (i <= totalPages && i <= paginationRange) {\r\n var pageNumber = calculatePageNumber(i, currentPage, paginationRange, totalPages);\r\n\r\n var openingEllipsesNeeded = (i === 2 && (position === 'middle' || position === 'end'));\r\n var closingEllipsesNeeded = (i === paginationRange - 1 && (position === 'middle' || position === 'start'));\r\n if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\r\n pages.push('...');\r\n } else {\r\n pages.push(pageNumber);\r\n }\r\n i ++;\r\n }\r\n return pages;\r\n }\r\n\r\n /**\r\n * Given the position in the sequence of pagination links [i], figure out what page number corresponds to that position.\r\n *\r\n * @param i\r\n * @param currentPage\r\n * @param paginationRange\r\n * @param totalPages\r\n * @returns {*}\r\n */\r\n function calculatePageNumber(i, currentPage, paginationRange, totalPages) {\r\n var halfWay = Math.ceil(paginationRange/2);\r\n if (i === paginationRange) {\r\n return totalPages;\r\n } else if (i === 1) {\r\n return i;\r\n } else if (paginationRange < totalPages) {\r\n if (totalPages - halfWay < currentPage) {\r\n return totalPages - paginationRange + i;\r\n } else if (halfWay < currentPage) {\r\n return currentPage - halfWay + i;\r\n } else {\r\n return i;\r\n }\r\n } else {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This filter slices the collection into pages based on the current page number and number of items per page.\r\n * @param paginationService\r\n * @returns {Function}\r\n */\r\n function itemsPerPageFilter(paginationService) {\r\n\r\n return function(collection, itemsPerPage, paginationId) {\r\n if (typeof (paginationId) === 'undefined') {\r\n paginationId = DEFAULT_ID;\r\n }\r\n if (!paginationService.isRegistered(paginationId)) {\r\n throw 'pagination directive: the itemsPerPage id argument (id: ' + paginationId + ') does not match a registered pagination-id.';\r\n }\r\n var end;\r\n var start;\r\n if (angular.isObject(collection)) {\r\n itemsPerPage = parseInt(itemsPerPage) || 9999999999;\r\n if (paginationService.isAsyncMode(paginationId)) {\r\n start = 0;\r\n } else {\r\n start = (paginationService.getCurrentPage(paginationId) - 1) * itemsPerPage;\r\n }\r\n end = start + itemsPerPage;\r\n paginationService.setItemsPerPage(paginationId, itemsPerPage);\r\n\r\n if (collection instanceof Array) {\r\n // the array just needs to be sliced\r\n return collection.slice(start, end);\r\n } else {\r\n // in the case of an object, we need to get an array of keys, slice that, then map back to\r\n // the original object.\r\n var slicedObject = {};\r\n angular.forEach(keys(collection).slice(start, end), function(key) {\r\n slicedObject[key] = collection[key];\r\n });\r\n return slicedObject;\r\n }\r\n } else {\r\n return collection;\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Shim for the Object.keys() method which does not exist in IE < 9\r\n * @param obj\r\n * @returns {Array}\r\n */\r\n function keys(obj) {\r\n if (!Object.keys) {\r\n var objKeys = [];\r\n for (var i in obj) {\r\n if (obj.hasOwnProperty(i)) {\r\n objKeys.push(i);\r\n }\r\n }\r\n return objKeys;\r\n } else {\r\n return Object.keys(obj);\r\n }\r\n }\r\n\r\n /**\r\n * This service allows the various parts of the module to communicate and stay in sync.\r\n */\r\n function paginationService() {\r\n\r\n var instances = {};\r\n var lastRegisteredInstance;\r\n\r\n this.registerInstance = function(instanceId) {\r\n if (typeof instances[instanceId] === 'undefined') {\r\n instances[instanceId] = {\r\n asyncMode: false\r\n };\r\n lastRegisteredInstance = instanceId;\r\n }\r\n };\r\n\r\n this.deregisterInstance = function(instanceId) {\r\n delete instances[instanceId];\r\n };\r\n \r\n this.isRegistered = function(instanceId) {\r\n return (typeof instances[instanceId] !== 'undefined');\r\n };\r\n\r\n this.getLastInstanceId = function() {\r\n return lastRegisteredInstance;\r\n };\r\n\r\n this.setCurrentPageParser = function(instanceId, val, scope) {\r\n instances[instanceId].currentPageParser = val;\r\n instances[instanceId].context = scope;\r\n };\r\n this.setCurrentPage = function(instanceId, val) {\r\n instances[instanceId].currentPageParser.assign(instances[instanceId].context, val);\r\n };\r\n this.getCurrentPage = function(instanceId) {\r\n var parser = instances[instanceId].currentPageParser;\r\n return parser ? parser(instances[instanceId].context) : 1;\r\n };\r\n\r\n this.setItemsPerPage = function(instanceId, val) {\r\n instances[instanceId].itemsPerPage = val;\r\n };\r\n this.getItemsPerPage = function(instanceId) {\r\n return instances[instanceId].itemsPerPage;\r\n };\r\n\r\n this.setCollectionLength = function(instanceId, val) {\r\n instances[instanceId].collectionLength = val;\r\n };\r\n this.getCollectionLength = function(instanceId) {\r\n return instances[instanceId].collectionLength;\r\n };\r\n\r\n this.setAsyncModeTrue = function(instanceId) {\r\n instances[instanceId].asyncMode = true;\r\n };\r\n\r\n this.setAsyncModeFalse = function(instanceId) {\r\n instances[instanceId].asyncMode = false;\r\n };\r\n\r\n this.isAsyncMode = function(instanceId) {\r\n return instances[instanceId].asyncMode;\r\n };\r\n }\r\n\r\n /**\r\n * This provider allows global configuration of the template path used by the dir-pagination-controls directive.\r\n */\r\n function paginationTemplateProvider() {\r\n\r\n var templatePath = 'angularUtils.directives.dirPagination.template';\r\n var templateString;\r\n\r\n /**\r\n * Set a templateUrl to be used by all instances of \r\n * @param {String} path\r\n */\r\n this.setPath = function(path) {\r\n templatePath = path;\r\n };\r\n\r\n /**\r\n * Set a string of HTML to be used as a template by all instances\r\n * of . If both a path *and* a string have been set,\r\n * the string takes precedence.\r\n * @param {String} str\r\n */\r\n this.setString = function(str) {\r\n templateString = str;\r\n };\r\n\r\n this.$get = function() {\r\n return {\r\n getPath: function() {\r\n return templatePath;\r\n },\r\n getString: function() {\r\n return templateString;\r\n }\r\n };\r\n };\r\n }\r\n})();\r\n \n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdCatalogSelect', ['api', catalogSelect]);\r\n \r\n function catalogSelect(api) {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n transclude: true,\r\n require: '^^cdCatalog',\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.label = attrs.label;\r\n \r\n var apiGroupName = attrs.listApiGroup || \"catalogs\";\r\n var apiName = attrs.listApiSource;\r\n var apiService = api[apiGroupName][apiName];\r\n \r\n scope.required = attrs.required === undefined ? false: true;\r\n\r\n apiService.query(function(response){\r\n scope.list = response;\r\n });\r\n\r\n scope.$on('itemChangeEvent', function (event, args) {\r\n scope.model = args.item[attrs.modelName];\r\n });\r\n \r\n scope.$watch('model', function(m){\r\n scope.$emit(\"itemChildChangeEvent\", {\r\n modelName: attrs.modelName,\r\n value: scope.model \r\n });\r\n });\r\n },\r\n templateUrl: 'app/main/directives/cd-catalog-select/cd-catalog-select.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdCatalogNumeric', catalogInput);\r\n \r\n function catalogInput() {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n transclude: true,\r\n require: '^^cdCatalog',\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.label = attrs.label;\r\n scope.required = attrs.required === undefined ? false: true;\r\n scope.min = attrs.min === undefined ? 0 : attrs.min;\r\n if (attrs.max !== undefined)\r\n scope.max = attrs.max;\r\n\r\n scope.$on('itemChangeEvent', function (event, args) {\r\n scope.model = args.item[attrs.modelName];\r\n });\r\n \r\n scope.$watch('model', function(m){\r\n scope.$emit(\"itemChildChangeEvent\", {\r\n modelName: attrs.modelName,\r\n value: scope.model \r\n });\r\n });\r\n },\r\n templateUrl: 'app/main/directives/cd-catalog-numeric/cd-catalog-numeric.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdCatalogInput', catalogInput);\r\n \r\n function catalogInput() {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n transclude: true,\r\n require: '^^cdCatalog',\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.label = attrs.label;\r\n scope.required = attrs.required === undefined ? false: true;\r\n \r\n scope.$on('itemChangeEvent', function (event, args) {\r\n scope.model = args.item[attrs.modelName];\r\n });\r\n \r\n scope.$watch('model', function(m){\r\n scope.$emit(\"itemChildChangeEvent\", {\r\n modelName: attrs.modelName,\r\n value: scope.model \r\n });\r\n });\r\n },\r\n templateUrl: 'app/main/directives/cd-catalog-input/cd-catalog-input.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdCatalog', catalog);\r\n\r\n function catalog() {\r\n\r\n function mainController($scope, $mdDialog, $document, msg, api, $attrs, CONST_DATATABLES){\r\n var vm = this;\r\n\r\n vm.title = $attrs.title;\r\n vm.itemName = $attrs.itemName || \"elemento\";\r\n var apiGroupName = $attrs.apiGroup || \"catalogs\";\r\n var apiName = $attrs.apiService;\r\n var apiService = api[apiGroupName][apiName];\r\n\r\n // Data\r\n vm.items = [];\r\n vm.item = { nombre: 'tst' };\r\n loadData();\r\n vm.dtInstance = {};\r\n vm.dtOptions =angular.copy($.extend(CONST_DATATABLES.OPTIONS, {\r\n dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n columnDefs : [\r\n {\r\n // Target the ID column\r\n targets: 0,\r\n width : '72px'\r\n },\r\n {\r\n // Target the actions column\r\n targets : 3,\r\n responsivePriority: 1,\r\n filterable : false,\r\n sortable : false\r\n }\r\n ],\r\n initComplete: function ()\r\n {\r\n var api = this.api(),\r\n searchBox = angular.element('body').find('#keyword-search');\r\n\r\n // Bind an external input as a table wide search box\r\n if ( searchBox.length > 0 )\r\n {\r\n searchBox.on('keyup', function (event)\r\n {\r\n api.search(event.target.value).draw();\r\n });\r\n }\r\n },\r\n pagingType : 'simple',\r\n lengthMenu : [10, 20, 30, 50, 100],\r\n pageLength : 10,\r\n scrollY : 'auto',\r\n responsive : true,\r\n filter : true\r\n }));\r\n\r\n // Methods\r\n vm.openDetailDialog = openDetailDialog;\r\n vm.deleteItem = deleteItem;\r\n vm.save = save;\r\n vm.closeDialog = closeDialog;\r\n //////////\r\n\r\n $scope.$on(\"itemChildChangeEvent\", function(ev, args){\r\n vm.item[args.modelName] = args.value;\r\n });\r\n\r\n function loadData(){\r\n apiService.query(function (response) { \r\n vm.items = response \r\n });\r\n }\r\n\r\n function openDetailDialog(ev, item){\r\n if ( !item ){\r\n vm.item = {\r\n id : 0,\r\n name : '',\r\n active : true\r\n };\r\n vm.detailTitle = 'Agregar ' + vm.itemName;\r\n }else{\r\n vm.item = angular.copy(item);\r\n vm.detailTitle = 'Editar ' + vm.itemName;\r\n }\r\n\r\n $scope.$broadcast('itemChangeEvent', { item: vm.item });\r\n\r\n $mdDialog.show({\r\n contentElement : '#detail-dialog',\r\n parent : angular.element($document.find('#content-container')),\r\n targetEvent : ev,\r\n clickOutsideToClose: true\r\n });\r\n }\r\n\r\n function deleteItem(item, event){\r\n msg.confirm('Estas seguro que deseas borrar este ' + vm.itemName + '?', function(){\r\n apiService.delete({ id: item.id }, function(response){\r\n if (response){\r\n loadData();\r\n msg.success(vm.itemName + ' borrado correctamente.');\r\n }\r\n });\r\n });\r\n }\r\n\r\n vm.saving = false;\r\n function save(){\r\n vm.saving = true;\r\n // Save Item\r\n apiService.save(\r\n vm.item,\r\n function(response){\r\n if (response){\r\n msg.success(vm.itemName + ' guardado correctamente.');\r\n loadData();\r\n closeDialog();\r\n vm.saving = false;\r\n }\r\n }, function(errorResponse){\r\n vm.saving = false;\r\n });\r\n }\r\n\r\n function closeDialog(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n\r\n return {\r\n restrict: 'E',\r\n transclude: true,\r\n scope: {\r\n item: '='\r\n },\r\n controllerAs: 'vm',\r\n controller: mainController,\r\n templateUrl: 'app/main/directives/cd-catalog/cd-catalog.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('cdCatalogCheck', catalogCheck);\r\n \r\n function catalogCheck() {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n transclude: true,\r\n require: '^^cdCatalog',\r\n link: function(scope, element, attrs, catalogCtrl){ \r\n scope.label = attrs.label;\r\n scope.required = attrs.required === undefined ? false: true;\r\n \r\n scope.$on('itemChangeEvent', function (event, args) {\r\n scope.model = args.item[attrs.modelName];\r\n });\r\n \r\n scope.$watch('model', function(m){\r\n scope.$emit(\"itemChildChangeEvent\", {\r\n modelName: attrs.modelName,\r\n value: scope.model \r\n });\r\n });\r\n },\r\n templateUrl: 'app/main/directives/cd-catalog-check/cd-catalog-check.template.html'\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsWidgetController', MsWidgetController)\r\n .directive('msWidget', msWidgetDirective)\r\n .directive('msWidgetFront', msWidgetFrontDirective)\r\n .directive('msWidgetBack', msWidgetBackDirective);\r\n\r\n /** @ngInject */\r\n function MsWidgetController($scope, $element)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.flipped = false;\r\n\r\n // Methods\r\n vm.flip = flip;\r\n\r\n //////////\r\n\r\n /**\r\n * Flip the widget\r\n */\r\n function flip()\r\n {\r\n if ( !isFlippable() )\r\n {\r\n return;\r\n }\r\n\r\n // Toggle flipped status\r\n vm.flipped = !vm.flipped;\r\n\r\n // Toggle the 'flipped' class\r\n $element.toggleClass('flipped', vm.flipped);\r\n }\r\n\r\n /**\r\n * Check if widget is flippable\r\n *\r\n * @returns {boolean}\r\n */\r\n function isFlippable()\r\n {\r\n return (angular.isDefined($scope.flippable) && $scope.flippable === true);\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msWidgetDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {\r\n flippable: '=?'\r\n },\r\n controller: 'MsWidgetController',\r\n transclude: true,\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-widget');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\r\n {\r\n // Custom transclusion\r\n transcludeFn(function (clone)\r\n {\r\n iElement.empty();\r\n iElement.append(clone);\r\n });\r\n\r\n //////////\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msWidgetFrontDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n require : '^msWidget',\r\n transclude: true,\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-widget-front');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\r\n {\r\n // Custom transclusion\r\n transcludeFn(function (clone)\r\n {\r\n iElement.empty();\r\n iElement.append(clone);\r\n });\r\n\r\n // Methods\r\n scope.flipWidget = MsWidgetCtrl.flip;\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msWidgetBackDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n require : '^msWidget',\r\n transclude: true,\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-widget-back');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\r\n {\r\n // Custom transclusion\r\n transcludeFn(function (clone)\r\n {\r\n iElement.empty();\r\n iElement.append(clone);\r\n });\r\n\r\n // Methods\r\n scope.flipWidget = MsWidgetCtrl.flip;\r\n };\r\n }\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsTimelineController', MsTimelineController)\r\n .directive('msTimeline', msTimelineDirective)\r\n .directive('msTimelineItem', msTimelineItemDirective);\r\n\r\n /** @ngInject */\r\n function MsTimelineController()\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.scrollEl = undefined;\r\n\r\n // Methods\r\n vm.setScrollEl = setScrollEl;\r\n vm.getScrollEl = getScrollEl;\r\n\r\n //////////\r\n\r\n /**\r\n * Set scroll element\r\n *\r\n * @param scrollEl\r\n */\r\n function setScrollEl(scrollEl)\r\n {\r\n vm.scrollEl = scrollEl;\r\n }\r\n\r\n /**\r\n * Get scroll element\r\n *\r\n * @returns {undefined|*}\r\n */\r\n function getScrollEl()\r\n {\r\n return vm.scrollEl;\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msTimelineDirective()\r\n {\r\n return {\r\n scope : {\r\n msTimeline: '=?',\r\n loadMore : '&?msTimelineLoadMore'\r\n },\r\n controller: 'MsTimelineController',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-timeline');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\r\n {\r\n // Create an element for triggering the load more action and append it\r\n var loadMoreEl = angular.element('
');\r\n iElement.append(loadMoreEl);\r\n\r\n // Default config\r\n var config = {\r\n scrollEl: '#content'\r\n };\r\n\r\n // Extend the configuration\r\n config = angular.extend(config, scope.msTimeline, {});\r\n \r\n // Grab the scrollable element and store it in the controller for general use\r\n var scrollEl = angular.element(config.scrollEl);\r\n MsTimelineCtrl.setScrollEl(scrollEl);\r\n\r\n // Threshold\r\n var threshold = 144;\r\n\r\n // Register onScroll event for the first time\r\n registerOnScroll();\r\n\r\n /**\r\n * onScroll Event\r\n */\r\n function onScroll()\r\n {\r\n if ( scrollEl.scrollTop() + scrollEl.height() + threshold > loadMoreEl.position().top )\r\n {\r\n // Show the loader\r\n loadMoreEl.addClass('show');\r\n\r\n // Unregister scroll event to prevent triggering the function over and over again\r\n unregisterOnScroll();\r\n\r\n // Trigger load more event\r\n scope.loadMore().then(\r\n // Success\r\n function ()\r\n {\r\n // Hide the loader\r\n loadMoreEl.removeClass('show');\r\n\r\n // Register the onScroll event again\r\n registerOnScroll();\r\n },\r\n\r\n // Error\r\n function ()\r\n {\r\n // Remove the loader completely\r\n loadMoreEl.remove();\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * onScroll event registerer\r\n */\r\n function registerOnScroll()\r\n {\r\n scrollEl.on('scroll', onScroll);\r\n }\r\n\r\n /**\r\n * onScroll event unregisterer\r\n */\r\n function unregisterOnScroll()\r\n {\r\n scrollEl.off('scroll', onScroll);\r\n }\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n unregisterOnScroll();\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msTimelineItemDirective($timeout, $q)\r\n {\r\n return {\r\n scope : true,\r\n require: '^msTimeline',\r\n compile: function (tElement)\r\n {\r\n tElement.addClass('ms-timeline-item').addClass('hidden');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\r\n {\r\n var threshold = 72,\r\n itemLoaded = false,\r\n itemInViewport = false,\r\n scrollEl = MsTimelineCtrl.getScrollEl();\r\n\r\n //////////\r\n\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Check if the timeline item has ms-card\r\n if ( iElement.find('ms-card') )\r\n {\r\n // If the ms-card template loaded...\r\n scope.$on('msCard::cardTemplateLoaded', function (event, args)\r\n {\r\n var cardEl = angular.element(args[0]);\r\n\r\n // Test the card to see if there is any image on it\r\n testForImage(cardEl).then(function ()\r\n {\r\n $timeout(function ()\r\n {\r\n itemLoaded = true;\r\n });\r\n });\r\n });\r\n }\r\n else\r\n {\r\n // Test the element to see if there is any image on it\r\n testForImage(iElement).then(function ()\r\n {\r\n $timeout(function ()\r\n {\r\n itemLoaded = true;\r\n });\r\n });\r\n }\r\n\r\n // Check if the loaded element also in the viewport\r\n scrollEl.on('scroll', testForVisibility);\r\n\r\n // Test for visibility for the first time without waiting for the scroll event\r\n testForVisibility();\r\n }\r\n\r\n // Item ready watcher\r\n var itemReadyWatcher = scope.$watch(\r\n function ()\r\n {\r\n return itemLoaded && itemInViewport;\r\n },\r\n function (current, old)\r\n {\r\n if ( angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n if ( current )\r\n {\r\n iElement.removeClass('hidden').addClass('animate');\r\n\r\n // Unbind itemReadyWatcher\r\n itemReadyWatcher();\r\n }\r\n }, true);\r\n\r\n /**\r\n * Test the given element for image\r\n *\r\n * @param element\r\n * @returns promise\r\n */\r\n function testForImage(element)\r\n {\r\n var deferred = $q.defer(),\r\n imgEl = element.find('img');\r\n\r\n if ( imgEl.length > 0 )\r\n {\r\n imgEl.on('load', function ()\r\n {\r\n deferred.resolve('Image is loaded');\r\n });\r\n }\r\n else\r\n {\r\n deferred.resolve('No images');\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Test the element for visibility\r\n */\r\n function testForVisibility()\r\n {\r\n if ( scrollEl.scrollTop() + scrollEl.height() > iElement.position().top + threshold )\r\n {\r\n $timeout(function ()\r\n {\r\n itemInViewport = true;\r\n });\r\n\r\n // Unbind the scroll event\r\n scrollEl.off('scroll', testForVisibility);\r\n }\r\n }\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsShortcutsController', MsShortcutsController)\r\n .directive('msShortcuts', msShortcutsDirective);\r\n\r\n /** @ngInject */\r\n function MsShortcutsController($scope, $cookies, $document, $timeout, $q, msNavigationService)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.query = '';\r\n vm.queryOptions = {\r\n debounce: 300\r\n };\r\n vm.resultsLoading = false;\r\n vm.selectedResultIndex = 0;\r\n vm.ignoreMouseEvents = false;\r\n vm.mobileBarActive = false;\r\n\r\n vm.results = null;\r\n vm.shortcuts = [];\r\n\r\n vm.sortableOptions = {\r\n ghostClass : 'ghost',\r\n forceFallback: true,\r\n fallbackClass: 'dragging',\r\n onSort : function ()\r\n {\r\n vm.saveShortcuts();\r\n }\r\n };\r\n\r\n // Methods\r\n vm.populateResults = populateResults;\r\n vm.loadShortcuts = loadShortcuts;\r\n vm.saveShortcuts = saveShortcuts;\r\n vm.addShortcut = addShortcut;\r\n vm.removeShortcut = removeShortcut;\r\n vm.handleResultClick = handleResultClick;\r\n\r\n vm.absorbEvent = absorbEvent;\r\n vm.handleKeydown = handleKeydown;\r\n vm.handleMouseenter = handleMouseenter;\r\n vm.temporarilyIgnoreMouseEvents = temporarilyIgnoreMouseEvents;\r\n vm.ensureSelectedResultIsVisible = ensureSelectedResultIsVisible;\r\n vm.toggleMobileBar = toggleMobileBar;\r\n\r\n //////////\r\n\r\n init();\r\n\r\n function init()\r\n {\r\n // Load the shortcuts\r\n vm.loadShortcuts().then(\r\n // Success\r\n function (response)\r\n {\r\n vm.shortcuts = response;\r\n\r\n // Add shortcuts as results by default\r\n if ( vm.shortcuts.length > 0 )\r\n {\r\n vm.results = response;\r\n }\r\n }\r\n );\r\n\r\n // Watch the model changes to trigger the search\r\n $scope.$watch('MsShortcuts.query', function (current, old)\r\n {\r\n if ( angular.isUndefined(current) )\r\n {\r\n return;\r\n }\r\n\r\n if ( angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n // Show the loader\r\n vm.resultsLoading = true;\r\n\r\n // Populate the results\r\n vm.populateResults().then(\r\n // Success\r\n function (response)\r\n {\r\n vm.results = response;\r\n },\r\n // Error\r\n function ()\r\n {\r\n vm.results = [];\r\n }\r\n ).finally(\r\n function ()\r\n {\r\n // Hide the loader\r\n vm.resultsLoading = false;\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Populate the results\r\n */\r\n function populateResults()\r\n {\r\n var results = [],\r\n flatNavigation = msNavigationService.getFlatNavigation(),\r\n deferred = $q.defer();\r\n\r\n // Iterate through the navigation array and\r\n // make sure it doesn't have any groups or\r\n // none ui-sref items\r\n for ( var x = 0; x < flatNavigation.length; x++ )\r\n {\r\n if ( flatNavigation[x].uisref )\r\n {\r\n results.push(flatNavigation[x]);\r\n }\r\n }\r\n\r\n // If there is a query, filter the results\r\n if ( vm.query )\r\n {\r\n results = results.filter(function (item)\r\n {\r\n if ( angular.lowercase(item.title).search(angular.lowercase(vm.query)) > -1 )\r\n {\r\n return true;\r\n }\r\n });\r\n\r\n // Iterate through one last time and\r\n // add required properties to items\r\n for ( var i = 0; i < results.length; i++ )\r\n {\r\n // Add false to hasShortcut by default\r\n results[i].hasShortcut = false;\r\n\r\n // Test if the item is in the shortcuts list\r\n for ( var y = 0; y < vm.shortcuts.length; y++ )\r\n {\r\n if ( vm.shortcuts[y]._id === results[i]._id )\r\n {\r\n results[i].hasShortcut = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n // If the query is empty, that means\r\n // there is nothing to search for so\r\n // we will populate the results with\r\n // current shortcuts if there is any\r\n if ( vm.shortcuts.length > 0 )\r\n {\r\n results = vm.shortcuts;\r\n }\r\n }\r\n\r\n // Reset the selected result\r\n vm.selectedResultIndex = 0;\r\n\r\n // Fake the service delay\r\n $timeout(function ()\r\n {\r\n // Resolve the promise\r\n deferred.resolve(results);\r\n }, 250);\r\n\r\n // Return a promise\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Load shortcuts\r\n */\r\n function loadShortcuts()\r\n {\r\n var deferred = $q.defer();\r\n\r\n // For the demo purposes, we will\r\n // load the shortcuts from the cookies.\r\n // But here you can make an API call\r\n // to load them from the DB.\r\n var shortcuts = angular.fromJson($cookies.get('FUSE.shortcuts'));\r\n\r\n // No cookie available. Generate one\r\n // for the demo purposes...\r\n if ( angular.isUndefined(shortcuts) )\r\n {\r\n shortcuts = [\r\n // {\r\n // 'title' : 'Sample',\r\n // 'icon' : 'icon-tile-four',\r\n // 'state' : 'app.sample',\r\n // 'weight' : 1,\r\n // 'children' : [],\r\n // '_id' : 'sample',\r\n // '_path' : 'apps.sample',\r\n // 'uisref' : 'app.sample',\r\n // 'hasShortcut': true\r\n // }\r\n ];\r\n\r\n $cookies.put('FUSE.shortcuts', angular.toJson(shortcuts));\r\n }\r\n\r\n // Resolve the promise\r\n deferred.resolve(shortcuts);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Save the shortcuts\r\n */\r\n function saveShortcuts()\r\n {\r\n var deferred = $q.defer();\r\n\r\n // For the demo purposes, we will\r\n // keep the shortcuts in the cookies.\r\n // But here you can make an API call\r\n // to save them to the DB.\r\n $cookies.put('FUSE.shortcuts', angular.toJson(vm.shortcuts));\r\n\r\n // Fake the service delay\r\n $timeout(function ()\r\n {\r\n deferred.resolve({'success': true});\r\n }, 250);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Add item as shortcut\r\n *\r\n * @param item\r\n */\r\n function addShortcut(item)\r\n {\r\n // Update the hasShortcut status\r\n item.hasShortcut = true;\r\n\r\n // Add as a shortcut\r\n vm.shortcuts.push(item);\r\n\r\n // Save the shortcuts\r\n vm.saveShortcuts();\r\n }\r\n\r\n /**\r\n * Remove item from shortcuts\r\n *\r\n * @param item\r\n */\r\n function removeShortcut(item)\r\n {\r\n // Update the hasShortcut status\r\n item.hasShortcut = false;\r\n\r\n // Remove the shortcut\r\n for ( var x = 0; x < vm.shortcuts.length; x++ )\r\n {\r\n if ( vm.shortcuts[x]._id === item._id )\r\n {\r\n // Remove the x-th item from the array\r\n vm.shortcuts.splice(x, 1);\r\n\r\n // If we aren't searching for anything...\r\n if ( !vm.query )\r\n {\r\n // If all the shortcuts have been removed,\r\n // null-ify the results\r\n if ( vm.shortcuts.length === 0 )\r\n {\r\n vm.results = null;\r\n }\r\n // Otherwise update the selected index\r\n else\r\n {\r\n if ( x >= vm.shortcuts.length )\r\n {\r\n vm.selectedResultIndex = vm.shortcuts.length - 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Save the shortcuts\r\n vm.saveShortcuts();\r\n }\r\n\r\n /**\r\n * Handle the result click\r\n *\r\n * @param item\r\n */\r\n function handleResultClick(item)\r\n {\r\n // Add or remove the shortcut\r\n if ( item.hasShortcut )\r\n {\r\n vm.removeShortcut(item);\r\n }\r\n else\r\n {\r\n vm.addShortcut(item);\r\n }\r\n }\r\n\r\n /**\r\n * Absorb the given event\r\n *\r\n * @param event\r\n */\r\n function absorbEvent(event)\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Handle keydown\r\n *\r\n * @param event\r\n */\r\n function handleKeydown(event)\r\n {\r\n var keyCode = event.keyCode,\r\n keys = [38, 40];\r\n\r\n // Prevent the default action if\r\n // one of the keys are pressed that\r\n // we are listening\r\n if ( keys.indexOf(keyCode) > -1 )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n switch ( keyCode )\r\n {\r\n // Enter\r\n case 13:\r\n\r\n // Trigger result click\r\n vm.handleResultClick(vm.results[vm.selectedResultIndex]);\r\n\r\n break;\r\n\r\n // Up Arrow\r\n case 38:\r\n\r\n // Decrease the selected result index\r\n if ( vm.selectedResultIndex - 1 >= 0 )\r\n {\r\n // Decrease the selected index\r\n vm.selectedResultIndex--;\r\n\r\n // Make sure the selected result is in the view\r\n vm.ensureSelectedResultIsVisible();\r\n }\r\n\r\n break;\r\n\r\n // Down Arrow\r\n case 40:\r\n\r\n // Increase the selected result index\r\n if ( vm.selectedResultIndex + 1 < vm.results.length )\r\n {\r\n // Increase the selected index\r\n vm.selectedResultIndex++;\r\n\r\n // Make sure the selected result is in the view\r\n vm.ensureSelectedResultIsVisible();\r\n }\r\n\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Handle mouseenter\r\n *\r\n * @param index\r\n */\r\n function handleMouseenter(index)\r\n {\r\n if ( vm.ignoreMouseEvents )\r\n {\r\n return;\r\n }\r\n\r\n // Update the selected result index\r\n // with the given index\r\n vm.selectedResultIndex = index;\r\n }\r\n\r\n /**\r\n * Set a variable for a limited time\r\n * to make other functions to ignore\r\n * the mouse events\r\n */\r\n function temporarilyIgnoreMouseEvents()\r\n {\r\n // Set the variable\r\n vm.ignoreMouseEvents = true;\r\n\r\n // Cancel the previous timeout\r\n $timeout.cancel(vm.mouseEventIgnoreTimeout);\r\n\r\n // Set the timeout\r\n vm.mouseEventIgnoreTimeout = $timeout(function ()\r\n {\r\n vm.ignoreMouseEvents = false;\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Ensure the selected result will\r\n * always be visible on the results\r\n * area\r\n */\r\n function ensureSelectedResultIsVisible()\r\n {\r\n var resultsEl = $document.find('#ms-shortcut-add-menu').find('.results'),\r\n selectedItemEl = angular.element(resultsEl.find('.result')[vm.selectedResultIndex]);\r\n\r\n if ( resultsEl && selectedItemEl )\r\n {\r\n var top = selectedItemEl.position().top - 8,\r\n bottom = selectedItemEl.position().top + selectedItemEl.outerHeight() + 8;\r\n\r\n // Start ignoring mouse events\r\n vm.temporarilyIgnoreMouseEvents();\r\n\r\n if ( resultsEl.scrollTop() > top )\r\n {\r\n resultsEl.scrollTop(top);\r\n }\r\n\r\n if ( bottom > (resultsEl.height() + resultsEl.scrollTop()) )\r\n {\r\n resultsEl.scrollTop(bottom - resultsEl.height());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle mobile bar\r\n */\r\n function toggleMobileBar()\r\n {\r\n vm.mobileBarActive = !vm.mobileBarActive;\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msShortcutsDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {},\r\n require : 'msShortcuts',\r\n controller : 'MsShortcutsController as MsShortcuts',\r\n bindToController: {},\r\n templateUrl : 'app/core/directives/ms-shortcuts/ms-shortcuts.html',\r\n compile : function (tElement)\r\n {\r\n // Add class\r\n tElement.addClass('ms-shortcuts');\r\n\r\n return function postLink(scope, iElement)\r\n {\r\n // Data\r\n\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsStepperController', MsStepperController)\r\n .directive('msHorizontalStepper', msHorizontalStepperDirective)\r\n .directive('msHorizontalStepperStep', msHorizontalStepperStepDirective)\r\n .directive('msVerticalStepper', msVerticalStepperDirective)\r\n .directive('msVerticalStepperStep', msVerticalStepperStepDirective);\r\n\r\n /** @ngInject */\r\n function MsStepperController($timeout)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.mainForm = undefined;\r\n\r\n vm.orientation = 'horizontal';\r\n vm.steps = [];\r\n vm.currentStep = undefined;\r\n vm.currentStepNumber = 1;\r\n\r\n // Methods\r\n vm.setOrientation = setOrientation;\r\n vm.registerMainForm = registerMainForm;\r\n vm.registerStep = registerStep;\r\n vm.setupSteps = setupSteps;\r\n vm.resetForm = resetForm;\r\n\r\n vm.setCurrentStep = setCurrentStep;\r\n\r\n vm.gotoStep = gotoStep;\r\n vm.gotoPreviousStep = gotoPreviousStep;\r\n vm.gotoNextStep = gotoNextStep;\r\n vm.gotoFirstStep = gotoFirstStep;\r\n vm.gotoLastStep = gotoLastStep;\r\n\r\n vm.isFirstStep = isFirstStep;\r\n vm.isLastStep = isLastStep;\r\n\r\n vm.isStepCurrent = isStepCurrent;\r\n vm.isStepDisabled = isStepDisabled;\r\n vm.isStepOptional = isStepOptional;\r\n vm.isStepHidden = isStepHidden;\r\n vm.filterHiddenStep = filterHiddenStep;\r\n vm.isStepValid = isStepValid;\r\n vm.isStepNumberValid = isStepNumberValid;\r\n\r\n vm.isFormValid = isFormValid;\r\n\r\n //////////\r\n\r\n /**\r\n * Set the orientation of the stepper\r\n *\r\n * @param orientation\r\n */\r\n function setOrientation(orientation)\r\n {\r\n vm.orientation = orientation || 'horizontal';\r\n }\r\n\r\n /**\r\n * Register the main form\r\n *\r\n * @param form\r\n */\r\n function registerMainForm(form)\r\n {\r\n vm.mainForm = form;\r\n }\r\n\r\n /**\r\n * Register a step\r\n *\r\n * @param element\r\n * @param scope\r\n * @param form\r\n */\r\n function registerStep(element, scope, form)\r\n {\r\n var step = {\r\n element : element,\r\n scope : scope,\r\n form : form,\r\n stepNumber : scope.step || (vm.steps.length + 1),\r\n stepTitle : scope.stepTitle,\r\n stepTitleTranslate: scope.stepTitleTranslate\r\n };\r\n\r\n // Push the step into steps array\r\n vm.steps.push(step);\r\n\r\n // Sort steps by stepNumber\r\n vm.steps.sort(function (a, b)\r\n {\r\n return a.stepNumber - b.stepNumber;\r\n });\r\n\r\n return step;\r\n }\r\n\r\n /**\r\n * Setup steps for the first time\r\n */\r\n function setupSteps()\r\n {\r\n vm.setCurrentStep(vm.currentStepNumber);\r\n }\r\n\r\n /**\r\n * Reset steps and the main form\r\n */\r\n function resetForm()\r\n {\r\n // Timeout is required here because we need to\r\n // let form model to reset before setting the\r\n // statuses\r\n $timeout(function ()\r\n {\r\n // Reset all the steps\r\n for ( var x = 0; x < vm.steps.length; x++ )\r\n {\r\n vm.steps[x].form.$setPristine();\r\n vm.steps[x].form.$setUntouched();\r\n }\r\n\r\n // Reset the main form\r\n vm.mainForm.$setPristine();\r\n vm.mainForm.$setUntouched();\r\n\r\n // Go to first step\r\n gotoFirstStep();\r\n });\r\n }\r\n\r\n /**\r\n * Set current step\r\n *\r\n * @param stepNumber\r\n */\r\n function setCurrentStep(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return;\r\n }\r\n\r\n // Update the current step number\r\n vm.currentStepNumber = stepNumber;\r\n\r\n if ( vm.orientation === 'horizontal' )\r\n {\r\n // Hide all steps\r\n for ( var i = 0; i < vm.steps.length; i++ )\r\n {\r\n vm.steps[i].element.hide();\r\n }\r\n\r\n // Show the current step\r\n vm.steps[vm.currentStepNumber - 1].element.show();\r\n }\r\n else if ( vm.orientation === 'vertical' )\r\n {\r\n // Hide all step content\r\n for ( var j = 0; j < vm.steps.length; j++ )\r\n {\r\n vm.steps[j].element.find('.ms-stepper-step-content').hide();\r\n }\r\n\r\n // Show the current step content\r\n vm.steps[vm.currentStepNumber - 1].element.find('.ms-stepper-step-content').show();\r\n }\r\n }\r\n\r\n /**\r\n * Go to a step\r\n *\r\n * @param stepNumber\r\n */\r\n function gotoStep(stepNumber)\r\n {\r\n // If the step we are about to go\r\n // is hidden, bail...\r\n if ( isStepHidden(stepNumber) )\r\n {\r\n return;\r\n }\r\n\r\n vm.setCurrentStep(stepNumber);\r\n }\r\n\r\n /**\r\n * Go to the previous step\r\n */\r\n function gotoPreviousStep()\r\n {\r\n var stepNumber = vm.currentStepNumber - 1;\r\n\r\n // Test the previous steps and make sure we\r\n // will land to the one that is not hidden\r\n for ( var s = stepNumber; s >= 1; s-- )\r\n {\r\n if ( !isStepHidden(s) )\r\n {\r\n stepNumber = s;\r\n break;\r\n }\r\n }\r\n\r\n vm.setCurrentStep(stepNumber);\r\n }\r\n\r\n /**\r\n * Go to the next step\r\n */\r\n function gotoNextStep()\r\n {\r\n var stepNumber = vm.currentStepNumber + 1;\r\n\r\n // Test the following steps and make sure we\r\n // will land to the one that is not hidden\r\n for ( var s = stepNumber; s <= vm.steps.length; s++ )\r\n {\r\n if ( !isStepHidden(s) )\r\n {\r\n stepNumber = s;\r\n break;\r\n }\r\n }\r\n\r\n vm.setCurrentStep(stepNumber);\r\n }\r\n\r\n /**\r\n * Go to the first step\r\n */\r\n function gotoFirstStep()\r\n {\r\n vm.setCurrentStep(1);\r\n }\r\n\r\n /**\r\n * Go to the last step\r\n */\r\n function gotoLastStep()\r\n {\r\n vm.setCurrentStep(vm.steps.length);\r\n }\r\n\r\n /**\r\n * Check if the current step is the first step\r\n *\r\n * @returns {boolean}\r\n */\r\n function isFirstStep()\r\n {\r\n return vm.currentStepNumber === 1;\r\n }\r\n\r\n /**\r\n * Check if the current step is the last step\r\n *\r\n * @returns {boolean}\r\n */\r\n function isLastStep()\r\n {\r\n return vm.currentStepNumber === vm.steps.length;\r\n }\r\n\r\n /**\r\n * Check if the given step is the current one\r\n *\r\n * @param stepNumber\r\n * @returns {null|boolean}\r\n */\r\n function isStepCurrent(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return null;\r\n }\r\n\r\n return vm.currentStepNumber === stepNumber;\r\n }\r\n\r\n /**\r\n * Check if the given step should be disabled\r\n *\r\n * @param stepNumber\r\n * @returns {null|boolean}\r\n */\r\n function isStepDisabled(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return null;\r\n }\r\n\r\n var disabled = false;\r\n\r\n for ( var i = 1; i < stepNumber; i++ )\r\n {\r\n if ( !isStepValid(i) )\r\n {\r\n disabled = true;\r\n break;\r\n }\r\n }\r\n\r\n return disabled;\r\n }\r\n\r\n /**\r\n * Check if the given step is optional\r\n *\r\n * @param stepNumber\r\n * @returns {null|boolean}\r\n */\r\n function isStepOptional(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return null;\r\n }\r\n\r\n return vm.steps[stepNumber - 1].scope.optionalStep;\r\n }\r\n\r\n /**\r\n * Check if the given step is hidden\r\n *\r\n * @param stepNumber\r\n * @returns {null|boolean}\r\n */\r\n function isStepHidden(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return null;\r\n }\r\n\r\n return !!vm.steps[stepNumber - 1].scope.hideStep;\r\n }\r\n\r\n /**\r\n * Check if the given step is hidden as a filter\r\n *\r\n * @param step\r\n * @returns {boolean}\r\n */\r\n function filterHiddenStep(step)\r\n {\r\n return !isStepHidden(step.stepNumber);\r\n }\r\n\r\n /**\r\n * Check if the given step is valid\r\n *\r\n * @param stepNumber\r\n * @returns {null|boolean}\r\n */\r\n function isStepValid(stepNumber)\r\n {\r\n // If the stepNumber is not a valid step number, bail...\r\n if ( !isStepNumberValid(stepNumber) )\r\n {\r\n return null;\r\n }\r\n\r\n // If the step is optional, always return true\r\n if ( isStepOptional(stepNumber) )\r\n {\r\n return true;\r\n }\r\n\r\n return vm.steps[stepNumber - 1].form.$valid;\r\n }\r\n\r\n /**\r\n * Check if the given step number is a valid step number\r\n *\r\n * @param stepNumber\r\n * @returns {boolean}\r\n */\r\n function isStepNumberValid(stepNumber)\r\n {\r\n return !(angular.isUndefined(stepNumber) || stepNumber < 1 || stepNumber > vm.steps.length);\r\n }\r\n\r\n /**\r\n * Check if the entire form is valid\r\n *\r\n * @returns {boolean}\r\n */\r\n function isFormValid()\r\n {\r\n return vm.mainForm.$valid;\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msHorizontalStepperDirective()\r\n {\r\n return {\r\n restrict : 'A',\r\n scope : {},\r\n require : ['form', 'msHorizontalStepper'],\r\n priority : 1001,\r\n controller : 'MsStepperController as MsStepper',\r\n bindToController: {\r\n model: '=ngModel'\r\n },\r\n transclude : true,\r\n templateUrl : 'app/core/directives/ms-stepper/templates/horizontal/horizontal.html',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-stepper');\r\n\r\n return function postLink(scope, iElement, iAttrs, ctrls)\r\n {\r\n var FormCtrl = ctrls[0],\r\n MsStepperCtrl = ctrls[1];\r\n\r\n // Register the main form and setup\r\n // the steps for the first time\r\n MsStepperCtrl.setOrientation('horizontal');\r\n MsStepperCtrl.registerMainForm(FormCtrl);\r\n MsStepperCtrl.setupSteps();\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msHorizontalStepperStepDirective()\r\n {\r\n return {\r\n restrict: 'E',\r\n require : ['form', '^msHorizontalStepper'],\r\n priority: 1000,\r\n scope : {\r\n step : '=?',\r\n stepTitle : '=?',\r\n stepTitleTranslate: '=?',\r\n optionalStep : '=?',\r\n hideStep : '=?'\r\n },\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-stepper-step');\r\n\r\n return function postLink(scope, iElement, iAttrs, ctrls)\r\n {\r\n var FormCtrl = ctrls[0],\r\n MsStepperCtrl = ctrls[1];\r\n\r\n // Is it an optional step?\r\n scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\r\n\r\n // Register the step\r\n MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\r\n\r\n // Hide the step by default\r\n iElement.hide();\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msVerticalStepperDirective($timeout)\r\n {\r\n return {\r\n restrict : 'A',\r\n scope : {},\r\n require : ['form', 'msVerticalStepper'],\r\n priority : 1001,\r\n controller : 'MsStepperController as MsStepper',\r\n bindToController: {\r\n model: '=ngModel'\r\n },\r\n transclude : true,\r\n templateUrl : 'app/core/directives/ms-stepper/templates/vertical/vertical.html',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-stepper');\r\n\r\n return function postLink(scope, iElement, iAttrs, ctrls)\r\n {\r\n var FormCtrl = ctrls[0],\r\n MsStepperCtrl = ctrls[1];\r\n\r\n // Register the main form and setup\r\n // the steps for the first time\r\n\r\n // Timeout is required in vertical stepper\r\n // as we are using transclusion in steps.\r\n // We have to wait for them to be transcluded\r\n // and registered to the controller\r\n $timeout(function ()\r\n {\r\n MsStepperCtrl.setOrientation('vertical');\r\n MsStepperCtrl.registerMainForm(FormCtrl);\r\n MsStepperCtrl.setupSteps();\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msVerticalStepperStepDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n require : ['form', '^msVerticalStepper'],\r\n priority : 1000,\r\n scope : {\r\n step : '=?',\r\n stepTitle : '=?',\r\n stepTitleTranslate: '=?',\r\n optionalStep : '=?',\r\n hideStep : '=?'\r\n },\r\n transclude : true,\r\n templateUrl: 'app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-stepper-step');\r\n\r\n return function postLink(scope, iElement, iAttrs, ctrls)\r\n {\r\n var FormCtrl = ctrls[0],\r\n MsStepperCtrl = ctrls[1];\r\n\r\n // Is it an optional step?\r\n scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\r\n\r\n // Register the step\r\n scope.stepInfo = MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\r\n\r\n // Expose the controller to the scope\r\n scope.MsStepper = MsStepperCtrl;\r\n\r\n // Hide the step content by default\r\n iElement.find('.ms-stepper-step-content').hide();\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msSplashScreen', msSplashScreenDirective);\r\n\r\n /** @ngInject */\r\n function msSplashScreenDirective($animate)\r\n {\r\n return {\r\n restrict: 'E',\r\n link : function (scope, iElement)\r\n {\r\n var splashScreenRemoveEvent = scope.$on('msSplashScreen::remove', function ()\r\n {\r\n $animate.leave(iElement).then(function ()\r\n {\r\n // De-register scope event\r\n splashScreenRemoveEvent();\r\n\r\n // Null-ify everything else\r\n scope = iElement = null;\r\n });\r\n });\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msSidenavHelper', msSidenavHelperDirective);\r\n\r\n /** @ngInject */\r\n function msSidenavHelperDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n require : '^mdSidenav',\r\n link : function (scope, iElement, iAttrs, MdSidenavCtrl)\r\n {\r\n // Watch md-sidenav open & locked open statuses\r\n // and add class to the \".page-layout\" if only\r\n // the sidenav open and NOT locked open\r\n scope.$watch(function ()\r\n {\r\n return MdSidenavCtrl.isOpen() && !MdSidenavCtrl.isLockedOpen();\r\n }, function (current)\r\n {\r\n if ( angular.isUndefined(current) )\r\n {\r\n return;\r\n }\r\n\r\n iElement.parent().toggleClass('full-height', current);\r\n angular.element('html').toggleClass('sidenav-open', current);\r\n });\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsSearchBarController', MsSearchBarController)\r\n .directive('msSearchBar', msSearchBarDirective);\r\n\r\n /** @ngInject */\r\n function MsSearchBarController($scope, $element, $timeout)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.collapsed = true;\r\n vm.query = '';\r\n vm.queryOptions = {\r\n debounce: vm.debounce || 0\r\n };\r\n vm.resultsLoading = false;\r\n vm.results = null;\r\n vm.selectedResultIndex = 0;\r\n vm.ignoreMouseEvents = false;\r\n\r\n // Methods\r\n vm.populateResults = populateResults;\r\n\r\n vm.expand = expand;\r\n vm.collapse = collapse;\r\n\r\n vm.absorbEvent = absorbEvent;\r\n vm.handleKeydown = handleKeydown;\r\n vm.handleMouseenter = handleMouseenter;\r\n vm.temporarilyIgnoreMouseEvents = temporarilyIgnoreMouseEvents;\r\n vm.handleResultClick = handleResultClick;\r\n vm.ensureSelectedResultIsVisible = ensureSelectedResultIsVisible;\r\n\r\n //////////\r\n\r\n init();\r\n\r\n function init()\r\n {\r\n // Watch the model changes to trigger the search\r\n $scope.$watch('MsSearchBar.query', function (current, old)\r\n {\r\n if ( angular.isUndefined(current) )\r\n {\r\n return;\r\n }\r\n\r\n if ( angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n if ( vm.collapsed )\r\n {\r\n return;\r\n }\r\n\r\n // Evaluate the onSearch function to access the\r\n // function itself\r\n var onSearchEvaluated = $scope.$parent.$eval(vm.onSearch, {query: current}),\r\n isArray = angular.isArray(onSearchEvaluated),\r\n isPromise = (onSearchEvaluated && !!onSearchEvaluated.then);\r\n\r\n if ( isArray )\r\n {\r\n // Populate the results\r\n vm.populateResults(onSearchEvaluated);\r\n }\r\n\r\n if ( isPromise )\r\n {\r\n // Show the loader\r\n vm.resultsLoading = true;\r\n\r\n onSearchEvaluated.then(\r\n // Success\r\n function (response)\r\n {\r\n // Populate the results\r\n vm.populateResults(response);\r\n },\r\n // Error\r\n function ()\r\n {\r\n // Assign an empty array to show\r\n // the no-results screen\r\n vm.populateResults([]);\r\n }\r\n ).finally(function ()\r\n {\r\n // Hide the loader\r\n vm.resultsLoading = false;\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Populate the results\r\n *\r\n * @param results\r\n */\r\n function populateResults(results)\r\n {\r\n // Before doing anything,\r\n // make sure the search bar is expanded\r\n if ( vm.collapsed )\r\n {\r\n return;\r\n }\r\n\r\n var isArray = angular.isArray(results),\r\n isNull = results === null;\r\n\r\n // Only accept arrays and null values\r\n if ( !isArray && !isNull )\r\n {\r\n return;\r\n }\r\n\r\n // Reset the selected result\r\n vm.selectedResultIndex = 0;\r\n\r\n // Populate the results\r\n vm.results = results;\r\n }\r\n\r\n /**\r\n * Expand\r\n */\r\n function expand()\r\n {\r\n // Set collapsed status\r\n vm.collapsed = false;\r\n\r\n // Call expand on scope\r\n $scope.expand();\r\n\r\n // Callback\r\n if ( vm.onExpand && angular.isFunction(vm.onExpand) )\r\n {\r\n vm.onExpand();\r\n }\r\n }\r\n\r\n /**\r\n * Collapse\r\n */\r\n function collapse()\r\n {\r\n // Empty the query\r\n vm.query = '';\r\n\r\n // Empty results to hide the results view\r\n vm.populateResults(null);\r\n\r\n // Set collapsed status\r\n vm.collapsed = true;\r\n\r\n // Call collapse on scope\r\n $scope.collapse();\r\n\r\n // Callback\r\n if ( vm.onCollapse && angular.isFunction(vm.onCollapse) )\r\n {\r\n vm.onCollapse();\r\n }\r\n }\r\n\r\n /**\r\n * Absorb the given event\r\n *\r\n * @param event\r\n */\r\n function absorbEvent(event)\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * Handle keydown\r\n *\r\n * @param event\r\n */\r\n function handleKeydown(event)\r\n {\r\n var keyCode = event.keyCode,\r\n keys = [27, 38, 40];\r\n\r\n // Prevent the default action if\r\n // one of the keys are pressed that\r\n // we are listening\r\n if ( keys.indexOf(keyCode) > -1 )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n switch ( keyCode )\r\n {\r\n // Enter\r\n case 13:\r\n\r\n // Trigger result click\r\n vm.handleResultClick(vm.results[vm.selectedResultIndex]);\r\n\r\n break;\r\n\r\n // Escape\r\n case 27:\r\n\r\n // Collapse the search bar\r\n vm.collapse();\r\n\r\n break;\r\n\r\n // Up Arrow\r\n case 38:\r\n\r\n // Decrease the selected result index\r\n if ( vm.selectedResultIndex - 1 >= 0 )\r\n {\r\n // Decrease the selected index\r\n vm.selectedResultIndex--;\r\n\r\n // Make sure the selected result is in the view\r\n vm.ensureSelectedResultIsVisible();\r\n }\r\n\r\n break;\r\n\r\n // Down Arrow\r\n case 40:\r\n\r\n if ( !vm.results )\r\n {\r\n return;\r\n }\r\n\r\n // Increase the selected result index\r\n if ( vm.selectedResultIndex + 1 < vm.results.length )\r\n {\r\n // Increase the selected index\r\n vm.selectedResultIndex++;\r\n\r\n // Make sure the selected result is in the view\r\n vm.ensureSelectedResultIsVisible();\r\n }\r\n\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Handle mouseenter\r\n *\r\n * @param index\r\n */\r\n function handleMouseenter(index)\r\n {\r\n if ( vm.ignoreMouseEvents )\r\n {\r\n return;\r\n }\r\n\r\n // Update the selected result index\r\n // with the given index\r\n vm.selectedResultIndex = index;\r\n }\r\n\r\n /**\r\n * Set a variable for a limited time\r\n * to make other functions to ignore\r\n * the mouse events\r\n */\r\n function temporarilyIgnoreMouseEvents()\r\n {\r\n // Set the variable\r\n vm.ignoreMouseEvents = true;\r\n\r\n // Cancel the previous timeout\r\n $timeout.cancel(vm.mouseEventIgnoreTimeout);\r\n\r\n // Set the timeout\r\n vm.mouseEventIgnoreTimeout = $timeout(function ()\r\n {\r\n vm.ignoreMouseEvents = false;\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Handle the result click\r\n *\r\n * @param item\r\n */\r\n function handleResultClick(item)\r\n {\r\n if ( vm.onResultClick )\r\n {\r\n vm.onResultClick({item: item});\r\n }\r\n\r\n // Collapse the search bar\r\n vm.collapse();\r\n }\r\n\r\n /**\r\n * Ensure the selected result will\r\n * always be visible on the results\r\n * area\r\n */\r\n function ensureSelectedResultIsVisible()\r\n {\r\n var resultsEl = $element.find('.ms-search-bar-results'),\r\n selectedItemEl = angular.element(resultsEl.find('.result')[vm.selectedResultIndex]);\r\n\r\n if ( resultsEl && selectedItemEl )\r\n {\r\n var top = selectedItemEl.position().top - 8,\r\n bottom = selectedItemEl.position().top + selectedItemEl.outerHeight() + 8;\r\n\r\n // Start ignoring mouse events\r\n vm.temporarilyIgnoreMouseEvents();\r\n\r\n if ( resultsEl.scrollTop() > top )\r\n {\r\n resultsEl.scrollTop(top);\r\n }\r\n\r\n if ( bottom > (resultsEl.height() + resultsEl.scrollTop()) )\r\n {\r\n resultsEl.scrollTop(bottom - resultsEl.height());\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msSearchBarDirective($document)\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {},\r\n require : 'msSearchBar',\r\n controller : 'MsSearchBarController as MsSearchBar',\r\n bindToController: {\r\n debounce : '=?',\r\n onSearch : '@',\r\n onResultClick: '&?',\r\n onExpand : '&?',\r\n onCollapse : '&?'\r\n },\r\n templateUrl : 'app/core/directives/ms-search-bar/ms-search-bar.html',\r\n compile : function (tElement)\r\n {\r\n // Add class\r\n tElement.addClass('ms-search-bar');\r\n\r\n return function postLink(scope, iElement)\r\n {\r\n // Data\r\n var inputEl,\r\n bodyEl = $document.find('body');\r\n\r\n // Methods\r\n scope.collapse = collapse;\r\n scope.expand = expand;\r\n\r\n //////////\r\n\r\n // Initialize\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Grab the input element\r\n inputEl = iElement.find('#ms-search-bar-input');\r\n }\r\n\r\n /**\r\n * Expand action\r\n */\r\n function expand()\r\n {\r\n // Add expanded class\r\n iElement.addClass('expanded');\r\n\r\n // Add helper class to the body\r\n bodyEl.addClass('ms-search-bar-expanded');\r\n\r\n // Focus on the input\r\n inputEl.focus();\r\n }\r\n\r\n /**\r\n * Collapse action\r\n */\r\n function collapse()\r\n {\r\n // Remove expanded class\r\n iElement.removeClass('expanded');\r\n\r\n // Remove helper class from the body\r\n bodyEl.removeClass('ms-search-bar-expanded');\r\n }\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .provider('msScrollConfig', msScrollConfigProvider)\r\n .directive('msScroll', msScrollDirective);\r\n\r\n /** @ngInject */\r\n function msScrollConfigProvider()\r\n {\r\n // Default configuration\r\n var defaultConfiguration = {\r\n wheelSpeed : 1,\r\n wheelPropagation : false,\r\n swipePropagation : true,\r\n minScrollbarLength : null,\r\n maxScrollbarLength : null,\r\n useBothWheelAxes : false,\r\n useKeyboard : true,\r\n suppressScrollX : false,\r\n suppressScrollY : false,\r\n scrollXMarginOffset : 0,\r\n scrollYMarginOffset : 0,\r\n stopPropagationOnClick: true\r\n };\r\n\r\n // Methods\r\n this.config = config;\r\n\r\n //////////\r\n\r\n /**\r\n * Extend default configuration with the given one\r\n *\r\n * @param configuration\r\n */\r\n function config(configuration)\r\n {\r\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\r\n }\r\n\r\n /**\r\n * Service\r\n */\r\n this.$get = function ()\r\n {\r\n var service = {\r\n getConfig: getConfig\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Return the config\r\n */\r\n function getConfig()\r\n {\r\n return defaultConfiguration;\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msScrollDirective($timeout, msScrollConfig, msUtils, fuseConfig)\r\n {\r\n return {\r\n restrict: 'AE',\r\n compile : function (tElement)\r\n {\r\n // Do not replace scrollbars if\r\n // 'disableCustomScrollbars' config enabled\r\n if ( fuseConfig.getConfig('disableCustomScrollbars') )\r\n {\r\n return;\r\n }\r\n\r\n // Do not replace scrollbars on mobile devices\r\n // if 'disableCustomScrollbarsOnMobile' config enabled\r\n if ( fuseConfig.getConfig('disableCustomScrollbarsOnMobile') && msUtils.isMobile() )\r\n {\r\n return;\r\n }\r\n\r\n // Add class\r\n tElement.addClass('ms-scroll');\r\n\r\n return function postLink(scope, iElement, iAttrs)\r\n {\r\n var options = {};\r\n\r\n // If options supplied, evaluate the given\r\n // value. This is because we don't want to\r\n // have an isolated scope but still be able\r\n // to use scope variables.\r\n // We don't want an isolated scope because\r\n // we should be able to use this everywhere\r\n // especially with other directives\r\n if ( iAttrs.msScroll )\r\n {\r\n options = scope.$eval(iAttrs.msScroll);\r\n }\r\n\r\n // Extend the given config with the ones from provider\r\n options = angular.extend({}, msScrollConfig.getConfig(), options);\r\n\r\n // Initialize the scrollbar\r\n $timeout(function ()\r\n {\r\n PerfectScrollbar.initialize(iElement[0], options);\r\n }, 0);\r\n\r\n // Update the scrollbar on element mouseenter\r\n iElement.on('mouseenter', updateScrollbar);\r\n\r\n // Watch scrollHeight and update\r\n // the scrollbar if it changes\r\n scope.$watch(function ()\r\n {\r\n return iElement.prop('scrollHeight');\r\n }, function (current, old)\r\n {\r\n if ( angular.isUndefined(current) || angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n updateScrollbar();\r\n });\r\n\r\n // Watch scrollWidth and update\r\n // the scrollbar if it changes\r\n scope.$watch(function ()\r\n {\r\n return iElement.prop('scrollWidth');\r\n }, function (current, old)\r\n {\r\n if ( angular.isUndefined(current) || angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n updateScrollbar();\r\n });\r\n\r\n /**\r\n * Update the scrollbar\r\n */\r\n function updateScrollbar()\r\n {\r\n PerfectScrollbar.update(iElement[0]);\r\n }\r\n\r\n // Cleanup on destroy\r\n scope.$on('$destroy', function ()\r\n {\r\n iElement.off('mouseenter');\r\n PerfectScrollbar.destroy(iElement[0]);\r\n });\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msResponsiveTable', msResponsiveTableDirective);\r\n\r\n /** @ngInject */\r\n function msResponsiveTableDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n link : function (scope, iElement)\r\n {\r\n // Wrap the table\r\n var wrapper = angular.element('
');\r\n iElement.after(wrapper);\r\n wrapper.append(iElement);\r\n\r\n //////////\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msRandomClass', msRandomClassDirective);\r\n\r\n /** @ngInject */\r\n function msRandomClassDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n scope : {\r\n msRandomClass: '='\r\n },\r\n link : function (scope, iElement)\r\n {\r\n var randomClass = scope.msRandomClass[Math.floor(Math.random() * (scope.msRandomClass.length))];\r\n iElement.addClass(randomClass);\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .provider('msNavigationService', msNavigationServiceProvider)\r\n .controller('MsNavigationController', MsNavigationController)\r\n // Vertical\r\n .directive('msNavigation', msNavigationDirective)\r\n .controller('MsNavigationNodeController', MsNavigationNodeController)\r\n .directive('msNavigationNode', msNavigationNodeDirective)\r\n .directive('msNavigationItem', msNavigationItemDirective)\r\n //Horizontal\r\n .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\r\n .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\r\n .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\r\n .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\r\n\r\n /** @ngInject */\r\n function msNavigationServiceProvider()\r\n {\r\n // Inject $log service\r\n var $log = angular.injector(['ng']).get('$log');\r\n\r\n // Navigation array\r\n var navigation = [];\r\n\r\n var service = this;\r\n\r\n // Methods\r\n service.saveItem = saveItem;\r\n service.deleteItem = deleteItem;\r\n service.sortByWeight = sortByWeight;\r\n\r\n //////////\r\n\r\n /**\r\n * Create or update the navigation item\r\n *\r\n * @param path\r\n * @param item\r\n */\r\n function saveItem(path, item)\r\n {\r\n if ( !angular.isString(path) )\r\n {\r\n $log.error('path must be a string (eg. `dashboard.project`)');\r\n return;\r\n }\r\n\r\n var parts = path.split('.');\r\n\r\n // Generate the object id from the parts\r\n var id = parts[parts.length - 1];\r\n\r\n // Get the parent item from the parts\r\n var parent = _findOrCreateParent(parts);\r\n\r\n // Decide if we are going to update or create\r\n var updateItem = false;\r\n\r\n for ( var i = 0; i < parent.length; i++ )\r\n {\r\n if ( parent[i]._id === id )\r\n {\r\n updateItem = parent[i];\r\n\r\n break;\r\n }\r\n }\r\n\r\n // Update\r\n if ( updateItem )\r\n {\r\n angular.extend(updateItem, item);\r\n\r\n // Add proper ui-sref\r\n updateItem.uisref = _getUiSref(updateItem);\r\n }\r\n // Create\r\n else\r\n {\r\n // Create an empty children array in the item\r\n item.children = [];\r\n\r\n // Add the default weight if not provided or if it's not a number\r\n if ( angular.isUndefined(item.weight) || !angular.isNumber(item.weight) )\r\n {\r\n item.weight = 1;\r\n }\r\n\r\n // Add the item id\r\n item._id = id;\r\n\r\n // Add the item path\r\n item._path = path;\r\n\r\n // Add proper ui-sref\r\n item.uisref = _getUiSref(item);\r\n\r\n // Push the item into the array\r\n parent.push(item);\r\n }\r\n }\r\n\r\n /**\r\n * Delete navigation item\r\n *\r\n * @param path\r\n */\r\n function deleteItem(path)\r\n {\r\n if ( !angular.isString(path) )\r\n {\r\n $log.error('path must be a string (eg. `dashboard.project`)');\r\n return;\r\n }\r\n\r\n // Locate the item by using given path\r\n var item = navigation,\r\n parts = path.split('.');\r\n\r\n for ( var p = 0; p < parts.length; p++ )\r\n {\r\n var id = parts[p];\r\n\r\n for ( var i = 0; i < item.length; i++ )\r\n {\r\n if ( item[i]._id === id )\r\n {\r\n // If we have a matching path,\r\n // we have found our object:\r\n // remove it.\r\n if ( item[i]._path === path )\r\n {\r\n item.splice(i, 1);\r\n return true;\r\n }\r\n\r\n // Otherwise grab the children of\r\n // the current item and continue\r\n item = item[i].children;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sort the navigation items by their weights\r\n *\r\n * @param parent\r\n */\r\n function sortByWeight(parent)\r\n {\r\n // If parent not provided, sort the root items\r\n if ( !parent )\r\n {\r\n parent = navigation;\r\n parent.sort(_byWeight);\r\n }\r\n\r\n // Sort the children\r\n for ( var i = 0; i < parent.length; i++ )\r\n {\r\n var children = parent[i].children;\r\n\r\n if ( children.length > 1 )\r\n {\r\n children.sort(_byWeight);\r\n }\r\n\r\n if ( children.length > 0 )\r\n {\r\n sortByWeight(children);\r\n }\r\n }\r\n }\r\n\r\n /* ----------------- */\r\n /* Private Functions */\r\n /* ----------------- */\r\n\r\n /**\r\n * Find or create parent\r\n *\r\n * @param parts\r\n * @returns {Array|Boolean}\r\n * @private\r\n */\r\n function _findOrCreateParent(parts)\r\n {\r\n // Store the main navigation\r\n var parent = navigation;\r\n\r\n // If it's going to be a root item\r\n // return the navigation itself\r\n if ( parts.length === 1 )\r\n {\r\n return parent;\r\n }\r\n\r\n // Remove the last element from the parts as\r\n // we don't need that to figure out the parent\r\n parts.pop();\r\n\r\n // Find and return the parent\r\n for ( var i = 0; i < parts.length; i++ )\r\n {\r\n var _id = parts[i],\r\n createParent = true;\r\n\r\n for ( var p = 0; p < parent.length; p++ )\r\n {\r\n if ( parent[p]._id === _id )\r\n {\r\n parent = parent[p].children;\r\n createParent = false;\r\n\r\n break;\r\n }\r\n }\r\n\r\n // If there is no parent found, create one, push\r\n // it into the current parent and assign it as a\r\n // new parent\r\n if ( createParent )\r\n {\r\n var item = {\r\n _id : _id,\r\n _path : parts.join('.'),\r\n title : _id,\r\n weight : 1,\r\n children: []\r\n };\r\n\r\n parent.push(item);\r\n parent = item.children;\r\n }\r\n }\r\n\r\n return parent;\r\n }\r\n\r\n /**\r\n * Sort by weight\r\n *\r\n * @param x\r\n * @param y\r\n * @returns {number}\r\n * @private\r\n */\r\n function _byWeight(x, y)\r\n {\r\n return parseInt(x.weight) - parseInt(y.weight);\r\n }\r\n\r\n /**\r\n * Setup the ui-sref using state & state parameters\r\n *\r\n * @param item\r\n * @returns {string}\r\n * @private\r\n */\r\n function _getUiSref(item)\r\n {\r\n var uisref = '';\r\n\r\n if ( angular.isDefined(item.state) )\r\n {\r\n uisref = item.state;\r\n\r\n if ( angular.isDefined(item.stateParams) && angular.isObject(item.stateParams) )\r\n {\r\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\r\n }\r\n }\r\n\r\n return uisref;\r\n }\r\n\r\n /* ----------------- */\r\n /* Service */\r\n /* ----------------- */\r\n\r\n this.$get = function ()\r\n {\r\n var activeItem = null,\r\n navigationScope = null,\r\n folded = null,\r\n foldedOpen = null;\r\n\r\n var service = {\r\n saveItem : saveItem,\r\n deleteItem : deleteItem,\r\n sort : sortByWeight,\r\n clearNavigation : clearNavigation,\r\n setActiveItem : setActiveItem,\r\n getActiveItem : getActiveItem,\r\n getNavigation : getNavigation,\r\n getFlatNavigation : getFlatNavigation,\r\n setNavigationScope: setNavigationScope,\r\n setFolded : setFolded,\r\n getFolded : getFolded,\r\n setFoldedOpen : setFoldedOpen,\r\n getFoldedOpen : getFoldedOpen,\r\n toggleFolded : toggleFolded\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Clear the entire navigation\r\n */\r\n function clearNavigation()\r\n {\r\n // Clear the navigation array\r\n navigation = [];\r\n\r\n // Clear the vm.navigation from main controller\r\n if ( navigationScope )\r\n {\r\n navigationScope.vm.navigation = navigation;\r\n }\r\n }\r\n\r\n /**\r\n * Set active item\r\n *\r\n * @param node\r\n * @param scope\r\n */\r\n function setActiveItem(node, scope)\r\n {\r\n activeItem = {\r\n node : node,\r\n scope: scope\r\n };\r\n }\r\n\r\n /**\r\n * Return active item\r\n */\r\n function getActiveItem()\r\n {\r\n return activeItem;\r\n }\r\n\r\n /**\r\n * Return navigation array\r\n *\r\n * @param root\r\n * @returns Array\r\n */\r\n function getNavigation(root)\r\n {\r\n if ( root )\r\n {\r\n for ( var i = 0; i < navigation.length; i++ )\r\n {\r\n if ( navigation[i]._id === root )\r\n {\r\n return [navigation[i]];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return navigation;\r\n }\r\n\r\n /**\r\n * Return flat navigation array\r\n *\r\n * @param root\r\n * @returns Array\r\n */\r\n function getFlatNavigation(root)\r\n {\r\n // Get the correct navigation array\r\n var navigation = getNavigation(root);\r\n\r\n // Flatten the navigation object\r\n return _flattenNavigation(navigation);\r\n }\r\n\r\n /**\r\n * Store navigation's scope for later use\r\n *\r\n * @param scope\r\n */\r\n function setNavigationScope(scope)\r\n {\r\n navigationScope = scope;\r\n }\r\n\r\n /**\r\n * Set folded status\r\n *\r\n * @param status\r\n */\r\n function setFolded(status)\r\n {\r\n folded = status;\r\n }\r\n\r\n /**\r\n * Return folded status\r\n *\r\n * @returns {*}\r\n */\r\n function getFolded()\r\n {\r\n return folded;\r\n }\r\n\r\n /**\r\n * Set folded open status\r\n *\r\n * @param status\r\n */\r\n function setFoldedOpen(status)\r\n {\r\n foldedOpen = status;\r\n }\r\n\r\n /**\r\n * Return folded open status\r\n *\r\n * @returns {*}\r\n */\r\n function getFoldedOpen()\r\n {\r\n return foldedOpen;\r\n }\r\n\r\n\r\n /**\r\n * Toggle fold on stored navigation's scope\r\n */\r\n function toggleFolded()\r\n {\r\n navigationScope.toggleFolded();\r\n }\r\n\r\n /**\r\n * Flatten the given navigation\r\n *\r\n * @param navigation\r\n * @private\r\n */\r\n function _flattenNavigation(navigation)\r\n {\r\n var flatNav = [];\r\n\r\n for ( var x = 0; x < navigation.length; x++ )\r\n {\r\n // Copy and clear the children of the\r\n // navigation that we want to push\r\n var navToPush = angular.copy(navigation[x]);\r\n navToPush.children = [];\r\n\r\n // Push the item\r\n flatNav.push(navToPush);\r\n\r\n // If there are child items in this navigation,\r\n // do some nested function magic\r\n if ( navigation[x].children.length > 0 )\r\n {\r\n flatNav = flatNav.concat(_flattenNavigation(navigation[x].children));\r\n }\r\n }\r\n\r\n return flatNav;\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function MsNavigationController($scope, msNavigationService)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n if ( $scope.root )\r\n {\r\n vm.navigation = msNavigationService.getNavigation($scope.root);\r\n }\r\n else\r\n {\r\n vm.navigation = msNavigationService.getNavigation();\r\n }\r\n\r\n // Methods\r\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\r\n\r\n //////////\r\n\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Sort the navigation before doing anything else\r\n msNavigationService.sort();\r\n }\r\n\r\n /**\r\n * Toggle horizontal mobile menu\r\n */\r\n function toggleHorizontalMobileMenu()\r\n {\r\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService)\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {\r\n folded: '=',\r\n root : '@'\r\n },\r\n controller : 'MsNavigationController as vm',\r\n templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\r\n transclude : true,\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation');\r\n\r\n return function postLink(scope, iElement)\r\n {\r\n var bodyEl = angular.element('body'),\r\n foldExpanderEl = angular.element('
'),\r\n foldCollapserEl = angular.element('
'),\r\n sidenav = $mdSidenav('navigation');\r\n\r\n // Store the navigation in the service for public access\r\n msNavigationService.setNavigationScope(scope);\r\n\r\n // Initialize\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Set the folded status for the first time.\r\n // First, we have to check if we have a folded\r\n // status available in the service already. This\r\n // will prevent navigation to act weird if we already\r\n // set the fold status, remove the navigation and\r\n // then re-initialize it, which happens if we\r\n // change to a view without a navigation and then\r\n // come back with history.back() function.\r\n\r\n // If the service didn't initialize before, set\r\n // the folded status from scope, otherwise we\r\n // won't touch anything because the folded status\r\n // already set in the service...\r\n if ( msNavigationService.getFolded() === null )\r\n {\r\n msNavigationService.setFolded(scope.folded);\r\n }\r\n\r\n if ( msNavigationService.getFolded() )\r\n {\r\n // Collapse everything.\r\n // This must be inside a $timeout because by the\r\n // time we call this, the 'msNavigation::collapse'\r\n // event listener is not registered yet. $timeout\r\n // will ensure that it will be called after it is\r\n // registered.\r\n $timeout(function ()\r\n {\r\n $rootScope.$broadcast('msNavigation::collapse');\r\n });\r\n\r\n // Add class to the body\r\n bodyEl.addClass('ms-navigation-folded');\r\n\r\n // Set fold expander\r\n setFoldExpander();\r\n }\r\n }\r\n\r\n // Sidenav locked open status watcher\r\n scope.$watch(function ()\r\n {\r\n return sidenav.isLockedOpen();\r\n }, function (current, old)\r\n {\r\n if ( angular.isUndefined(current) || angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n var folded = msNavigationService.getFolded();\r\n\r\n if ( folded )\r\n {\r\n if ( current )\r\n {\r\n // Collapse everything\r\n $rootScope.$broadcast('msNavigation::collapse');\r\n }\r\n else\r\n {\r\n // Expand the active one and its parents\r\n var activeItem = msNavigationService.getActiveItem();\r\n if ( activeItem )\r\n {\r\n activeItem.scope.$emit('msNavigation::stateMatched');\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Folded status watcher\r\n scope.$watch('folded', function (current, old)\r\n {\r\n if ( angular.isUndefined(current) || angular.equals(current, old) )\r\n {\r\n return;\r\n }\r\n\r\n setFolded(current);\r\n });\r\n\r\n /**\r\n * Set folded status\r\n *\r\n * @param folded\r\n */\r\n function setFolded(folded)\r\n {\r\n // Store folded status on the service for global access\r\n msNavigationService.setFolded(folded);\r\n\r\n if ( folded )\r\n {\r\n // Collapse everything\r\n $rootScope.$broadcast('msNavigation::collapse');\r\n\r\n // Add class to the body\r\n bodyEl.addClass('ms-navigation-folded');\r\n\r\n // Set fold expander\r\n setFoldExpander();\r\n }\r\n else\r\n {\r\n // Expand the active one and its parents\r\n var activeItem = msNavigationService.getActiveItem();\r\n if ( activeItem )\r\n {\r\n activeItem.scope.$emit('msNavigation::stateMatched');\r\n }\r\n\r\n // Remove body class\r\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\r\n\r\n // Remove fold collapser\r\n removeFoldCollapser();\r\n }\r\n }\r\n\r\n /**\r\n * Set fold expander\r\n */\r\n function setFoldExpander()\r\n {\r\n iElement.parent().append(foldExpanderEl);\r\n\r\n // Let everything settle for a moment\r\n // before registering the event listener\r\n $timeout(function ()\r\n {\r\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\r\n });\r\n }\r\n\r\n /**\r\n * Set fold collapser\r\n */\r\n function setFoldCollapser()\r\n {\r\n bodyEl.find('#main').append(foldCollapserEl);\r\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\r\n }\r\n\r\n /**\r\n * Remove fold collapser\r\n */\r\n function removeFoldCollapser()\r\n {\r\n foldCollapserEl.remove();\r\n }\r\n\r\n /**\r\n * onHover event of foldExpander\r\n */\r\n function onFoldExpanderHover(event)\r\n {\r\n if ( event )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n // Set folded open status\r\n msNavigationService.setFoldedOpen(true);\r\n\r\n // Expand the active one and its parents\r\n var activeItem = msNavigationService.getActiveItem();\r\n if ( activeItem )\r\n {\r\n activeItem.scope.$emit('msNavigation::stateMatched');\r\n }\r\n\r\n // Add class to the body\r\n bodyEl.addClass('ms-navigation-folded-open');\r\n\r\n // Remove the fold opener\r\n foldExpanderEl.remove();\r\n\r\n // Set fold collapser\r\n setFoldCollapser();\r\n }\r\n\r\n /**\r\n * onHover event of foldCollapser\r\n */\r\n function onFoldCollapserHover(event)\r\n {\r\n if ( event )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n // Set folded open status\r\n msNavigationService.setFoldedOpen(false);\r\n\r\n // Collapse everything\r\n $rootScope.$broadcast('msNavigation::collapse');\r\n\r\n // Remove body class\r\n bodyEl.removeClass('ms-navigation-folded-open');\r\n\r\n // Remove the fold collapser\r\n foldCollapserEl.remove();\r\n\r\n // Set fold expander\r\n setFoldExpander();\r\n }\r\n\r\n /**\r\n * Public access for toggling folded status externally\r\n */\r\n scope.toggleFolded = function ()\r\n {\r\n var folded = msNavigationService.getFolded();\r\n\r\n setFolded(!folded);\r\n };\r\n\r\n /**\r\n * On $stateChangeStart\r\n */\r\n scope.$on('$stateChangeStart', function ()\r\n {\r\n // Close the sidenav\r\n sidenav.close();\r\n });\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n foldCollapserEl.off('mouseenter touchstart');\r\n foldExpanderEl.off('mouseenter touchstart');\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.element = $element;\r\n vm.node = $scope.node;\r\n vm.hasChildren = undefined;\r\n vm.collapsed = undefined;\r\n vm.collapsable = undefined;\r\n vm.group = undefined;\r\n vm.animateHeightClass = 'animate-height';\r\n\r\n // Methods\r\n vm.toggleCollapsed = toggleCollapsed;\r\n vm.collapse = collapse;\r\n vm.expand = expand;\r\n vm.getClass = getClass;\r\n vm.isHidden = isHidden;\r\n\r\n //////////\r\n\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Setup the initial values\r\n\r\n // Has children?\r\n vm.hasChildren = vm.node.children.length > 0;\r\n\r\n // Is group?\r\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\r\n\r\n // Is collapsable?\r\n if ( !vm.hasChildren || vm.group )\r\n {\r\n vm.collapsable = false;\r\n }\r\n else\r\n {\r\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\r\n }\r\n\r\n // Is collapsed?\r\n if ( !vm.collapsable )\r\n {\r\n vm.collapsed = false;\r\n }\r\n else\r\n {\r\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\r\n }\r\n\r\n // Expand all parents if we have a matching state or\r\n // the current state is a child of the node's state\r\n if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\r\n {\r\n // If state params are defined, make sure they are\r\n // equal, otherwise do not set the active item\r\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\r\n {\r\n return;\r\n }\r\n\r\n $scope.$emit('msNavigation::stateMatched');\r\n\r\n // Also store the current active menu item\r\n msNavigationService.setActiveItem(vm.node, $scope);\r\n }\r\n\r\n $scope.$on('msNavigation::stateMatched', function ()\r\n {\r\n // Expand if the current scope is collapsable and is collapsed\r\n if ( vm.collapsable && vm.collapsed )\r\n {\r\n $scope.$evalAsync(function ()\r\n {\r\n vm.collapsed = false;\r\n });\r\n }\r\n });\r\n\r\n // Listen for collapse event\r\n $scope.$on('msNavigation::collapse', function (event, path)\r\n {\r\n if ( vm.collapsed || !vm.collapsable )\r\n {\r\n return;\r\n }\r\n\r\n // If there is no path defined, collapse\r\n if ( angular.isUndefined(path) )\r\n {\r\n vm.collapse();\r\n }\r\n // If there is a path defined, do not collapse\r\n // the items that are inside that path. This will\r\n // prevent parent items from collapsing\r\n else\r\n {\r\n var givenPathParts = path.split('.'),\r\n activePathParts = [];\r\n\r\n var activeItem = msNavigationService.getActiveItem();\r\n if ( activeItem )\r\n {\r\n activePathParts = activeItem.node._path.split('.');\r\n }\r\n\r\n // Test for given path\r\n if ( givenPathParts.indexOf(vm.node._id) > -1 )\r\n {\r\n return;\r\n }\r\n\r\n // Test for active path\r\n if ( activePathParts.indexOf(vm.node._id) > -1 )\r\n {\r\n return;\r\n }\r\n\r\n vm.collapse();\r\n }\r\n });\r\n\r\n // Listen for $stateChangeSuccess event\r\n $scope.$on('$stateChangeSuccess', function ()\r\n {\r\n if ( vm.node.state === $state.current.name )\r\n {\r\n // If state params are defined, make sure they are\r\n // equal, otherwise do not set the active item\r\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\r\n {\r\n return;\r\n }\r\n\r\n // Update active item on state change\r\n msNavigationService.setActiveItem(vm.node, $scope);\r\n\r\n // Collapse everything except the one we're using\r\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\r\n }\r\n\r\n // Expand the parents if we the current\r\n // state is a child of the node's state\r\n if ( $state.includes(vm.node.state) )\r\n {\r\n // If state params are defined, make sure they are\r\n // equal, otherwise do not set the active item\r\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\r\n {\r\n return;\r\n }\r\n\r\n // Emit the stateMatched\r\n $scope.$emit('msNavigation::stateMatched');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggle collapsed\r\n */\r\n function toggleCollapsed()\r\n {\r\n if ( vm.collapsed )\r\n {\r\n vm.expand();\r\n }\r\n else\r\n {\r\n vm.collapse();\r\n }\r\n }\r\n\r\n /**\r\n * Collapse\r\n */\r\n function collapse()\r\n {\r\n // Grab the element that we are going to collapse\r\n var collapseEl = vm.element.children('ul');\r\n\r\n // Grab the height\r\n var height = collapseEl[0].offsetHeight;\r\n\r\n $scope.$evalAsync(function ()\r\n {\r\n // Set collapsed status\r\n vm.collapsed = true;\r\n\r\n // Add collapsing class to the node\r\n vm.element.addClass('collapsing');\r\n\r\n // Animate the height\r\n $animate.animate(collapseEl,\r\n {\r\n 'display': 'block',\r\n 'height' : height + 'px'\r\n },\r\n {\r\n 'height': '0px'\r\n },\r\n vm.animateHeightClass\r\n ).then(\r\n function ()\r\n {\r\n // Clear the inline styles after animation done\r\n collapseEl.css({\r\n 'display': '',\r\n 'height' : ''\r\n });\r\n\r\n // Clear collapsing class from the node\r\n vm.element.removeClass('collapsing');\r\n }\r\n );\r\n\r\n // Broadcast the collapse event so child items can also be collapsed\r\n $scope.$broadcast('msNavigation::collapse');\r\n });\r\n }\r\n\r\n /**\r\n * Expand\r\n */\r\n function expand()\r\n {\r\n // Grab the element that we are going to expand\r\n var expandEl = vm.element.children('ul');\r\n\r\n // Move the element out of the dom flow and\r\n // make it block so we can get its height\r\n expandEl.css({\r\n 'position' : 'absolute',\r\n 'visibility': 'hidden',\r\n 'display' : 'block',\r\n 'height' : 'auto'\r\n });\r\n\r\n // Grab the height\r\n var height = expandEl[0].offsetHeight;\r\n\r\n // Reset the style modifications\r\n expandEl.css({\r\n 'position' : '',\r\n 'visibility': '',\r\n 'display' : '',\r\n 'height' : ''\r\n });\r\n\r\n $scope.$evalAsync(function ()\r\n {\r\n // Set collapsed status\r\n vm.collapsed = false;\r\n\r\n // Add expanding class to the node\r\n vm.element.addClass('expanding');\r\n\r\n // Animate the height\r\n $animate.animate(expandEl,\r\n {\r\n 'display': 'block',\r\n 'height' : '0px'\r\n },\r\n {\r\n 'height': height + 'px'\r\n },\r\n vm.animateHeightClass\r\n ).then(\r\n function ()\r\n {\r\n // Clear the inline styles after animation done\r\n expandEl.css({\r\n 'height': ''\r\n });\r\n\r\n // Clear expanding class from the node\r\n vm.element.removeClass('expanding');\r\n }\r\n );\r\n\r\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\r\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\r\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\r\n });\r\n }\r\n\r\n /**\r\n * Return the class\r\n *\r\n * @returns {*}\r\n */\r\n function getClass()\r\n {\r\n return vm.node.class;\r\n }\r\n\r\n /**\r\n * Check if node should be hidden\r\n *\r\n * @returns {boolean}\r\n */\r\n function isHidden()\r\n {\r\n if ( angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden) )\r\n {\r\n return vm.node.hidden();\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationNodeDirective()\r\n {\r\n return {\r\n restrict : 'A',\r\n bindToController: {\r\n node: '=msNavigationNode'\r\n },\r\n controller : 'MsNavigationNodeController as vm',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation-node');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\r\n {\r\n // Add custom classes\r\n iElement.addClass(MsNavigationNodeCtrl.getClass());\r\n\r\n // Add group class if it's a group\r\n if ( MsNavigationNodeCtrl.group )\r\n {\r\n iElement.addClass('group');\r\n }\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationItemDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n require : '^msNavigationNode',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation-item');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\r\n {\r\n // If the item is collapsable...\r\n if ( MsNavigationNodeCtrl.collapsable )\r\n {\r\n iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\r\n }\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n iElement.off('click');\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationHorizontalDirective(msNavigationService)\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {\r\n root: '@'\r\n },\r\n controller : 'MsNavigationController as vm',\r\n templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\r\n transclude : true,\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation-horizontal');\r\n\r\n return function postLink(scope)\r\n {\r\n // Store the navigation in the service for public access\r\n msNavigationService.setNavigationScope(scope);\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.element = $element;\r\n vm.node = $scope.node;\r\n vm.hasChildren = undefined;\r\n vm.group = undefined;\r\n\r\n // Methods\r\n vm.getClass = getClass;\r\n\r\n //////////\r\n\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Setup the initial values\r\n\r\n // Is active\r\n vm.isActive = false;\r\n\r\n // Has children?\r\n vm.hasChildren = vm.node.children.length > 0;\r\n\r\n // Is group?\r\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\r\n\r\n // Mark all parents as active if we have a matching state\r\n // or the current state is a child of the node's state\r\n if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\r\n {\r\n // If state params are defined, make sure they are\r\n // equal, otherwise do not set the active item\r\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\r\n {\r\n return;\r\n }\r\n\r\n $scope.$emit('msNavigation::stateMatched');\r\n\r\n // Also store the current active menu item\r\n msNavigationService.setActiveItem(vm.node, $scope);\r\n }\r\n\r\n $scope.$on('msNavigation::stateMatched', function ()\r\n {\r\n // Mark as active if has children\r\n if ( vm.hasChildren )\r\n {\r\n $scope.$evalAsync(function ()\r\n {\r\n vm.isActive = true;\r\n });\r\n }\r\n });\r\n\r\n // Listen for clearActive event\r\n $scope.$on('msNavigation::clearActive', function ()\r\n {\r\n if ( !vm.hasChildren )\r\n {\r\n return;\r\n }\r\n\r\n var activePathParts = [];\r\n\r\n var activeItem = msNavigationService.getActiveItem();\r\n if ( activeItem )\r\n {\r\n activePathParts = activeItem.node._path.split('.');\r\n }\r\n\r\n // Test for active path\r\n if ( activePathParts.indexOf(vm.node._id) > -1 )\r\n {\r\n $scope.$evalAsync(function ()\r\n {\r\n vm.isActive = true;\r\n });\r\n }\r\n else\r\n {\r\n $scope.$evalAsync(function ()\r\n {\r\n vm.isActive = false;\r\n });\r\n }\r\n\r\n });\r\n\r\n // Listen for $stateChangeSuccess event\r\n $scope.$on('$stateChangeSuccess', function ()\r\n {\r\n if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\r\n {\r\n // If state params are defined, make sure they are\r\n // equal, otherwise do not set the active item\r\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\r\n {\r\n return;\r\n }\r\n\r\n // Update active item on state change\r\n msNavigationService.setActiveItem(vm.node, $scope);\r\n\r\n // Clear all active states except the one we're using\r\n $rootScope.$broadcast('msNavigation::clearActive');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Return the class\r\n *\r\n * @returns {*}\r\n */\r\n function getClass()\r\n {\r\n return vm.node.class;\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationHorizontalNodeDirective()\r\n {\r\n return {\r\n restrict : 'A',\r\n bindToController: {\r\n node: '=msNavigationHorizontalNode'\r\n },\r\n controller : 'MsNavigationHorizontalNodeController as vm',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation-horizontal-node');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\r\n {\r\n // Add custom classes\r\n iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\r\n\r\n // Add group class if it's a group\r\n if ( MsNavigationHorizontalNodeCtrl.group )\r\n {\r\n iElement.addClass('group');\r\n }\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavigationHorizontalItemDirective($mdMedia)\r\n {\r\n return {\r\n restrict: 'A',\r\n require : '^msNavigationHorizontalNode',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-navigation-horizontal-item');\r\n\r\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\r\n {\r\n iElement.on('click', onClick);\r\n\r\n function onClick()\r\n {\r\n if ( !MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md') )\r\n {\r\n return;\r\n }\r\n\r\n iElement.toggleClass('expanded');\r\n }\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n iElement.off('click');\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('msNavFoldService', msNavFoldService)\r\n .directive('msNavIsFolded', msNavIsFoldedDirective)\r\n .controller('MsNavController', MsNavController)\r\n .directive('msNav', msNavDirective)\r\n .directive('msNavTitle', msNavTitleDirective)\r\n .directive('msNavButton', msNavButtonDirective)\r\n .directive('msNavToggle', msNavToggleDirective);\r\n\r\n /** @ngInject */\r\n function msNavFoldService()\r\n {\r\n var foldable = {};\r\n\r\n var service = {\r\n setFoldable : setFoldable,\r\n isNavFoldedOpen: isNavFoldedOpen,\r\n toggleFold : toggleFold,\r\n openFolded : openFolded,\r\n closeFolded : closeFolded\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Set the foldable\r\n *\r\n * @param scope\r\n * @param element\r\n */\r\n function setFoldable(scope, element)\r\n {\r\n foldable = {\r\n 'scope' : scope,\r\n 'element': element\r\n };\r\n }\r\n\r\n /**\r\n * Is folded open\r\n */\r\n function isNavFoldedOpen()\r\n {\r\n return foldable.scope.isNavFoldedOpen();\r\n }\r\n\r\n /**\r\n * Toggle fold\r\n */\r\n function toggleFold()\r\n {\r\n foldable.scope.toggleFold();\r\n }\r\n\r\n /**\r\n * Open folded navigation\r\n */\r\n function openFolded()\r\n {\r\n foldable.scope.openFolded();\r\n }\r\n\r\n /**\r\n * Close folded navigation\r\n */\r\n function closeFolded()\r\n {\r\n foldable.scope.closeFolded();\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\r\n {\r\n return {\r\n restrict: 'A',\r\n link : function (scope, iElement, iAttrs)\r\n {\r\n var isFolded = (iAttrs.msNavIsFolded === 'true'),\r\n isFoldedOpen = false,\r\n body = angular.element($document[0].body),\r\n openOverlay = angular.element('
'),\r\n closeOverlay = angular.element('
'),\r\n sidenavEl = iElement.parent();\r\n\r\n // Initialize the service\r\n msNavFoldService.setFoldable(scope, iElement, isFolded);\r\n\r\n // Set the fold status for the first time\r\n if ( isFolded )\r\n {\r\n fold();\r\n }\r\n else\r\n {\r\n unfold();\r\n }\r\n\r\n /**\r\n * Is nav folded open\r\n */\r\n function isNavFoldedOpen()\r\n {\r\n return isFoldedOpen;\r\n }\r\n\r\n /**\r\n * Toggle fold\r\n */\r\n function toggleFold()\r\n {\r\n isFolded = !isFolded;\r\n\r\n if ( isFolded )\r\n {\r\n fold();\r\n }\r\n else\r\n {\r\n unfold();\r\n }\r\n }\r\n\r\n /**\r\n * Fold the navigation\r\n */\r\n function fold()\r\n {\r\n // Add classes\r\n body.addClass('ms-nav-folded');\r\n\r\n // Collapse everything and scroll to the top\r\n $rootScope.$broadcast('msNav::forceCollapse');\r\n iElement.scrollTop(0);\r\n\r\n // Append the openOverlay to the element\r\n sidenavEl.append(openOverlay);\r\n\r\n // Event listeners\r\n openOverlay.on('mouseenter touchstart', function (event)\r\n {\r\n openFolded(event);\r\n isFoldedOpen = true;\r\n });\r\n }\r\n\r\n /**\r\n * Open folded navigation\r\n */\r\n function openFolded(event)\r\n {\r\n if ( angular.isDefined(event) )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n body.addClass('ms-nav-folded-open');\r\n\r\n // Update the location\r\n $rootScope.$broadcast('msNav::expandMatchingToggles');\r\n\r\n // Remove open overlay\r\n sidenavEl.find(openOverlay).remove();\r\n\r\n // Append close overlay and bind its events\r\n sidenavEl.parent().append(closeOverlay);\r\n closeOverlay.on('mouseenter touchstart', function (event)\r\n {\r\n closeFolded(event);\r\n isFoldedOpen = false;\r\n });\r\n }\r\n\r\n /**\r\n * Close folded navigation\r\n */\r\n function closeFolded(event)\r\n {\r\n if ( angular.isDefined(event) )\r\n {\r\n event.preventDefault();\r\n }\r\n\r\n // Collapse everything and scroll to the top\r\n $rootScope.$broadcast('msNav::forceCollapse');\r\n iElement.scrollTop(0);\r\n\r\n body.removeClass('ms-nav-folded-open');\r\n\r\n // Remove close overlay\r\n sidenavEl.parent().find(closeOverlay).remove();\r\n\r\n // Append open overlay and bind its events\r\n sidenavEl.append(openOverlay);\r\n openOverlay.on('mouseenter touchstart', function (event)\r\n {\r\n openFolded(event);\r\n isFoldedOpen = true;\r\n });\r\n }\r\n\r\n /**\r\n * Unfold the navigation\r\n */\r\n function unfold()\r\n {\r\n body.removeClass('ms-nav-folded ms-nav-folded-open');\r\n\r\n // Update the location\r\n $rootScope.$broadcast('msNav::expandMatchingToggles');\r\n\r\n iElement.off('mouseenter mouseleave');\r\n }\r\n\r\n // Expose functions to the scope\r\n scope.toggleFold = toggleFold;\r\n scope.openFolded = openFolded;\r\n scope.closeFolded = closeFolded;\r\n scope.isNavFoldedOpen = isNavFoldedOpen;\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n openOverlay.off('mouseenter touchstart');\r\n closeOverlay.off('mouseenter touchstart');\r\n iElement.off('mouseenter mouseleave');\r\n });\r\n }\r\n };\r\n }\r\n\r\n\r\n /** @ngInject */\r\n function MsNavController()\r\n {\r\n var vm = this,\r\n disabled = false,\r\n toggleItems = [],\r\n lockedItems = [];\r\n\r\n // Data\r\n\r\n // Methods\r\n vm.isDisabled = isDisabled;\r\n vm.enable = enable;\r\n vm.disable = disable;\r\n vm.setToggleItem = setToggleItem;\r\n vm.getLockedItems = getLockedItems;\r\n vm.setLockedItem = setLockedItem;\r\n vm.clearLockedItems = clearLockedItems;\r\n\r\n //////////\r\n\r\n /**\r\n * Is navigation disabled\r\n *\r\n * @returns {boolean}\r\n */\r\n function isDisabled()\r\n {\r\n return disabled;\r\n }\r\n\r\n /**\r\n * Disable the navigation\r\n */\r\n function disable()\r\n {\r\n disabled = true;\r\n }\r\n\r\n /**\r\n * Enable the navigation\r\n */\r\n function enable()\r\n {\r\n disabled = false;\r\n }\r\n\r\n /**\r\n * Set toggle item\r\n *\r\n * @param element\r\n * @param scope\r\n */\r\n function setToggleItem(element, scope)\r\n {\r\n toggleItems.push({\r\n 'element': element,\r\n 'scope' : scope\r\n });\r\n }\r\n\r\n /**\r\n * Get locked items\r\n *\r\n * @returns {Array}\r\n */\r\n function getLockedItems()\r\n {\r\n return lockedItems;\r\n }\r\n\r\n /**\r\n * Set locked item\r\n *\r\n * @param element\r\n * @param scope\r\n */\r\n function setLockedItem(element, scope)\r\n {\r\n lockedItems.push({\r\n 'element': element,\r\n 'scope' : scope\r\n });\r\n }\r\n\r\n /**\r\n * Clear locked items list\r\n */\r\n function clearLockedItems()\r\n {\r\n lockedItems = [];\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {},\r\n controller: 'MsNavController',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-nav');\r\n\r\n return function postLink(scope)\r\n {\r\n // Update toggle status according to the ui-router current state\r\n $rootScope.$broadcast('msNav::expandMatchingToggles');\r\n\r\n // Update toggles on state changes\r\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\r\n {\r\n $rootScope.$broadcast('msNav::expandMatchingToggles');\r\n\r\n // Close navigation sidenav on stateChangeSuccess\r\n $mdComponentRegistry.when('navigation').then(function (navigation)\r\n {\r\n navigation.close();\r\n\r\n if ( msNavFoldService.isNavFoldedOpen() )\r\n {\r\n msNavFoldService.closeFolded();\r\n }\r\n });\r\n });\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n stateChangeSuccessEvent();\r\n });\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavTitleDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-nav-title');\r\n\r\n return function postLink()\r\n {\r\n\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavButtonDirective()\r\n {\r\n return {\r\n restrict: 'AE',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-nav-button');\r\n\r\n return function postLink()\r\n {\r\n\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msNavToggleDirective($rootScope, $q, $animate, $state)\r\n {\r\n return {\r\n restrict: 'A',\r\n require : '^msNav',\r\n scope : true,\r\n compile : function (tElement, tAttrs)\r\n {\r\n tElement.addClass('ms-nav-toggle');\r\n\r\n // Add collapsed attr\r\n if ( angular.isUndefined(tAttrs.collapsed) )\r\n {\r\n tAttrs.collapsed = true;\r\n }\r\n\r\n tElement.attr('collapsed', tAttrs.collapsed);\r\n\r\n return function postLink(scope, iElement, iAttrs, MsNavCtrl)\r\n {\r\n var classes = {\r\n expanded : 'expanded',\r\n expandAnimation : 'expand-animation',\r\n collapseAnimation: 'collapse-animation'\r\n };\r\n\r\n // Store all related states\r\n var links = iElement.find('a');\r\n var states = [];\r\n var regExp = /\\(.*\\)/g;\r\n\r\n angular.forEach(links, function (link)\r\n {\r\n var state = angular.element(link).attr('ui-sref');\r\n\r\n if ( angular.isUndefined(state) )\r\n {\r\n return;\r\n }\r\n\r\n // Remove any parameter definition from the state name before storing it\r\n state = state.replace(regExp, '');\r\n\r\n states.push(state);\r\n });\r\n\r\n // Store toggle-able element and its scope in the main nav controller\r\n MsNavCtrl.setToggleItem(iElement, scope);\r\n\r\n // Click handler\r\n iElement.children('.ms-nav-button').on('click', toggle);\r\n\r\n // Toggle function\r\n function toggle()\r\n {\r\n // If navigation is disabled, do nothing...\r\n if ( MsNavCtrl.isDisabled() )\r\n {\r\n return;\r\n }\r\n\r\n // Disable the entire navigation to prevent spamming\r\n MsNavCtrl.disable();\r\n\r\n if ( isCollapsed() )\r\n {\r\n // Clear the locked items list\r\n MsNavCtrl.clearLockedItems();\r\n\r\n // Emit pushToLockedList event\r\n scope.$emit('msNav::pushToLockedList');\r\n\r\n // Collapse everything but locked items\r\n $rootScope.$broadcast('msNav::collapse');\r\n\r\n // Expand and then...\r\n expand().then(function ()\r\n {\r\n // Enable the entire navigation after animations completed\r\n MsNavCtrl.enable();\r\n });\r\n }\r\n else\r\n {\r\n // Collapse with all children\r\n scope.$broadcast('msNav::forceCollapse');\r\n }\r\n }\r\n\r\n // Cleanup\r\n scope.$on('$destroy', function ()\r\n {\r\n iElement.children('.ms-nav-button').off('click');\r\n });\r\n\r\n /*---------------------*/\r\n /* Scope Events */\r\n /*---------------------*/\r\n\r\n /**\r\n * Collapse everything but locked items\r\n */\r\n scope.$on('msNav::collapse', function ()\r\n {\r\n // Only collapse toggles that are not locked\r\n var lockedItems = MsNavCtrl.getLockedItems();\r\n var locked = false;\r\n\r\n angular.forEach(lockedItems, function (lockedItem)\r\n {\r\n if ( angular.equals(lockedItem.scope, scope) )\r\n {\r\n locked = true;\r\n }\r\n });\r\n\r\n if ( locked )\r\n {\r\n return;\r\n }\r\n\r\n // Collapse and then...\r\n collapse().then(function ()\r\n {\r\n // Enable the entire navigation after animations completed\r\n MsNavCtrl.enable();\r\n });\r\n });\r\n\r\n /**\r\n * Collapse everything\r\n */\r\n scope.$on('msNav::forceCollapse', function ()\r\n {\r\n // Collapse and then...\r\n collapse().then(function ()\r\n {\r\n // Enable the entire navigation after animations completed\r\n MsNavCtrl.enable();\r\n });\r\n });\r\n\r\n /**\r\n * Expand toggles that match with the current states\r\n */\r\n scope.$on('msNav::expandMatchingToggles', function ()\r\n {\r\n var currentState = $state.current.name;\r\n var shouldExpand = false;\r\n\r\n angular.forEach(states, function (state)\r\n {\r\n if ( currentState === state )\r\n {\r\n shouldExpand = true;\r\n }\r\n });\r\n\r\n if ( shouldExpand )\r\n {\r\n expand();\r\n }\r\n else\r\n {\r\n collapse();\r\n }\r\n });\r\n\r\n /**\r\n * Add toggle to the locked list\r\n */\r\n scope.$on('msNav::pushToLockedList', function ()\r\n {\r\n // Set expanded item on main nav controller\r\n MsNavCtrl.setLockedItem(iElement, scope);\r\n });\r\n\r\n /*---------------------*/\r\n /* Internal functions */\r\n /*---------------------*/\r\n\r\n /**\r\n * Is element collapsed\r\n *\r\n * @returns {bool}\r\n */\r\n function isCollapsed()\r\n {\r\n return iElement.attr('collapsed') === 'true';\r\n }\r\n\r\n /**\r\n * Is element expanded\r\n *\r\n * @returns {bool}\r\n */\r\n function isExpanded()\r\n {\r\n return !isCollapsed();\r\n }\r\n\r\n /**\r\n * Expand the toggle\r\n *\r\n * @returns $promise\r\n */\r\n function expand()\r\n {\r\n // Create a new deferred object\r\n var deferred = $q.defer();\r\n\r\n // If the menu item is already expanded, do nothing..\r\n if ( isExpanded() )\r\n {\r\n // Reject the deferred object\r\n deferred.reject({'error': true});\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n\r\n // Set element attr\r\n iElement.attr('collapsed', false);\r\n\r\n // Grab the element to expand\r\n var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\r\n\r\n // Move the element out of the dom flow and\r\n // make it block so we can get its height\r\n elementToExpand.css({\r\n 'position' : 'absolute',\r\n 'visibility': 'hidden',\r\n 'display' : 'block',\r\n 'height' : 'auto'\r\n });\r\n\r\n // Grab the height\r\n var height = elementToExpand[0].offsetHeight;\r\n\r\n // Reset the style modifications\r\n elementToExpand.css({\r\n 'position' : '',\r\n 'visibility': '',\r\n 'display' : '',\r\n 'height' : ''\r\n });\r\n\r\n // Animate the height\r\n scope.$evalAsync(function ()\r\n {\r\n $animate.animate(elementToExpand,\r\n {\r\n 'display': 'block',\r\n 'height' : '0px'\r\n },\r\n {\r\n 'height': height + 'px'\r\n },\r\n classes.expandAnimation\r\n ).then(\r\n function ()\r\n {\r\n // Add expanded class\r\n elementToExpand.addClass(classes.expanded);\r\n\r\n // Clear the inline styles after animation done\r\n elementToExpand.css({'height': ''});\r\n\r\n // Resolve the deferred object\r\n deferred.resolve({'success': true});\r\n }\r\n );\r\n });\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Collapse the toggle\r\n *\r\n * @returns $promise\r\n */\r\n function collapse()\r\n {\r\n // Create a new deferred object\r\n var deferred = $q.defer();\r\n\r\n // If the menu item is already collapsed, do nothing..\r\n if ( isCollapsed() )\r\n {\r\n // Reject the deferred object\r\n deferred.reject({'error': true});\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n\r\n // Set element attr\r\n iElement.attr('collapsed', true);\r\n\r\n // Grab the element to collapse\r\n var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\r\n\r\n // Grab the height\r\n var height = elementToCollapse[0].offsetHeight;\r\n\r\n // Animate the height\r\n scope.$evalAsync(function ()\r\n {\r\n $animate.animate(elementToCollapse,\r\n {\r\n 'height': height + 'px'\r\n },\r\n {\r\n 'height': '0px'\r\n },\r\n classes.collapseAnimation\r\n ).then(\r\n function ()\r\n {\r\n // Remove expanded class\r\n elementToCollapse.removeClass(classes.expanded);\r\n\r\n // Clear the inline styles after animation done\r\n elementToCollapse.css({\r\n 'display': '',\r\n 'height' : ''\r\n });\r\n\r\n // Resolve the deferred object\r\n deferred.resolve({'success': true});\r\n }\r\n );\r\n });\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('msMaterialColorPickerController', msMaterialColorPickerController)\r\n .directive('msMaterialColorPicker', msMaterialColorPicker);\r\n\r\n /** @ngInject */\r\n function msMaterialColorPickerController($scope, $mdColorPalette, $mdMenu, fuseGenerator)\r\n {\r\n var vm = this;\r\n vm.palettes = $mdColorPalette; // Material Color Palette\r\n vm.selectedPalette = false;\r\n vm.selectedHues = false;\r\n $scope.$selectedColor = {};\r\n\r\n // Methods\r\n vm.activateHueSelection = activateHueSelection;\r\n vm.selectColor = selectColor;\r\n vm.removeColor = removeColor;\r\n\r\n /**\r\n * Initialize / Watch model changes\r\n */\r\n $scope.$watch('ngModel', setSelectedColor);\r\n\r\n /**\r\n * Activate Hue Selection\r\n * @param palette\r\n * @param hues\r\n */\r\n function activateHueSelection(palette, hues)\r\n {\r\n vm.selectedPalette = palette;\r\n vm.selectedHues = hues;\r\n }\r\n\r\n /**\r\n * Select Color\r\n * @type {selectColor}\r\n */\r\n function selectColor(palette, hue)\r\n {\r\n // Update Selected Color\r\n updateSelectedColor(palette, hue);\r\n\r\n // Update Model Value\r\n updateModel();\r\n\r\n // Hide The picker\r\n $mdMenu.hide();\r\n }\r\n\r\n function removeColor()\r\n {\r\n vm.selectedColor = {\r\n palette: '',\r\n hue : '',\r\n class : ''\r\n };\r\n\r\n activateHueSelection(false, false);\r\n\r\n updateModel();\r\n }\r\n\r\n /**\r\n * Set SelectedColor by model type\r\n */\r\n function setSelectedColor()\r\n {\r\n if ( !vm.modelCtrl.$viewValue || vm.modelCtrl.$viewValue === '' )\r\n {\r\n removeColor();\r\n return;\r\n }\r\n\r\n var palette, hue;\r\n\r\n // If ModelType Class\r\n if ( vm.msModelType === 'class' )\r\n {\r\n var color = vm.modelCtrl.$viewValue.split('-');\r\n if ( color.length >= 5 )\r\n {\r\n palette = color[1] + '-' + color[2];\r\n hue = color[3];\r\n }\r\n else\r\n {\r\n palette = color[1];\r\n hue = color[2];\r\n }\r\n }\r\n\r\n // If ModelType Object\r\n else if ( vm.msModelType === 'obj' )\r\n {\r\n palette = vm.modelCtrl.$viewValue.palette;\r\n hue = vm.modelCtrl.$viewValue.hue || 500;\r\n }\r\n\r\n // Update Selected Color\r\n updateSelectedColor(palette, hue);\r\n }\r\n\r\n /**\r\n * Update Selected Color\r\n * @param palette\r\n * @param hue\r\n */\r\n function updateSelectedColor(palette, hue)\r\n {\r\n vm.selectedColor = {\r\n palette : palette,\r\n hue : hue,\r\n class : 'md-' + palette + '-' + hue + '-bg',\r\n bgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].value),\r\n fgColorValue: fuseGenerator.rgba(vm.palettes[palette][hue].contrast)\r\n };\r\n\r\n // If Model object not Equals the selectedColor update it\r\n // it can be happen when the model only have pallete and hue values\r\n if ( vm.msModelType === 'obj' && !angular.equals(vm.selectedColor, vm.modelCtrl.$viewValue) )\r\n {\r\n // Update Model Value\r\n updateModel();\r\n }\r\n\r\n activateHueSelection(palette, vm.palettes[palette]);\r\n\r\n $scope.$selectedColor = vm.selectedColor;\r\n }\r\n\r\n /**\r\n * Update Model Value by model type\r\n */\r\n function updateModel()\r\n {\r\n if ( vm.msModelType === 'class' )\r\n {\r\n vm.modelCtrl.$setViewValue(vm.selectedColor.class);\r\n }\r\n else if ( vm.msModelType === 'obj' )\r\n {\r\n vm.modelCtrl.$setViewValue(vm.selectedColor);\r\n }\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msMaterialColorPicker()\r\n {\r\n return {\r\n require : ['msMaterialColorPicker', 'ngModel'],\r\n restrict : 'E',\r\n scope : {\r\n ngModel : '=',\r\n msModelType: '@?'\r\n },\r\n controller : 'msMaterialColorPickerController as vm',\r\n transclude : true,\r\n templateUrl: 'app/core/directives/ms-material-color-picker/ms-material-color-picker.html',\r\n link : function (scope, element, attrs, controllers, transclude)\r\n {\r\n var ctrl = controllers[0];\r\n\r\n /**\r\n * Pass model controller to directive controller\r\n */\r\n ctrl.modelCtrl = controllers[1];\r\n\r\n /**\r\n * ModelType: 'obj', 'class'(default)\r\n * @type {string|string}\r\n */\r\n ctrl.msModelType = scope.msModelType || 'class';\r\n\r\n transclude(scope, function (clone)\r\n {\r\n clone = clone.filter(function (i, el)\r\n {\r\n return ( el.nodeType === 1 ) ? true : false;\r\n });\r\n\r\n if ( clone.length )\r\n {\r\n element.find('ms-color-picker-button').replaceWith(clone);\r\n }\r\n });\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('msMasonryController', msMasonryController)\r\n .directive('msMasonry', msMasonry)\r\n .directive('msMasonryItem', msMasonryItem);\r\n\r\n /** @ngInject */\r\n function msMasonryController($scope, $window, $mdMedia, $timeout)\r\n {\r\n var vm = this,\r\n defaultOpts = {\r\n columnCount : 5,\r\n respectItemOrder: false,\r\n reLayoutDebounce: 400,\r\n responsive : {\r\n md: 3,\r\n sm: 2,\r\n xs: 1\r\n }\r\n },\r\n reLayoutTimeout = true;\r\n\r\n vm.options = null;\r\n vm.container = [];\r\n vm.containerPos = '';\r\n vm.columnWidth = '';\r\n vm.items = [];\r\n\r\n // Methods\r\n vm.reLayout = reLayout;\r\n vm.initialize = initialize;\r\n vm.waitImagesLoaded = waitImagesLoaded;\r\n\r\n function initialize()\r\n {\r\n vm.options = !vm.options ? defaultOpts : angular.extend(defaultOpts, vm.options);\r\n\r\n\r\n watchContainerResize();\r\n }\r\n\r\n $scope.$on('msMasonry:relayout', function ()\r\n {\r\n reLayout();\r\n });\r\n\r\n function waitImagesLoaded(element, callback)\r\n {\r\n if ( typeof imagesLoaded !== 'undefined' )\r\n {\r\n var imgLoad = $window.imagesLoaded(element);\r\n\r\n imgLoad.on('done', function ()\r\n {\r\n callback();\r\n });\r\n }\r\n else\r\n {\r\n callback();\r\n }\r\n }\r\n\r\n function watchContainerResize()\r\n {\r\n $scope.$watch(\r\n function ()\r\n {\r\n return vm.container.width();\r\n },\r\n function (newValue, oldValue)\r\n {\r\n if ( newValue !== oldValue )\r\n {\r\n reLayout();\r\n }\r\n }\r\n );\r\n }\r\n\r\n function reLayout()\r\n {\r\n // Debounce for relayout\r\n if ( reLayoutTimeout )\r\n {\r\n $timeout.cancel(reLayoutTimeout);\r\n }\r\n\r\n reLayoutTimeout = $timeout(function ()\r\n {\r\n start();\r\n\r\n $scope.$broadcast('msMasonry:relayoutFinished');\r\n\r\n }, vm.options.reLayoutDebounce);\r\n\r\n // Start relayout\r\n function start()\r\n {\r\n vm.containerPos = vm.container[0].getBoundingClientRect();\r\n\r\n updateColumnOptions();\r\n\r\n $scope.$broadcast('msMasonry:relayoutStarted');\r\n\r\n vm.items = vm.container.find('ms-masonry-item');\r\n\r\n //initialize lastRowBottomArr\r\n var referenceArr = Array.apply(null, new Array(vm.columnCount)).map(function ()\r\n {\r\n return 0;\r\n });\r\n\r\n // set item positions\r\n for ( var i = 0; i < vm.items.length; i++ )\r\n {\r\n var item = vm.items[i],\r\n xPos, yPos, column, refTop;\r\n\r\n item = angular.element(item);\r\n\r\n if ( item.scope() )\r\n {\r\n item.scope().$broadcast('msMasonryItem:startReLayout');\r\n }\r\n\r\n item.css({'width': vm.columnWidth});\r\n\r\n if ( vm.options.respectItemOrder )\r\n {\r\n column = i % vm.columnCount;\r\n refTop = referenceArr[column];\r\n }\r\n else\r\n {\r\n refTop = Math.min.apply(Math, referenceArr);\r\n column = referenceArr.indexOf(refTop);\r\n }\r\n\r\n referenceArr[column] = refTop + item[0].getBoundingClientRect().height;\r\n\r\n xPos = Math.round(column * vm.columnWidth);\r\n yPos = refTop;\r\n\r\n item.css({'transform': 'translate3d(' + xPos + 'px,' + yPos + 'px,0px)'});\r\n item.addClass('placed');\r\n\r\n if ( item.scope() )\r\n {\r\n item.scope().$broadcast('msMasonryItem:finishReLayout');\r\n }\r\n }\r\n }\r\n }\r\n\r\n function updateColumnOptions()\r\n {\r\n vm.columnCount = vm.options.columnCount;\r\n\r\n if ( $mdMedia('gt-md') )\r\n {\r\n vm.columnCount = vm.options.columnCount;\r\n }\r\n else if ( $mdMedia('md') )\r\n {\r\n vm.columnCount = (vm.columnCount > vm.options.responsive.md ? vm.options.responsive.md : vm.columnCount);\r\n }\r\n else if ( $mdMedia('sm') )\r\n {\r\n vm.columnCount = (vm.columnCount > vm.options.responsive.sm ? vm.options.responsive.sm : vm.columnCount);\r\n }\r\n else\r\n {\r\n vm.columnCount = vm.options.responsive.xs;\r\n }\r\n\r\n vm.columnWidth = vm.containerPos.width / vm.columnCount;\r\n\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msMasonry($timeout)\r\n {\r\n return {\r\n restrict : 'AEC',\r\n controller: 'msMasonryController',\r\n compile : compile\r\n };\r\n function compile(element, attributes)\r\n {\r\n return {\r\n pre : function preLink(scope, iElement, iAttrs, controller)\r\n {\r\n controller.options = angular.fromJson(attributes.options || '{}');\r\n controller.container = element;\r\n },\r\n post: function postLink(scope, iElement, iAttrs, controller)\r\n {\r\n $timeout(function ()\r\n {\r\n controller.initialize();\r\n });\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msMasonryItem()\r\n {\r\n return {\r\n restrict: 'AEC',\r\n require : '^msMasonry',\r\n priority: 1,\r\n link : link\r\n };\r\n\r\n function link(scope, element, attributes, controller)\r\n {\r\n controller.waitImagesLoaded(element, function ()\r\n {\r\n controller.reLayout();\r\n\r\n });\r\n\r\n scope.$on('msMasonryItem:finishReLayout', function ()\r\n {\r\n scope.$watch(function ()\r\n {\r\n return element.height();\r\n }, function (newVal, oldVal)\r\n {\r\n if ( newVal !== oldVal )\r\n {\r\n controller.reLayout();\r\n }\r\n });\r\n });\r\n\r\n element.on('$destroy', function ()\r\n {\r\n controller.reLayout();\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msInfoBar', msInfoBarDirective);\r\n\r\n /** @ngInject */\r\n function msInfoBarDirective($document)\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : {},\r\n transclude : true,\r\n templateUrl: 'app/core/directives/ms-info-bar/ms-info-bar.html',\r\n link : function (scope, iElement)\r\n {\r\n var body = $document.find('body'),\r\n bodyClass = 'ms-info-bar-active';\r\n\r\n // Add body class\r\n body.addClass(bodyClass);\r\n\r\n /**\r\n * Remove the info bar\r\n */\r\n function removeInfoBar()\r\n {\r\n body.removeClass(bodyClass);\r\n iElement.remove();\r\n scope.$destroy();\r\n }\r\n\r\n // Expose functions\r\n scope.removeInfoBar = removeInfoBar;\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .controller('MsFormWizardController', MsFormWizardController)\r\n .directive('msFormWizard', msFormWizardDirective)\r\n .directive('msFormWizardForm', msFormWizardFormDirective);\r\n\r\n /** @ngInject */\r\n function MsFormWizardController()\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.forms = [];\r\n vm.selectedIndex = 0;\r\n\r\n // Methods\r\n vm.registerForm = registerForm;\r\n\r\n vm.previousStep = previousStep;\r\n vm.nextStep = nextStep;\r\n vm.firstStep = firstStep;\r\n vm.lastStep = lastStep;\r\n\r\n vm.totalSteps = totalSteps;\r\n vm.isFirstStep = isFirstStep;\r\n vm.isLastStep = isLastStep;\r\n\r\n vm.currentStepInvalid = currentStepInvalid;\r\n vm.previousStepInvalid = previousStepInvalid;\r\n vm.formsIncomplete = formsIncomplete;\r\n vm.resetForm = resetForm;\r\n\r\n //////////\r\n\r\n /**\r\n * Register form\r\n *\r\n * @param form\r\n */\r\n function registerForm(form)\r\n {\r\n vm.forms.push(form);\r\n }\r\n\r\n /**\r\n * Go to previous step\r\n */\r\n function previousStep()\r\n {\r\n if ( isFirstStep() )\r\n {\r\n return;\r\n }\r\n\r\n vm.selectedIndex--;\r\n }\r\n\r\n /**\r\n * Go to next step\r\n */\r\n function nextStep()\r\n {\r\n if ( isLastStep() )\r\n {\r\n return;\r\n }\r\n\r\n vm.selectedIndex++;\r\n }\r\n\r\n /**\r\n * Go to first step\r\n */\r\n function firstStep()\r\n {\r\n vm.selectedIndex = 0;\r\n }\r\n\r\n /**\r\n * Go to last step\r\n */\r\n function lastStep()\r\n {\r\n vm.selectedIndex = totalSteps() - 1;\r\n }\r\n\r\n /**\r\n * Return total steps\r\n *\r\n * @returns {int}\r\n */\r\n function totalSteps()\r\n {\r\n return vm.forms.length;\r\n }\r\n\r\n /**\r\n * Is first step?\r\n *\r\n * @returns {boolean}\r\n */\r\n function isFirstStep()\r\n {\r\n return vm.selectedIndex === 0;\r\n }\r\n\r\n /**\r\n * Is last step?\r\n *\r\n * @returns {boolean}\r\n */\r\n function isLastStep()\r\n {\r\n return vm.selectedIndex === totalSteps() - 1;\r\n }\r\n\r\n /**\r\n * Is current step invalid?\r\n *\r\n * @returns {boolean}\r\n */\r\n function currentStepInvalid()\r\n {\r\n return angular.isDefined(vm.forms[vm.selectedIndex]) && vm.forms[vm.selectedIndex].$invalid;\r\n }\r\n\r\n /**\r\n * Is previous step invalid?\r\n *\r\n * @returns {boolean}\r\n */\r\n function previousStepInvalid()\r\n {\r\n return vm.selectedIndex > 0 && angular.isDefined(vm.forms[vm.selectedIndex - 1]) && vm.forms[vm.selectedIndex - 1].$invalid;\r\n }\r\n\r\n /**\r\n * Check if there is any incomplete forms\r\n *\r\n * @returns {boolean}\r\n */\r\n function formsIncomplete()\r\n {\r\n for ( var x = 0; x < vm.forms.length; x++ )\r\n {\r\n if ( vm.forms[x].$invalid )\r\n {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Reset form\r\n */\r\n function resetForm()\r\n {\r\n // Go back to the first step\r\n vm.selectedIndex = 0;\r\n\r\n // Make sure all the forms are back in the $pristine & $untouched status\r\n for ( var x = 0; x < vm.forms.length; x++ )\r\n {\r\n vm.forms[x].$setPristine();\r\n vm.forms[x].$setUntouched();\r\n }\r\n }\r\n }\r\n\r\n /** @ngInject */\r\n function msFormWizardDirective()\r\n {\r\n return {\r\n restrict : 'E',\r\n scope : true,\r\n controller: 'MsFormWizardController as msWizard',\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-form-wizard');\r\n\r\n return function postLink()\r\n {\r\n\r\n };\r\n }\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msFormWizardFormDirective()\r\n {\r\n return {\r\n restrict: 'A',\r\n require : ['form', '^msFormWizard'],\r\n compile : function (tElement)\r\n {\r\n tElement.addClass('ms-form-wizard-form');\r\n\r\n return function postLink(scope, iElement, iAttrs, ctrls)\r\n {\r\n var formCtrl = ctrls[0],\r\n MsFormWizardCtrl = ctrls[1];\r\n\r\n MsFormWizardCtrl.registerForm(formCtrl);\r\n };\r\n }\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('msCard', msCardDirective);\r\n\r\n /** @ngInject */\r\n function msCardDirective()\r\n {\r\n return {\r\n restrict: 'E',\r\n scope : {\r\n templatePath: '=template',\r\n card : '=ngModel',\r\n vm : '=viewModel'\r\n },\r\n template: '
',\r\n compile : function (tElement)\r\n {\r\n // Add class\r\n tElement.addClass('ms-card');\r\n\r\n return function postLink(scope, iElement)\r\n {\r\n // Methods\r\n scope.cardTemplateLoaded = cardTemplateLoaded;\r\n\r\n //////////\r\n\r\n /**\r\n * Emit cardTemplateLoaded event\r\n */\r\n function cardTemplateLoaded()\r\n {\r\n scope.$emit('msCard::cardTemplateLoaded', iElement);\r\n }\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .provider('msDatepickerFixConfig', msDatepickerFixConfigProvider)\r\n .directive('msDatepickerFix', msDatepickerFix);\r\n\r\n /** @ngInject */\r\n function msDatepickerFixConfigProvider()\r\n {\r\n var service = this;\r\n\r\n // Default configuration\r\n var defaultConfig = {\r\n // To view\r\n formatter: function (val)\r\n {\r\n if ( !val )\r\n {\r\n return '';\r\n }\r\n\r\n return val === '' ? val : new Date(val);\r\n },\r\n // To model\r\n parser : function (val)\r\n {\r\n if ( !val )\r\n {\r\n return '';\r\n }\r\n\r\n return moment(val).add(moment(val).utcOffset(), 'm').toDate();\r\n }\r\n };\r\n\r\n // Methods\r\n service.config = config;\r\n\r\n //////////\r\n\r\n /**\r\n * Extend default configuration with the given one\r\n *\r\n * @param configuration\r\n */\r\n function config(configuration)\r\n {\r\n defaultConfig = angular.extend({}, defaultConfig, configuration);\r\n }\r\n\r\n /**\r\n * Service\r\n */\r\n service.$get = function ()\r\n {\r\n return defaultConfig;\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function msDatepickerFix(msDatepickerFixConfig)\r\n {\r\n return {\r\n require : 'ngModel',\r\n priority: 1,\r\n link : function (scope, elem, attrs, ngModel)\r\n {\r\n ngModel.$formatters.push(msDatepickerFixConfig.formatter); // to view\r\n ngModel.$parsers.push(msDatepickerFixConfig.parser); // to model\r\n }\r\n };\r\n }\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('msg', MessagesFactory);\r\n \r\n function MessagesFactory($mdToast, $mdDialog) {\r\n \r\n var service = {\r\n error: function (errorMessage) {\r\n showMessage(errorMessage, 'error');\r\n },\r\n info: function (infoMessage) {\r\n showMessage(infoMessage, 'info');\r\n },\r\n success: function (successMessage) {\r\n showMessage(successMessage, 'success');\r\n },\r\n confirm: showConfirm,\r\n prompt: prompt\r\n\r\n };\r\n\r\n return service;\r\n\r\n\r\n function showMessage (message, type) {\r\n $mdToast.show({\r\n hideDelay : 3000,\r\n position : 'top right',\r\n template : \r\n '' +\r\n '
' +\r\n message +\r\n '
' +\r\n '
',\r\n });\r\n }\r\n\r\n function showConfirm(text, successFunction, cancelfunction, content){\r\n text = text || \"Esta seguro que desea realizar esta operación?\";\r\n content = content || \"\";\r\n cancelfunction = cancelfunction || null;\r\n\r\n var confirm = $mdDialog.confirm()\r\n .title(text)\r\n .htmlContent(content)\r\n .ok('Aceptar')\r\n .cancel('Cancelar');\r\n\r\n $mdDialog.show(confirm).then(function ()\r\n {\r\n successFunction();\r\n }, function(){\r\n if (cancelfunction)\r\n cancelfunction();\r\n });\r\n } \r\n\r\n function prompt(text, label, successFunction, cancelfunction, config, initialValue){\r\n text = text || \"Ingrese valor?\";\r\n label = label || \"Ingrese valor?\";\r\n initialValue = initialValue || ''; \r\n cancelfunction = cancelfunction || null;\r\n config = angular.extend({\r\n content: '',\r\n acceptText: 'Aceptar',\r\n cancelText: 'Cancelar'\r\n }, config);\r\n\r\n var confirm = $mdDialog.prompt()\r\n .title(text)\r\n .htmlContent(config.content)\r\n .placeholder(label)\r\n .ariaLabel(label)\r\n .initialValue(initialValue)\r\n .ok(config.acceptText)\r\n .cancel(config.cancelText);\r\n\r\n $mdDialog.show(confirm).then(function (result)\r\n {\r\n successFunction(result);\r\n }, function(){\r\n if (cancelfunction)\r\n cancelfunction();\r\n });\r\n }\r\n }\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('utils', HelpersFactory);\r\n \r\n function HelpersFactory() {\r\n var _calculateAge = function(birth_day, birth_month, birth_year) {\r\n var today_date = new Date();\r\n var today_year = today_date.getFullYear();\r\n var today_month = today_date.getMonth();\r\n var today_day = today_date.getDate();\r\n var age = today_year - birth_year;\r\n\r\n if (today_month < (birth_month - 1)) {\r\n age--;\r\n }\r\n if ((birth_month == today_month) && (today_day < birth_day)) {\r\n age--;\r\n }\r\n return age;\r\n }\r\n\r\n var _groupBy = function(xs, key) {\r\n return xs.reduce(function(rv, x) {\r\n (rv[x[key]] = rv[x[key]] || []).push(x);\r\n return rv;\r\n }, {});\r\n };\r\n\r\n return {\r\n calculateAge: _calculateAge,\r\n groupBy: _groupBy \r\n }; \r\n }\r\n \r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('files', filesFactory);\r\n \r\n function filesFactory(api, localStorageService, msg) {\r\n return {\r\n uploadImage : uploadImage\r\n };\r\n\r\n\r\n function uploadImage(inputFileId, uploadType, uploadData, success){\r\n var files = $(\"#\" + inputFileId).get(0).files;\r\n \r\n // Validate data\r\n if (files.length == 0) {\r\n msg.error(\"Seleccione archivo a subir!.\");\r\n return;\r\n }\r\n \r\n var file = files[0];\r\n var data = new FormData();\r\n data.append(\"file\", file);\r\n data.append(\"uploadType\", uploadType); \r\n\r\n if (uploadData && uploadData.length){\r\n for(var i = 0; i < uploadData.length; i++){\r\n var element = uploadData[i];\r\n data.append(element.key, element.value);\r\n }\r\n }\r\n \r\n var authData = localStorageService.get('authorizationData');\r\n $.ajax({\r\n type: \"POST\",\r\n url: api.baseUrl + \"Files\",\r\n contentType: false,\r\n processData: false,\r\n data: data,\r\n headers: { \r\n \"Authorization\": 'Bearer ' + authData.token\r\n },\r\n success: function (response) {\r\n if (success)\r\n success(response);\r\n },\r\n error: function (errorResponse) {\r\n if (errorResponse.status == 500 || errorResponse.status == 400){\r\n msg.error(errorResponse.responseText);\r\n }else \r\n msg.error(\"Error al subir archivo, comunicate con el administrador!!!!\"); \r\n }\r\n });\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.tempLogin', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider)\r\n {\r\n // State\r\n // $stateProvider\r\n // .state('app.login', {\r\n // url : '/',\r\n // views : {\r\n // 'main@' : {\r\n // templateUrl: 'app/core/layouts/content-only.html',\r\n // controller: 'MainController as vm'\r\n // },\r\n // 'content@app.login': {\r\n // templateUrl: 'app/main/login/login.html',\r\n // controller: 'LoginController as vm'\r\n // }\r\n // }\r\n // });\r\n }\r\n\r\n \r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.tempLogin')\r\n .controller('TempLoginDialogController', tempLoginDialogController);\r\n\r\n /** @ngInject */\r\n function tempLoginDialogController($mdDialog, msg)\r\n {\r\n var vm = this;\r\n\r\n init();\r\n\r\n // Methods\r\n vm.accept = accept; \r\n vm.cancel = cancel;\r\n ////////\r\n\r\n function init(){\r\n }\r\n\r\n function accept(){ \r\n // TODO: Ejecutar accion de boton\r\n cancel();\r\n }\r\n\r\n function cancel(){\r\n $mdDialog.hide();\r\n }\r\n }\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('reportsService', reportsService);\r\n\r\n function reportsService(localStorageService){\r\n \r\n var reportsServiceFactory = {};\r\n\r\n var _setReportData = function(data){\r\n localStorageService.set(\"reportData\", { data: data });\r\n }\r\n\r\n var _getReportData = function(){\r\n return localStorageService.get(\"reportData\");\r\n }\r\n\r\n reportsService.setReportData = _setReportData;\r\n reportsService.getReportData = _getReportData;\r\n\r\n return reportsService;\r\n\r\n }\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('settingsService', settingsService);\r\n\r\n function settingsService($q, api, $http, authService){\r\n return function(){\r\n var appData = authService.getAppData();\r\n return appData.settings;\r\n }\r\n // return { \r\n // daysOfGrace : 10,\r\n // interes : 10\r\n // };\r\n }\r\n})();\n(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"app.core\").factory(\"authService\", authService);\r\n\r\n function authService($q, api, $http, localStorageService) {\r\n var authServiceFactory = {};\r\n\r\n var serviceBase = api.baseUrl.replace(\"api/\", \"\");\r\n var _authentication = {\r\n isAuth: false,\r\n userName: \"\",\r\n branch: null,\r\n user: null,\r\n access: null,\r\n };\r\n\r\n var _login = function (loginData) {\r\n _logOut();\r\n var data =\r\n \"grant_type=password&username=\" +\r\n loginData.userName +\r\n \"&password=\" +\r\n loginData.password;\r\n var deferred = $q.defer();\r\n $http\r\n .post(serviceBase + \"token\", data, {\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n })\r\n .success(function (response) {\r\n localStorageService.set(\"authorizationData\", {\r\n token: response.access_token,\r\n userName: loginData.userName,\r\n });\r\n _authentication.isAuth = true;\r\n _authentication.userName = loginData.userName;\r\n deferred.resolve(response);\r\n })\r\n .error(function (err, status) {\r\n _logOut();\r\n deferred.reject(err);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n var _logOut = function () {\r\n localStorageService.remove(\"authorizationData\");\r\n localStorageService.remove(\"appData\");\r\n\r\n _authentication.isAuth = false;\r\n _authentication.userName = \"\";\r\n };\r\n\r\n var _fillAuthData = function () {\r\n var authData = localStorageService.get(\"authorizationData\");\r\n if (authData) {\r\n _authentication.isAuth = true;\r\n _authentication.userName = authData.userName;\r\n }\r\n };\r\n\r\n var _addBranch = function (branch) {\r\n _authentication.branch = branch;\r\n };\r\n\r\n var _addUser = function (user) {\r\n _authentication.user = user;\r\n };\r\n\r\n var _addAccess = function (access) {\r\n _authentication.access = access;\r\n };\r\n\r\n var _setAppData = function () {\r\n localStorageService.set(\"appData\", {\r\n user: _authentication.user,\r\n branch: _authentication.branch,\r\n access: _authentication.access,\r\n settings: _authentication.branch.setting,\r\n });\r\n };\r\n\r\n var _getAppData = function () {\r\n return localStorageService.get(\"appData\");\r\n };\r\n\r\n var _updateUserData = function (user) {\r\n var appData = localStorageService.get(\"appData\");\r\n appData.user = user;\r\n localStorageService.set(\"appData\", appData);\r\n };\r\n\r\n authServiceFactory.login = _login;\r\n authServiceFactory.logOut = _logOut;\r\n authServiceFactory.fillAuthData = _fillAuthData;\r\n authServiceFactory.authentication = _authentication;\r\n authServiceFactory.addBranch = _addBranch;\r\n authServiceFactory.addUser = _addUser;\r\n authServiceFactory.addAccess = _addAccess;\r\n authServiceFactory.setAppData = _setAppData;\r\n authServiceFactory.getAppData = _getAppData;\r\n authServiceFactory.updateUserData = _updateUserData;\r\n\r\n return authServiceFactory;\r\n }\r\n})();\r\n\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.login')\r\n .controller('LoginController', LoginController)\r\n\r\n function LoginController($state, $http, $mdDialog, api, authService, msg) {\r\n var vm = this;\r\n\r\n vm.form = {};\r\n vm.branches = [];\r\n vm.branch = {};\r\n\r\n _init();\r\n\r\n // Methods \r\n vm.login = login;\r\n vm.selectBranch = selectBranch;\r\n vm.cerrarSesiones = cerrarSesiones;\r\n vm.detail = detail;\r\n ////////\r\n\r\n function _init() {\r\n authService.logOut();\r\n }\r\n\r\n function login() {\r\n vm.loading = true;\r\n vm.sesion = {\r\n userName: vm.form.user,\r\n password: vm.form.password\r\n }\r\n authService.login({\r\n userName: vm.form.user,\r\n password: vm.form.password\r\n }).then(function () {\r\n\r\n // Get APP access \r\n api.app.access.request(function (accessResponse) {\r\n if (accessResponse.success) { //SUCCESS \r\n\r\n api.security.access.query(function (response) {\r\n // Set Access in Local Storage\r\n authService.addAccess(response);\r\n\r\n // Get User Data\r\n api.security.users.getByUsername({\r\n username: authService.authentication.userName,\r\n id: 0\r\n }, function (user) {\r\n vm.loading = false;\r\n authService.addUser(user);\r\n if (user.branches.length == 0) {\r\n msg.error(\"El usuario no cuenta con sucursales asignadas, no puede ingresar al sistema.\");\r\n vm.form = {};\r\n } else if (user.branches.length == 1) {\r\n authService.addBranch(user.branches[0]);\r\n authService.setAppData();\r\n window.location.href = \"/home\";\r\n } else {\r\n vm.branches = user.branches;\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n // ERROR\r\n vm.loading = false;\r\n\r\n if (accessResponse.errorCode == \"01\") {\r\n $state.go(\"app.license\")\r\n }\r\n\r\n if (accessResponse.errorCode == \"02\") {\r\n vm.errorCode = accessResponse.errorCode;\r\n }\r\n msg.error(accessResponse.errorMessage);\r\n }\r\n\r\n });\r\n\r\n }, function () {\r\n vm.loading = false;\r\n });\r\n }\r\n\r\n function selectBranch() {\r\n var branch = vm.branches.filter(function (b) { return b.id == vm.branchId; })[0];\r\n authService.addBranch(branch);\r\n authService.setAppData();\r\n window.location.href = \"/home\";\r\n // $state.go('app.home');\r\n }\r\n\r\n function cerrarSesiones() {\r\n authService.login({\r\n userName: vm.form.user,\r\n password: vm.form.password\r\n }).then(function () {\r\n\r\n // Get APP access \r\n api.app.access.closeSession(\r\n function (accessResponse) {\r\n if (accessResponse.$resolved) {\r\n //SUCCESS\r\n vm.errorCode = \"\";\r\n }\r\n else {\r\n // ERROR\r\n vm.errorCode = \"04\";\r\n }\r\n\r\n }\r\n );\r\n });\r\n }\r\n\r\n function detail(ev) {\r\n $mdDialog.show({\r\n controller: 'LoginDialogController2',\r\n controllerAs: 'vm',\r\n templateUrl: 'app/main/login/dialogs/dialog-close-sesions.html',\r\n parent: angular.element(document.body),\r\n targetEvent: ev,\r\n escapeToClose: true,\r\n clickOutsideToClose: true,\r\n locals: {\r\n Callback: authService,\r\n User: vm.form.user,\r\n Password: vm.form.password\r\n }\r\n }).then(function (returnValue) {\r\n vm.errorCode = returnValue;\r\n });;\r\n }\r\n }\r\n})();\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('app.license')\r\n .controller('LicenseController', licenseController)\r\n\r\n function licenseController($state, $http, api, authService, msg, $mdDialog){\r\n var vm = this;\r\n\r\n // Methods \r\n vm.save = save;\r\n vm.showAdminLogin = showAdminLogin;\r\n ////////\r\n\r\n _init();\r\n\r\n function _init(){\r\n vm.loading = false;\r\n // authService.login({\r\n // userName: vm.form.user,\r\n // password: vm.form.password\r\n // }).then(function(){\r\n\r\n // // TODO: Get APP access \r\n // api.app.access.request(function(accessResponse){\r\n // if (accessResponse.success){ //SUCCESS \r\n \r\n // api.security.access.query(function(response){\r\n // authService.addAccess(response);\r\n // });\r\n \r\n // api.security.users.getByUsername({\r\n // username: authService.authentication.userName,\r\n // id: 0\r\n // }, function(user){\r\n // vm.loading = false;\r\n \r\n \r\n \r\n // authService.addUser(user);\r\n // if (user.branches.length == 0){\r\n // msg.error(\"El usuario no cuenta con sucursales asignadas, no puede ingresar al sistema.\");\r\n // vm.form = {};\r\n // }else if(user.branches.length == 1){\r\n // authService.addBranch(user.branches[0]);\r\n // authService.setAppData();\r\n // // $state.go('app.home');\r\n // window.location.href = \"/home\";\r\n // }else{\r\n // vm.branches = user.branches;\r\n // }\r\n // });\r\n // }else{\r\n // // ERROR\r\n // vm.loading = false;\r\n // msg.error(accessResponse.errorMessage);\r\n // }\r\n\r\n // });\r\n\r\n // }, function(){ \r\n // vm.loading = false;\r\n // });\r\n }\r\n\r\n function save(){\r\n api.app.access.addLicense({ license: vm.license }, function(response){\r\n msg.success(\"Licencia agregada correctamente.\");\r\n $state.go(\"app.login\");\r\n });\r\n }\r\n\r\n function showAdminLogin(ev){\r\n $mdDialog.show({\r\n controller : 'LicenseLoginDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/license/dialogs/dialog-login/dialog-login.html',\r\n targetEvent : ev,\r\n escapeToClose : false,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Callback : _loginCallback\r\n }\r\n });\r\n }\r\n\r\n function _loginCallback(license){\r\n vm.license = license;\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.home', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.home', {\r\n url : '/home',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/home/home.html',\r\n controller : 'HomeController as vm'\r\n }\r\n },\r\n bodyClass: 'home'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.home', {\r\n title : 'Principal',\r\n icon : 'icon-home',\r\n state: 'app.home'\r\n }); \r\n }\r\n})();\n(function(){\r\n\r\n 'use strict';\r\n\r\n angular\r\n .module('app.home')\r\n .controller(\"HomeController\", homeController);\r\n \r\n function homeController(){\r\n var vm = this; \r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .filter('toDate', toDateFilter);\r\n\r\n function toDateFilter() {\r\n return function(input) {\r\n if (input)\r\n return new Date(input);\r\n else \r\n return new Date();\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .filter('sum', sumFilter);\r\n\r\n function sumFilter() {\r\n return function (data, key) { \r\n if (angular.isUndefined(data) || angular.isUndefined(key))\r\n return 0; \r\n var sum = 0; \r\n angular.forEach(data,function(value){\r\n sum = sum + parseFloat(value[key], 10);\r\n }); \r\n return sum;\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n Array.prototype.groupBy = function(prop) {\r\n return this.reduce(function(groups, item) {\r\n var val = item[prop];\r\n groups[val] = groups[val] || { key: val, items: [] };\r\n groups[val].items.push(item);\r\n return groups;\r\n }, {});\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .service('fuseTheming', fuseThemingService);\r\n\r\n /** @ngInject */\r\n function fuseThemingService($cookies, $log, $mdTheming)\r\n {\r\n var service = {\r\n getRegisteredPalettes: getRegisteredPalettes,\r\n getRegisteredThemes : getRegisteredThemes,\r\n setActiveTheme : setActiveTheme,\r\n setThemesList : setThemesList,\r\n themes : {\r\n list : {},\r\n active: {\r\n 'name' : '',\r\n 'theme': {}\r\n }\r\n }\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Get registered palettes\r\n *\r\n * @returns {*}\r\n */\r\n function getRegisteredPalettes()\r\n {\r\n return $mdTheming.PALETTES;\r\n }\r\n\r\n /**\r\n * Get registered themes\r\n *\r\n * @returns {*}\r\n */\r\n function getRegisteredThemes()\r\n {\r\n return $mdTheming.THEMES;\r\n }\r\n\r\n /**\r\n * Set active theme\r\n *\r\n * @param themeName\r\n */\r\n function setActiveTheme(themeName)\r\n {\r\n // If theme does not exist, fallback to the default theme\r\n if ( angular.isUndefined(service.themes.list[themeName]) )\r\n {\r\n // If there is no theme called \"default\"...\r\n if ( angular.isUndefined(service.themes.list.default) )\r\n {\r\n $log.error('You must have at least one theme named \"default\"');\r\n return;\r\n }\r\n\r\n $log.warn('The theme \"' + themeName + '\" does not exist! Falling back to the \"default\" theme.');\r\n\r\n // Otherwise set theme to default theme\r\n service.themes.active.name = 'default';\r\n service.themes.active.theme = service.themes.list.default;\r\n $cookies.put('selectedTheme', service.themes.active.name);\r\n\r\n return;\r\n }\r\n\r\n service.themes.active.name = themeName;\r\n service.themes.active.theme = service.themes.list[themeName];\r\n $cookies.put('selectedTheme', themeName);\r\n }\r\n\r\n /**\r\n * Set available themes list\r\n *\r\n * @param themeList\r\n */\r\n function setThemesList(themeList)\r\n {\r\n service.themes.list = themeList;\r\n }\r\n }\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($mdThemingProvider, fusePalettes, fuseThemes)\r\n {\r\n // Inject Cookies Service\r\n var $cookies;\r\n angular.injector(['ngCookies']).invoke([\r\n '$cookies', function (_$cookies)\r\n {\r\n $cookies = _$cookies;\r\n }\r\n ]);\r\n\r\n // Check if custom theme exist in cookies\r\n var customTheme = $cookies.getObject('customTheme');\r\n if ( customTheme )\r\n {\r\n fuseThemes['custom'] = customTheme;\r\n }\r\n\r\n $mdThemingProvider.alwaysWatchTheme(true);\r\n\r\n // Define custom palettes\r\n angular.forEach(fusePalettes, function (palette)\r\n {\r\n $mdThemingProvider.definePalette(palette.name, palette.options);\r\n });\r\n\r\n // Register custom themes\r\n angular.forEach(fuseThemes, function (theme, themeName)\r\n {\r\n $mdThemingProvider.theme(themeName)\r\n .primaryPalette(theme.primary.name, theme.primary.hues)\r\n .accentPalette(theme.accent.name, theme.accent.hues)\r\n .warnPalette(theme.warn.name, theme.warn.hues)\r\n .backgroundPalette(theme.background.name, theme.background.hues);\r\n });\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n var fuseThemes = { \r\n default : {\r\n primary : {\r\n name: 'blue',\r\n hues: {\r\n 'default': '700',\r\n 'hue-1' : '500',\r\n 'hue-2' : '600',\r\n 'hue-3' : '400'\r\n }\r\n },\r\n accent : {\r\n name: 'light-blue',\r\n hues: {\r\n 'default': '600',\r\n 'hue-1' : '400',\r\n 'hue-2' : '700',\r\n 'hue-3' : 'A100'\r\n }\r\n },\r\n warn : {\r\n name: 'red'\r\n },\r\n background: {\r\n name: 'grey',\r\n hues: {\r\n 'default': 'A100',\r\n 'hue-1' : 'A100',\r\n 'hue-2' : '100',\r\n 'hue-3' : '300'\r\n }\r\n }\r\n },\r\n \r\n // 'tealTheme': {\r\n // primary : {\r\n // name: 'fuse-blue',\r\n // hues: {\r\n // 'default': '900',\r\n // 'hue-1' : '600',\r\n // 'hue-2' : '500',\r\n // 'hue-3' : 'A100'\r\n // }\r\n // },\r\n // accent : {\r\n // name: 'teal',\r\n // hues: {\r\n // 'default': '500',\r\n // 'hue-1' : '400',\r\n // 'hue-2' : '600',\r\n // 'hue-3' : 'A100'\r\n // }\r\n // },\r\n // warn : {\r\n // name: 'deep-orange'\r\n // },\r\n // background: {\r\n // name: 'grey',\r\n // hues: {\r\n // 'default': 'A100',\r\n // 'hue-1' : 'A100',\r\n // 'hue-2' : '100',\r\n // 'hue-3' : '300'\r\n // }\r\n // }\r\n // }\r\n };\r\n\r\n angular\r\n .module('app.core')\r\n .constant('fuseThemes', fuseThemes);\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n var fusePalettes = [\r\n {\r\n name: 'fuse-blue',\r\n options: {\r\n '50': '#ebf1fa',\r\n '100': '#c2d4ef',\r\n '200': '#9ab8e5',\r\n '300': '#78a0dc',\r\n '400': '#5688d3',\r\n '500': '#3470ca',\r\n '600': '#2e62b1',\r\n '700': '#275498',\r\n '800': '#21467e',\r\n '900': '#1a3865',\r\n 'A100': '#c2d4ef',\r\n 'A200': '#9ab8e5',\r\n 'A400': '#5688d3',\r\n 'A700': '#275498',\r\n 'contrastDefaultColor': 'light',\r\n 'contrastDarkColors': '50 100 200 A100',\r\n 'contrastStrongLightColors': '300 400'\r\n }\r\n },\r\n {\r\n name: 'fuse-paleblue',\r\n options: {\r\n '50': '#ececee',\r\n '100': '#c5c6cb',\r\n '200': '#9ea1a9',\r\n '300': '#7d818c',\r\n '400': '#5c616f',\r\n '500': '#3c4252',\r\n '600': '#353a48',\r\n '700': '#2d323e',\r\n '800': '#262933',\r\n '900': '#1e2129',\r\n 'A100': '#c5c6cb',\r\n 'A200': '#9ea1a9',\r\n 'A400': '#5c616f',\r\n 'A700': '#2d323e',\r\n 'contrastDefaultColor': 'light',\r\n 'contrastDarkColors': '50 100 200 A100',\r\n 'contrastStrongLightColors': '300 400'\r\n }\r\n }\r\n ];\r\n\r\n angular\r\n .module('app.core')\r\n .constant('fusePalettes', fusePalettes);\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('fuseGenerator', fuseGeneratorService);\r\n\r\n /** @ngInject */\r\n function fuseGeneratorService($cookies, $log, fuseTheming)\r\n {\r\n // Storage for simplified themes object\r\n var themes = {};\r\n\r\n var service = {\r\n generate: generate,\r\n rgba : rgba\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Generate less variables for each theme from theme's\r\n * palette by using material color naming conventions\r\n */\r\n function generate()\r\n {\r\n // Get registered themes and palettes and copy\r\n // them so we don't modify the original objects\r\n var registeredThemes = angular.copy(fuseTheming.getRegisteredThemes());\r\n var registeredPalettes = angular.copy(fuseTheming.getRegisteredPalettes());\r\n\r\n // First, create a simplified object that stores\r\n // all registered themes and their colors\r\n\r\n // Iterate through registered themes\r\n angular.forEach(registeredThemes, function (registeredTheme)\r\n {\r\n themes[registeredTheme.name] = {};\r\n\r\n // Iterate through color types (primary, accent, warn & background)\r\n angular.forEach(registeredTheme.colors, function (colorType, colorTypeName)\r\n {\r\n themes[registeredTheme.name][colorTypeName] = {\r\n 'name' : colorType.name,\r\n 'levels': {\r\n 'default': {\r\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues.default].value),\r\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 1),\r\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 2),\r\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 3),\r\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 4)\r\n },\r\n 'hue1' : {\r\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].value),\r\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 1),\r\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 2),\r\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 3),\r\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 4)\r\n },\r\n 'hue2' : {\r\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].value),\r\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 1),\r\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 2),\r\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 3),\r\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 4)\r\n },\r\n 'hue3' : {\r\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].value),\r\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 1),\r\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 2),\r\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 3),\r\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 4)\r\n }\r\n }\r\n };\r\n });\r\n });\r\n\r\n // Process themes one more time and then store them in the service for external use\r\n processAndStoreThemes(themes);\r\n\r\n // Iterate through simplified themes\r\n // object and create style variables\r\n var styleVars = {};\r\n\r\n // Iterate through registered themes\r\n angular.forEach(themes, function (theme, themeName)\r\n {\r\n styleVars = {};\r\n styleVars['@themeName'] = themeName;\r\n\r\n // Iterate through color types (primary, accent, warn & background)\r\n angular.forEach(theme, function (colorTypes, colorTypeName)\r\n {\r\n // Iterate through color levels (default, hue1, hue2 & hue3)\r\n angular.forEach(colorTypes.levels, function (colors, colorLevelName)\r\n {\r\n // Iterate through color name (color, contrast1, contrast2, contrast3 & contrast4)\r\n angular.forEach(colors, function (color, colorName)\r\n {\r\n styleVars['@' + colorTypeName + ucfirst(colorLevelName) + ucfirst(colorName)] = color;\r\n });\r\n });\r\n });\r\n\r\n // Render styles\r\n render(styleVars);\r\n });\r\n }\r\n\r\n // ---------------------------\r\n // INTERNAL HELPER FUNCTIONS\r\n // ---------------------------\r\n\r\n /**\r\n * Process and store themes for global use\r\n *\r\n * @param _themes\r\n */\r\n function processAndStoreThemes(_themes)\r\n {\r\n // Here we will go through every registered theme one more time\r\n // and try to simplify their objects as much as possible for\r\n // easier access to their properties.\r\n var themes = angular.copy(_themes);\r\n\r\n // Iterate through themes\r\n angular.forEach(themes, function (theme)\r\n {\r\n // Iterate through color types (primary, accent, warn & background)\r\n angular.forEach(theme, function (colorType, colorTypeName)\r\n {\r\n theme[colorTypeName] = colorType.levels;\r\n theme[colorTypeName].color = colorType.levels.default.color;\r\n theme[colorTypeName].contrast1 = colorType.levels.default.contrast1;\r\n theme[colorTypeName].contrast2 = colorType.levels.default.contrast2;\r\n theme[colorTypeName].contrast3 = colorType.levels.default.contrast3;\r\n theme[colorTypeName].contrast4 = colorType.levels.default.contrast4;\r\n delete theme[colorTypeName].default;\r\n });\r\n });\r\n\r\n // Store themes and set selected theme for the first time\r\n fuseTheming.setThemesList(themes);\r\n\r\n // Remember selected theme.\r\n var selectedTheme = $cookies.get('selectedTheme');\r\n\r\n if ( selectedTheme )\r\n {\r\n fuseTheming.setActiveTheme(selectedTheme);\r\n }\r\n else\r\n {\r\n fuseTheming.setActiveTheme('default');\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Render css files\r\n *\r\n * @param styleVars\r\n */\r\n function render(styleVars)\r\n {\r\n var cssTemplate = '/* Content hack because they wont fix */\\n/* https://github.com/angular/material/pull/8067 */\\n[md-theme=\"@themeName\"] md-content.md-hue-1,\\nmd-content.md-@themeName-theme.md-hue-1 {\\n color: @backgroundHue1Contrast1;\\n background-color: @backgroundHue1Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-2,\\nmd-content.md-@themeName-theme.md-hue-2 {\\n color: @backgroundHue2Contrast1;\\n background-color: @backgroundHue2Color;\\n}\\n\\n[md-theme=\"@themeName\"] md-content.md-hue-3,\\n md-content.md-@themeName-theme.md-hue-3 {\\n color: @backgroundHue3Contrast1;\\n background-color: @backgroundHue3Color;\\n}\\n\\n/* Text Colors */\\n[md-theme=\"@themeName\"] a {\\n color: @accentDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n background-color: @primaryDefaultColor;\\n color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n background-color: @primaryHue1Color;\\n color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n background-color: @primaryHue2Color;\\n color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n background-color: @primaryHue3Color;\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n color: @primaryHue3Color !important;\\n}\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n background-color: @accentDefaultColor;\\n color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n background-color: @accentHue1Color;\\n color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n background-color: @accentHue2Color;\\n color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n background-color: @accentHue3Color;\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n color: @accentHue3Color !important;\\n}\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n background-color: @warnDefaultColor;\\n color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n background-color: @warnHue1Color;\\n color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n background-color: @warnHue2Color;\\n color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n background-color: @warnHue3Color;\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n background-color: @backgroundDefaultColor;\\n color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n background-color: @backgroundHue1Color;\\n color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n background-color: @backgroundHue2Color;\\n color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n background-color: @backgroundHue3Color;\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n color: @backgroundHue3Color !important;\\n}';\r\n\r\n var regex = new RegExp(Object.keys(styleVars).join('|'), 'gi');\r\n var css = cssTemplate.replace(regex, function (matched)\r\n {\r\n return styleVars[matched];\r\n });\r\n\r\n var headEl = angular.element('head');\r\n var styleEl = angular.element('');\r\n styleEl.html(css);\r\n headEl.append(styleEl);\r\n }\r\n\r\n /**\r\n * Convert color array to rgb/rgba\r\n * Also apply contrasts if needed\r\n *\r\n * @param color\r\n * @param _contrastLevel\r\n * @returns {string}\r\n */\r\n function rgba(color, _contrastLevel)\r\n {\r\n var contrastLevel = _contrastLevel || false;\r\n\r\n // Convert 255,255,255,0.XX to 255,255,255\r\n // According to Google's Material design specs, white primary\r\n // text must have opacity of 1 and we will fix that here\r\n // because Angular Material doesn't care about that spec\r\n if ( color.length === 4 && color[0] === 255 && color[1] === 255 && color[2] === 255 )\r\n {\r\n color.splice(3, 4);\r\n }\r\n\r\n // If contrast level provided, apply it to the current color\r\n if ( contrastLevel )\r\n {\r\n color = applyContrast(color, contrastLevel);\r\n }\r\n\r\n // Convert color array to color string (rgb/rgba)\r\n if ( color.length === 3 )\r\n {\r\n return 'rgb(' + color.join(',') + ')';\r\n }\r\n else if ( color.length === 4 )\r\n {\r\n return 'rgba(' + color.join(',') + ')';\r\n }\r\n else\r\n {\r\n $log.error('Invalid number of arguments supplied in the color array: ' + color.length + '\\n' + 'The array must have 3 or 4 colors.');\r\n }\r\n }\r\n\r\n /**\r\n * Apply given contrast level to the given color\r\n *\r\n * @param color\r\n * @param contrastLevel\r\n */\r\n function applyContrast(color, contrastLevel)\r\n {\r\n var contrastLevels = {\r\n 'white': {\r\n '1': '1',\r\n '2': '0.7',\r\n '3': '0.3',\r\n '4': '0.12'\r\n },\r\n 'black': {\r\n '1': '0.87',\r\n '2': '0.54',\r\n '3': '0.26',\r\n '4': '0.12'\r\n }\r\n };\r\n\r\n // If white\r\n if ( color[0] === 255 && color[1] === 255 && color[2] === 255 )\r\n {\r\n color[3] = contrastLevels.white[contrastLevel];\r\n }\r\n // If black\r\n else if ( color[0] === 0 && color[1] === 0 && color[2] === 0 )\r\n {\r\n color[3] = contrastLevels.black[contrastLevel];\r\n }\r\n\r\n return color;\r\n }\r\n\r\n /**\r\n * Uppercase first\r\n */\r\n function ucfirst(string)\r\n {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('msUtils', msUtils);\r\n\r\n /** @ngInject */\r\n function msUtils($window)\r\n {\r\n // Private variables\r\n var mobileDetect = new MobileDetect($window.navigator.userAgent),\r\n browserInfo = null;\r\n\r\n var service = {\r\n exists : exists,\r\n detectBrowser: detectBrowser,\r\n guidGenerator: guidGenerator,\r\n isMobile : isMobile,\r\n toggleInArray: toggleInArray\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Check if item exists in a list\r\n *\r\n * @param item\r\n * @param list\r\n * @returns {boolean}\r\n */\r\n function exists(item, list)\r\n {\r\n return list.indexOf(item) > -1;\r\n }\r\n\r\n /**\r\n * Returns browser information\r\n * from user agent data\r\n *\r\n * Found at http://www.quirksmode.org/js/detect.html\r\n * but modified and updated to fit for our needs\r\n */\r\n function detectBrowser()\r\n {\r\n // If we already tested, do not test again\r\n if ( browserInfo )\r\n {\r\n return browserInfo;\r\n }\r\n\r\n var browserData = [\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'Edge',\r\n versionSearch: 'Edge',\r\n identity : 'Edge'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString: 'Chrome',\r\n identity : 'Chrome'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'OmniWeb',\r\n versionSearch: 'OmniWeb/',\r\n identity : 'OmniWeb'\r\n },\r\n {\r\n string : $window.navigator.vendor,\r\n subString : 'Apple',\r\n versionSearch: 'Version',\r\n identity : 'Safari'\r\n },\r\n {\r\n prop : $window.opera,\r\n identity: 'Opera'\r\n },\r\n {\r\n string : $window.navigator.vendor,\r\n subString: 'iCab',\r\n identity : 'iCab'\r\n },\r\n {\r\n string : $window.navigator.vendor,\r\n subString: 'KDE',\r\n identity : 'Konqueror'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString: 'Firefox',\r\n identity : 'Firefox'\r\n },\r\n {\r\n string : $window.navigator.vendor,\r\n subString: 'Camino',\r\n identity : 'Camino'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString: 'Netscape',\r\n identity : 'Netscape'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'MSIE',\r\n identity : 'Explorer',\r\n versionSearch: 'MSIE'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'Trident/7',\r\n identity : 'Explorer',\r\n versionSearch: 'rv'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'Gecko',\r\n identity : 'Mozilla',\r\n versionSearch: 'rv'\r\n },\r\n {\r\n string : $window.navigator.userAgent,\r\n subString : 'Mozilla',\r\n identity : 'Netscape',\r\n versionSearch: 'Mozilla'\r\n }\r\n ];\r\n\r\n var osData = [\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'Win',\r\n identity : 'Windows'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'Mac',\r\n identity : 'Mac'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'Linux',\r\n identity : 'Linux'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'iPhone',\r\n identity : 'iPhone'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'iPod',\r\n identity : 'iPod'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'iPad',\r\n identity : 'iPad'\r\n },\r\n {\r\n string : $window.navigator.platform,\r\n subString: 'Android',\r\n identity : 'Android'\r\n }\r\n ];\r\n\r\n var versionSearchString = '';\r\n\r\n function searchString(data)\r\n {\r\n for ( var i = 0; i < data.length; i++ )\r\n {\r\n var dataString = data[i].string;\r\n var dataProp = data[i].prop;\r\n\r\n versionSearchString = data[i].versionSearch || data[i].identity;\r\n\r\n if ( dataString )\r\n {\r\n if ( dataString.indexOf(data[i].subString) !== -1 )\r\n {\r\n return data[i].identity;\r\n\r\n }\r\n }\r\n else if ( dataProp )\r\n {\r\n return data[i].identity;\r\n }\r\n }\r\n }\r\n\r\n function searchVersion(dataString)\r\n {\r\n var index = dataString.indexOf(versionSearchString);\r\n\r\n if ( index === -1 )\r\n {\r\n return;\r\n }\r\n\r\n return parseInt(dataString.substring(index + versionSearchString.length + 1));\r\n }\r\n\r\n var browser = searchString(browserData) || 'unknown-browser';\r\n var version = searchVersion($window.navigator.userAgent) || searchVersion($window.navigator.appVersion) || 'unknown-version';\r\n var os = searchString(osData) || 'unknown-os';\r\n\r\n // Prepare and store the object\r\n browser = browser.toLowerCase();\r\n version = browser + '-' + version;\r\n os = os.toLowerCase();\r\n\r\n browserInfo = {\r\n browser: browser,\r\n version: version,\r\n os : os\r\n };\r\n\r\n return browserInfo;\r\n }\r\n\r\n /**\r\n * Generates a globally unique id\r\n *\r\n * @returns {*}\r\n */\r\n function guidGenerator()\r\n {\r\n var S4 = function ()\r\n {\r\n return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);\r\n };\r\n return (S4() + S4() + S4() + S4() + S4() + S4());\r\n }\r\n\r\n /**\r\n * Return if current device is a\r\n * mobile device or not\r\n */\r\n function isMobile()\r\n {\r\n return mobileDetect.mobile();\r\n }\r\n\r\n /**\r\n * Toggle in array (push or splice)\r\n *\r\n * @param item\r\n * @param array\r\n */\r\n function toggleInArray(item, array)\r\n {\r\n if ( array.indexOf(item) === -1 )\r\n {\r\n array.push(item);\r\n }\r\n else\r\n {\r\n array.splice(array.indexOf(item), 1);\r\n }\r\n }\r\n }\r\n}());\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .provider('msApi', msApiProvider);\r\n\r\n /** @ngInject **/\r\n function msApiProvider()\r\n {\r\n /* ----------------- */\r\n /* Provider */\r\n /* ----------------- */\r\n var provider = this;\r\n\r\n // Inject the $log service\r\n var $log = angular.injector(['ng']).get('$log');\r\n\r\n // Data\r\n var baseUrl = '';\r\n var api = [];\r\n\r\n // Methods\r\n provider.setBaseUrl = setBaseUrl;\r\n provider.getBaseUrl = getBaseUrl;\r\n provider.getApiObject = getApiObject;\r\n provider.register = register;\r\n\r\n //////////\r\n\r\n /**\r\n * Set base url for API endpoints\r\n *\r\n * @param url {string}\r\n */\r\n function setBaseUrl(url)\r\n {\r\n baseUrl = url;\r\n }\r\n\r\n /**\r\n * Return the base url\r\n *\r\n * @returns {string}\r\n */\r\n function getBaseUrl()\r\n {\r\n return baseUrl;\r\n }\r\n\r\n /**\r\n * Return the api object\r\n *\r\n * @returns {object}\r\n */\r\n function getApiObject()\r\n {\r\n return api;\r\n }\r\n\r\n /**\r\n * Register API endpoint\r\n *\r\n * @param key\r\n * @param resource\r\n */\r\n function register(key, resource)\r\n {\r\n if ( !angular.isString(key) )\r\n {\r\n $log.error('\"path\" must be a string (eg. `dashboard.project`)');\r\n return;\r\n }\r\n\r\n if ( !angular.isArray(resource) )\r\n {\r\n $log.error('\"resource\" must be an array and it must follow $resource definition');\r\n return;\r\n }\r\n\r\n // Store the API object\r\n api[key] = {\r\n url : baseUrl + (resource[0] || ''),\r\n paramDefaults: resource[1] || [],\r\n actions : resource[2] || [],\r\n options : resource[3] || {}\r\n };\r\n }\r\n\r\n /* ----------------- */\r\n /* Service */\r\n /* ----------------- */\r\n this.$get = function ($log, $q, $resource, $rootScope)\r\n {\r\n // Data\r\n\r\n // Methods\r\n var service = {\r\n setBaseUrl: setBaseUrl,\r\n getBaseUrl: getBaseUrl,\r\n register : register,\r\n resolve : resolve,\r\n request : request\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Resolve an API endpoint\r\n *\r\n * @param action {string}\r\n * @param parameters {object}\r\n * @returns {promise|boolean}\r\n */\r\n function resolve(action, parameters)\r\n {\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::resolveStart');\r\n \r\n var actionParts = action.split('@'),\r\n resource = actionParts[0],\r\n method = actionParts[1],\r\n params = parameters || {};\r\n\r\n if ( !resource || !method )\r\n {\r\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\r\n return false;\r\n }\r\n\r\n // Create a new deferred object\r\n var deferred = $q.defer();\r\n\r\n // Get the correct resource definition from api object\r\n var apiObject = api[resource];\r\n\r\n if ( !apiObject )\r\n {\r\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\r\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\r\n }\r\n else\r\n {\r\n // Generate the $resource object based on the stored API object\r\n var resourceObject = $resource(apiObject.url, apiObject.paramDefaults, apiObject.actions, apiObject.options);\r\n\r\n // Make the call...\r\n resourceObject[method](params,\r\n\r\n // Success\r\n function (response)\r\n {\r\n deferred.resolve(response);\r\n\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::resolveSuccess');\r\n },\r\n\r\n // Error\r\n function (response)\r\n {\r\n deferred.reject(response);\r\n\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::resolveError');\r\n }\r\n );\r\n }\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Make a request to an API endpoint\r\n *\r\n * @param action {string}\r\n * @param [parameters] {object}\r\n * @param [success] {function}\r\n * @param [error] {function}\r\n *\r\n * @returns {promise|boolean}\r\n */\r\n function request(action, parameters, success, error)\r\n {\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::requestStart');\r\n \r\n var actionParts = action.split('@'),\r\n resource = actionParts[0],\r\n method = actionParts[1],\r\n params = parameters || {};\r\n\r\n if ( !resource || !method )\r\n {\r\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\r\n return false;\r\n }\r\n\r\n // Create a new deferred object\r\n var deferred = $q.defer();\r\n\r\n // Get the correct resource definition from api object\r\n var apiObject = api[resource];\r\n\r\n if ( !apiObject )\r\n {\r\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\r\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\r\n }\r\n else\r\n {\r\n // Generate the $resource object based on the stored API object\r\n var resourceObject = $resource(apiObject.url, apiObject.paramDefaults, apiObject.actions, apiObject.options);\r\n\r\n // Make the call...\r\n resourceObject[method](params,\r\n\r\n // SUCCESS\r\n function (response)\r\n {\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::requestSuccess');\r\n \r\n // Resolve the promise\r\n deferred.resolve(response);\r\n\r\n // Call the success function if there is one\r\n if ( angular.isDefined(success) && angular.isFunction(success) )\r\n {\r\n success(response);\r\n }\r\n },\r\n\r\n // ERROR\r\n function (response)\r\n {\r\n // Emit an event\r\n $rootScope.$broadcast('msApi::requestError');\r\n \r\n // Reject the promise\r\n deferred.reject(response);\r\n\r\n // Call the error function if there is one\r\n if ( angular.isDefined(error) && angular.isFunction(error) )\r\n {\r\n error(response);\r\n }\r\n }\r\n );\r\n }\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .factory('apiResolver', apiResolverService);\r\n\r\n /** @ngInject */\r\n function apiResolverService($q, $log, api)\r\n {\r\n var service = {\r\n resolve: resolve\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n /**\r\n * Resolve api\r\n * @param action\r\n * @param parameters\r\n */\r\n function resolve(action, parameters)\r\n {\r\n var actionParts = action.split('@'),\r\n resource = actionParts[0],\r\n method = actionParts[1],\r\n params = parameters || {};\r\n\r\n if ( !resource || !method )\r\n {\r\n $log.error('apiResolver.resolve requires correct action parameter (ResourceName@methodName)');\r\n return false;\r\n }\r\n\r\n // Create a new deferred object\r\n var deferred = $q.defer();\r\n\r\n // Get the correct api object from api service\r\n var apiObject = getApiObject(resource);\r\n\r\n if ( !apiObject )\r\n {\r\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\r\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\r\n }\r\n else\r\n {\r\n apiObject[method](params,\r\n\r\n // Success\r\n function (response)\r\n {\r\n deferred.resolve(response);\r\n },\r\n\r\n // Error\r\n function (response)\r\n {\r\n deferred.reject(response);\r\n }\r\n );\r\n }\r\n\r\n // Return the promise\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Get correct api object\r\n *\r\n * @param resource\r\n * @returns {*}\r\n */\r\n function getApiObject(resource)\r\n {\r\n // Split the resource in case if we have a dot notated object\r\n var resourceParts = resource.split('.'),\r\n apiObject = api;\r\n\r\n // Loop through the resource parts and go all the way through\r\n // the api object and return the correct one\r\n for ( var l = 0; l < resourceParts.length; l++ )\r\n {\r\n if ( angular.isUndefined(apiObject[resourceParts[l]]) )\r\n {\r\n $log.error('Resource part \"' + resourceParts[l] + '\" is not defined!');\r\n apiObject = false;\r\n break;\r\n }\r\n\r\n apiObject = apiObject[resourceParts[l]];\r\n }\r\n\r\n if ( !apiObject )\r\n {\r\n return false;\r\n }\r\n\r\n return apiObject;\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n // 'use strict';\r\n\r\n // angular\r\n // .module('app.core')\r\n // .controller('MsThemeOptionsController', MsThemeOptionsController)\r\n // .directive('msThemeOptions', msThemeOptions);\r\n\r\n // /** @ngInject */\r\n // function MsThemeOptionsController($cookies, fuseTheming)\r\n // {\r\n // var vm = this;\r\n\r\n // // Data\r\n // vm.themes = fuseTheming.themes;\r\n\r\n // vm.layoutModes = [\r\n // {\r\n // label: 'Boxed',\r\n // value: 'boxed'\r\n // },\r\n // {\r\n // label: 'Wide',\r\n // value: 'wide'\r\n // }\r\n // ];\r\n // vm.layoutStyles = [\r\n // {\r\n // label : 'Vertical Navigation',\r\n // value : 'verticalNavigation',\r\n // figure: '/assets/images/theme-options/vertical-nav.jpg'\r\n // },\r\n // {\r\n // label : 'Vertical Navigation with Fullwidth Toolbar',\r\n // value : 'verticalNavigationFullwidthToolbar',\r\n // figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar.jpg'\r\n // },\r\n // {\r\n // label : 'Vertical Navigation with Fullwidth Toolbar 2',\r\n // value : 'verticalNavigationFullwidthToolbar2',\r\n // figure: '/assets/images/theme-options/vertical-nav-with-full-toolbar-2.jpg'\r\n // },\r\n // {\r\n // label : 'Horizontal Navigation',\r\n // value : 'horizontalNavigation',\r\n // figure: '/assets/images/theme-options/horizontal-nav.jpg'\r\n // },\r\n // {\r\n // label : 'Content with Toolbar',\r\n // value : 'contentWithToolbar',\r\n // figure: '/assets/images/theme-options/content-with-toolbar.jpg'\r\n // },\r\n // {\r\n // label : 'Content Only',\r\n // value : 'contentOnly',\r\n // figure: '/assets/images/theme-options/content-only.jpg'\r\n // },\r\n // ];\r\n\r\n // vm.layoutMode = 'wide';\r\n // vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\r\n\r\n // // Methods\r\n // vm.setActiveTheme = setActiveTheme;\r\n // vm.getActiveTheme = getActiveTheme;\r\n // vm.updateLayoutMode = updateLayoutMode;\r\n // vm.updateLayoutStyle = updateLayoutStyle;\r\n\r\n // //////////\r\n\r\n // /**\r\n // * Set active theme\r\n // *\r\n // * @param themeName\r\n // */\r\n // function setActiveTheme(themeName)\r\n // {\r\n // fuseTheming.setActiveTheme(themeName);\r\n // }\r\n\r\n // /**\r\n // * Get active theme\r\n // *\r\n // * @returns {service.themes.active|{name, theme}}\r\n // */\r\n // function getActiveTheme()\r\n // {\r\n // return fuseTheming.themes.active;\r\n // }\r\n\r\n // /**\r\n // * Update layout mode\r\n // */\r\n // function updateLayoutMode()\r\n // {\r\n // var bodyEl = angular.element('body');\r\n\r\n // // Update class on body element\r\n // bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\r\n // }\r\n\r\n // /**\r\n // * Update layout style\r\n // */\r\n // function updateLayoutStyle()\r\n // {\r\n // // Update the cookie\r\n // $cookies.put('layoutStyle', vm.layoutStyle);\r\n\r\n // // Reload the page to apply the changes\r\n // location.reload();\r\n // }\r\n // }\r\n\r\n // /** @ngInject */\r\n // function msThemeOptions($mdSidenav)\r\n // {\r\n // return {\r\n // restrict : 'E',\r\n // scope : {},\r\n // controller : 'MsThemeOptionsController as vm',\r\n // templateUrl: 'app/core/theme-options/theme-options.html',\r\n // compile : function (tElement)\r\n // {\r\n // tElement.addClass('ms-theme-options');\r\n\r\n // return function postLink(scope)\r\n // {\r\n // /**\r\n // * Toggle options sidenav\r\n // */\r\n // function toggleOptionsSidenav()\r\n // {\r\n // // Toggle the fuse theme options panel\r\n // $mdSidenav('fuse-theme-options').toggle();\r\n // }\r\n\r\n // // Expose the toggle function\r\n // scope.toggleOptionsSidenav = toggleOptionsSidenav;\r\n // };\r\n // }\r\n // };\r\n // }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .filter('filterByTags', filterByTags)\r\n .filter('filterSingleByTags', filterSingleByTags);\r\n\r\n /** @ngInject */\r\n function filterByTags()\r\n {\r\n return function (items, tags)\r\n {\r\n if ( items.length === 0 || tags.length === 0 )\r\n {\r\n return items;\r\n }\r\n\r\n var filtered = [];\r\n\r\n items.forEach(function (item)\r\n {\r\n var match = tags.every(function (tag)\r\n {\r\n var tagExists = false;\r\n\r\n item.tags.forEach(function (itemTag)\r\n {\r\n if ( itemTag.name === tag.name )\r\n {\r\n tagExists = true;\r\n return;\r\n }\r\n });\r\n\r\n return tagExists;\r\n });\r\n\r\n if ( match )\r\n {\r\n filtered.push(item);\r\n }\r\n });\r\n\r\n return filtered;\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function filterSingleByTags()\r\n {\r\n return function (itemTags, tags)\r\n {\r\n if ( itemTags.length === 0 || tags.length === 0 )\r\n {\r\n return;\r\n }\r\n\r\n if ( itemTags.length < tags.length )\r\n {\r\n return [];\r\n }\r\n\r\n var filtered = [];\r\n\r\n var match = tags.every(function (tag)\r\n {\r\n var tagExists = false;\r\n\r\n itemTags.forEach(function (itemTag)\r\n {\r\n if ( itemTag.name === tag.name )\r\n {\r\n tagExists = true;\r\n return;\r\n }\r\n });\r\n\r\n return tagExists;\r\n });\r\n\r\n if ( match )\r\n {\r\n filtered.push(itemTags);\r\n }\r\n\r\n return filtered;\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .filter('filterByPropIds', filterByPropIds);\r\n\r\n /** @ngInject */\r\n function filterByPropIds()\r\n {\r\n return function (items, parameter, ids)\r\n {\r\n if ( items.length === 0 || !ids || ids.length === 0 )\r\n {\r\n return items;\r\n }\r\n\r\n var filtered = [];\r\n\r\n for ( var i = 0; i < items.length; i++ )\r\n {\r\n var item = items[i];\r\n var match = false;\r\n\r\n for ( var j = 0; j < ids.length; j++ )\r\n {\r\n var id = ids[j];\r\n if ( item[parameter].indexOf(id) > -1 )\r\n {\r\n match = true;\r\n break;\r\n }\r\n }\r\n\r\n if ( match )\r\n {\r\n filtered.push(item);\r\n }\r\n\r\n }\r\n\r\n return filtered;\r\n\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .filter('filterByIds', filterByIds);\r\n\r\n /** @ngInject */\r\n function filterByIds()\r\n {\r\n return function (items, ids)\r\n {\r\n\r\n if ( items.length === 0 || !ids )\r\n {\r\n return items;\r\n }\r\n\r\n if ( ids.length === 0 )\r\n {\r\n return [];\r\n }\r\n\r\n var filtered = [];\r\n\r\n for ( var i = 0; i < items.length; i++ )\r\n {\r\n var item = items[i];\r\n var match = false;\r\n\r\n for ( var j = 0; j < ids.length; j++ )\r\n {\r\n var id = ids[j];\r\n if ( item.id === id )\r\n {\r\n match = true;\r\n break;\r\n }\r\n }\r\n\r\n if ( match )\r\n {\r\n filtered.push(item);\r\n }\r\n\r\n }\r\n\r\n return filtered;\r\n\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .filter('toTrusted', toTrustedFilter)\r\n .filter('htmlToPlaintext', htmlToPlainTextFilter)\r\n .filter('nospace', nospaceFilter)\r\n .filter('humanizeDoc', humanizeDocFilter);\r\n\r\n /** @ngInject */\r\n function toTrustedFilter($sce)\r\n {\r\n return function (value)\r\n {\r\n return $sce.trustAsHtml(value);\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function htmlToPlainTextFilter()\r\n {\r\n return function (text)\r\n {\r\n return String(text).replace(/<[^>]+>/gm, '');\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function nospaceFilter()\r\n {\r\n return function (value)\r\n {\r\n return (!value) ? '' : value.replace(/ /g, '');\r\n };\r\n }\r\n\r\n /** @ngInject */\r\n function humanizeDocFilter()\r\n {\r\n return function (doc)\r\n {\r\n if ( !doc )\r\n {\r\n return;\r\n }\r\n if ( doc.type === 'directive' )\r\n {\r\n return doc.name.replace(/([A-Z])/g, function ($1)\r\n {\r\n return '-' + $1.toLowerCase();\r\n });\r\n }\r\n return doc.label || doc.name;\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .filter('altDate', altDate);\r\n\r\n /** @ngInject */\r\n function altDate()\r\n {\r\n return function (value)\r\n {\r\n var diff = Date.now() - new Date(value);\r\n\r\n /**\r\n * If in a hour\r\n * e.g. \"2 minutes ago\"\r\n */\r\n if ( diff < (60 * 60 * 1000) )\r\n {\r\n return moment(value).fromNow();\r\n }\r\n /*\r\n * If in the day\r\n * e.g. \"11:23\"\r\n */\r\n else if ( diff < (60 * 60 * 24 * 1000) )\r\n {\r\n return moment(value).format('HH:mm');\r\n }\r\n /*\r\n * If in week\r\n * e.g \"Tuesday\"\r\n */\r\n else if ( diff < (60 * 60 * 24 * 7 * 1000) )\r\n {\r\n return moment(value).format('dddd');\r\n }\r\n /*\r\n * If more than a week\r\n * e.g. 03/29/2016\r\n */\r\n else\r\n {\r\n return moment(value).calendar();\r\n }\r\n\r\n };\r\n }\r\n\r\n})();\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .directive('hljs', hljsDirective);\r\n\r\n /** @ngInject */\r\n function hljsDirective($timeout, $q, $interpolate) {\r\n return {\r\n restrict: 'E',\r\n compile : function (element, attr) {\r\n var code;\r\n //No attribute? code is the content\r\n if (!attr.code) {\r\n code = element.html();\r\n element.empty();\r\n }\r\n\r\n return function (scope, element, attr) {\r\n\r\n if (attr.code) {\r\n // Attribute? code is the evaluation\r\n code = scope.$eval(attr.code);\r\n }\r\n var shouldInterpolate = scope.$eval(attr.shouldInterpolate);\r\n\r\n $q.when(code).then(function (code) {\r\n if (code) {\r\n if (shouldInterpolate) {\r\n code = $interpolate(code)(scope);\r\n }\r\n var contentParent = angular.element(\r\n '
'\r\n );\r\n element.append(contentParent);\r\n // Defer highlighting 1-frame to prevent GA interference...\r\n $timeout(function () {\r\n render(code, contentParent);\r\n }, 34, false);\r\n }\r\n });\r\n\r\n function render(contents, parent) {\r\n\r\n var codeElement = parent.find('code');\r\n var lines = contents.split('\\n');\r\n\r\n // Remove empty lines\r\n lines = lines.filter(function (line) {\r\n return line.trim().length;\r\n });\r\n\r\n // Make it so each line starts at 0 whitespace\r\n var firstLineWhitespace = lines[0].match(/^\\s*/)[0];\r\n var startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\r\n lines = lines.map(function (line) {\r\n return line\r\n .replace(startingWhitespaceRegex, '')\r\n .replace(/\\s+$/, '');\r\n });\r\n\r\n var highlightedCode = hljs.highlight(attr.language || attr.lang, lines.join('\\n'), true);\r\n highlightedCode.value = highlightedCode.value\r\n .replace(/=\"\"<\\/span>/gi, '')\r\n .replace('', '')\r\n .replace('', '');\r\n codeElement.append(highlightedCode.value).addClass('highlight');\r\n }\r\n };\r\n }\r\n };\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .provider('fuseConfig', fuseConfigProvider);\r\n\r\n /** @ngInject */\r\n function fuseConfigProvider()\r\n {\r\n // Default configuration\r\n var fuseConfiguration = {\r\n 'disableCustomScrollbars' : false,\r\n 'disableMdInkRippleOnMobile' : true,\r\n 'disableCustomScrollbarsOnMobile': true\r\n };\r\n\r\n // Methods\r\n this.config = config;\r\n\r\n //////////\r\n\r\n /**\r\n * Extend default configuration with the given one\r\n *\r\n * @param configuration\r\n */\r\n function config(configuration)\r\n {\r\n fuseConfiguration = angular.extend({}, fuseConfiguration, configuration);\r\n }\r\n\r\n /**\r\n * Service\r\n */\r\n this.$get = function ()\r\n {\r\n var service = {\r\n getConfig: getConfig,\r\n setConfig: setConfig\r\n };\r\n\r\n return service;\r\n\r\n //////////\r\n\r\n /**\r\n * Returns a config value\r\n */\r\n function getConfig(configName)\r\n {\r\n if ( angular.isUndefined(fuseConfiguration[configName]) )\r\n {\r\n return false;\r\n }\r\n\r\n return fuseConfiguration[configName];\r\n }\r\n\r\n /**\r\n * Creates or updates config object\r\n *\r\n * @param configName\r\n * @param configValue\r\n */\r\n function setConfig(configName, configValue)\r\n {\r\n fuseConfiguration[configName] = configValue;\r\n }\r\n };\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.toolbar')\r\n .controller('ToolbarController', ToolbarController);\r\n\r\n /** @ngInject */\r\n function ToolbarController($rootScope, $q, $state, $timeout, $mdSidenav, $translate, $mdToast, msNavigationService, authService, api, $mdDialog, localStorageService, msg)\r\n {\r\n var vm = this;\r\n var appData = authService.getAppData();\r\n vm.user = appData.user;\r\n vm.branch = appData.branch;\r\n vm.avatarsUrl = api.baseUrl.replace(\"api/\", \"\");\r\n\r\n // Data\r\n $rootScope.global = {\r\n search: ''\r\n };\r\n\r\n vm.bodyEl = angular.element('body');\r\n vm.userStatusOptions = [\r\n {\r\n 'title': 'Online',\r\n 'icon' : 'icon-checkbox-marked-circle',\r\n 'color': '#4CAF50'\r\n },\r\n {\r\n 'title': 'Away',\r\n 'icon' : 'icon-clock',\r\n 'color': '#FFC107'\r\n },\r\n {\r\n 'title': 'Do not Disturb',\r\n 'icon' : 'icon-minus-circle',\r\n 'color': '#F44336'\r\n },\r\n {\r\n 'title': 'Invisible',\r\n 'icon' : 'icon-checkbox-blank-circle-outline',\r\n 'color': '#BDBDBD'\r\n },\r\n {\r\n 'title': 'Offline',\r\n 'icon' : 'icon-checkbox-blank-circle-outline',\r\n 'color': '#616161'\r\n }\r\n ];\r\n vm.languages = {\r\n en: {\r\n 'title' : 'English',\r\n 'translation': 'TOOLBAR.ENGLISH',\r\n 'code' : 'en',\r\n 'flag' : 'us'\r\n },\r\n es: {\r\n 'title' : 'Spanish',\r\n 'translation': 'TOOLBAR.SPANISH',\r\n 'code' : 'es',\r\n 'flag' : 'es'\r\n },\r\n tr: {\r\n 'title' : 'Turkish',\r\n 'translation': 'TOOLBAR.TURKISH',\r\n 'code' : 'tr',\r\n 'flag' : 'tr'\r\n }\r\n };\r\n\r\n // Methods\r\n vm.toggleSidenav = toggleSidenav;\r\n vm.logout = logout;\r\n vm.changeLanguage = changeLanguage;\r\n vm.setUserStatus = setUserStatus;\r\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\r\n vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\r\n vm.search = search;\r\n vm.searchResultClick = searchResultClick;\r\n vm.toggleLock = toggleLock;\r\n //////////\r\n\r\n init();\r\n\r\n /**\r\n * Initialize\r\n */\r\n function init()\r\n {\r\n // Select the first status as a default\r\n vm.userStatus = vm.userStatusOptions[0];\r\n\r\n // Get the selected language directly from angular-translate module setting\r\n vm.selectedLanguage = vm.languages[$translate.preferredLanguage()];\r\n }\r\n\r\n\r\n /**\r\n * Toggle sidenav\r\n *\r\n * @param sidenavId\r\n */\r\n function toggleSidenav(sidenavId)\r\n {\r\n $mdSidenav(sidenavId).toggle();\r\n }\r\n\r\n /**\r\n * Sets User Status\r\n * @param status\r\n */\r\n function setUserStatus(status)\r\n {\r\n vm.userStatus = status;\r\n }\r\n\r\n /**\r\n * Logout Function\r\n */\r\n function logout()\r\n {\r\n // Close Session\r\n api.app.access.close(function(){\r\n // Destroy token\r\n authService.logOut();\r\n $state.go('app.login');\r\n });\r\n }\r\n\r\n /**\r\n * Change Language\r\n */\r\n function changeLanguage(lang)\r\n {\r\n vm.selectedLanguage = lang;\r\n\r\n /**\r\n * Show temporary message if user selects a language other than English\r\n *\r\n * angular-translate module will try to load language specific json files\r\n * as soon as you change the language. And because we don't have them, there\r\n * will be a lot of errors in the page potentially breaking couple functions\r\n * of the template.\r\n *\r\n * To prevent that from happening, we added a simple \"return;\" statement at the\r\n * end of this if block. If you have all the translation files, remove this if\r\n * block and the translations should work without any problems.\r\n */\r\n if ( lang.code !== 'en' )\r\n {\r\n var message = 'Fuse supports translations through angular-translate module, but currently we do not have any translations other than English language. If you want to help us, send us a message through ThemeForest profile page.';\r\n\r\n $mdToast.show({\r\n template : '
' + message + '
',\r\n hideDelay: 7000,\r\n position : 'top right',\r\n parent : '#content'\r\n });\r\n\r\n return;\r\n }\r\n\r\n // Change the language\r\n $translate.use(lang.code);\r\n }\r\n\r\n /**\r\n * Toggle horizontal mobile menu\r\n */\r\n function toggleHorizontalMobileMenu()\r\n {\r\n vm.bodyEl.toggleClass('ms-navigation-horizontal-mobile-menu-active');\r\n }\r\n\r\n /**\r\n * Toggle msNavigation folded\r\n */\r\n function toggleMsNavigationFolded()\r\n {\r\n msNavigationService.toggleFolded();\r\n }\r\n\r\n /**\r\n * Search action\r\n *\r\n * @param query\r\n * @returns {Promise}\r\n */\r\n function search(query)\r\n {\r\n var navigation = [],\r\n flatNavigation = msNavigationService.getFlatNavigation(),\r\n deferred = $q.defer();\r\n\r\n // Iterate through the navigation array and\r\n // make sure it doesn't have any groups or\r\n // none ui-sref items\r\n for ( var x = 0; x < flatNavigation.length; x++ )\r\n {\r\n if ( flatNavigation[x].uisref )\r\n {\r\n navigation.push(flatNavigation[x]);\r\n }\r\n }\r\n\r\n // If there is a query, filter the navigation;\r\n // otherwise we will return the entire navigation\r\n // list. Not exactly a good thing to do but it's\r\n // for demo purposes.\r\n if ( query )\r\n {\r\n navigation = navigation.filter(function (item)\r\n {\r\n if ( angular.lowercase(item.title).search(angular.lowercase(query)) > -1 )\r\n {\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Fake service delay\r\n $timeout(function ()\r\n {\r\n deferred.resolve(navigation);\r\n }, 100);\r\n\r\n return deferred.promise;\r\n }\r\n\r\n /**\r\n * Search result click action\r\n *\r\n * @param item\r\n */\r\n function searchResultClick(item)\r\n {\r\n // If item has a link\r\n if ( item.uisref )\r\n {\r\n // If there are state params,\r\n // use them...\r\n if ( item.stateParams )\r\n {\r\n $state.go(item.state, item.stateParams);\r\n }\r\n else\r\n {\r\n $state.go(item.state);\r\n }\r\n }\r\n }\r\n\r\n function toggleLock(ev){\r\n if ($rootScope.isLocked){\r\n // Unlock\r\n $mdDialog.show({\r\n controller : 'LoginDialogController',\r\n controllerAs : 'vm',\r\n templateUrl : 'app/main/login/dialog-login/dialog-login.html',\r\n targetEvent : ev,\r\n escapeToClose : true,\r\n clickOutsideToClose: false,\r\n locals : {\r\n Callback : loginCallback\r\n }\r\n });\r\n }else{\r\n // Lock\r\n var appData = localStorageService.get('appData');\r\n var userAccess = appData.user.userType.access;\r\n var allAccess = appData.access; \r\n var validatedControls = allAccess.filter(function(a){ return a.isControl && window.location.href.indexOf(a.url) != -1 });\r\n if (validatedControls.length){\r\n angular.forEach(validatedControls, function(control){\r\n if (userAccess.filter(function(a){ return a.id == control.id }).length == 0){\r\n $(document).find('#' + control.controlName).attr(\"disabled\", true);\r\n }\r\n });\r\n }\r\n $rootScope.isLocked = true;\r\n\r\n msg.success(\"Se volvieron a bloquear los controles\");\r\n }\r\n }\r\n\r\n function loginCallback(controls){\r\n // Unlock Controls\r\n angular.forEach(controls, function(control){\r\n $(document).find('#' + control.controlName).attr(\"disabled\", false);\r\n });\r\n msg.success(\"Controles desbloqueados\");\r\n $rootScope.isLocked = false;\r\n }\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.quick-panel')\r\n .controller('QuickPanelController', QuickPanelController);\r\n\r\n /** @ngInject */\r\n function QuickPanelController(msApi)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.date = new Date();\r\n vm.settings = {\r\n notify: true,\r\n cloud : false,\r\n retro : true\r\n };\r\n \r\n\r\n // msApi.request('quickPanel.activities@get', {},\r\n // // Success\r\n // function (response)\r\n // {\r\n // vm.activities = response.data;\r\n // }\r\n // );\r\n\r\n // msApi.request('quickPanel.events@get', {},\r\n // // Success\r\n // function (response)\r\n // {\r\n // vm.events = response.data;\r\n // }\r\n // );\r\n\r\n // msApi.request('quickPanel.notes@get', {},\r\n // // Success\r\n // function (response)\r\n // {\r\n // vm.notes = response.data;\r\n // }\r\n // );\r\n\r\n // Methods\r\n\r\n //////////\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.navigation', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config()\r\n {\r\n \r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.navigation')\r\n .controller('NavigationController', NavigationController);\r\n\r\n /** @ngInject */\r\n function NavigationController($scope)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.bodyEl = angular.element('body');\r\n vm.folded = false;\r\n vm.msScrollOptions = {\r\n suppressScrollX: true\r\n };\r\n\r\n // Methods\r\n vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\r\n\r\n //////////\r\n\r\n /**\r\n * Toggle folded status\r\n */\r\n function toggleMsNavigationFolded()\r\n {\r\n vm.folded = !vm.folded;\r\n }\r\n\r\n // Close the mobile menu on $stateChangeSuccess\r\n $scope.$on('$stateChangeSuccess', function ()\r\n {\r\n vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\r\n });\r\n }\r\n\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .controller('MainController', MainController);\r\n\r\n /** @ngInject */\r\n function MainController($scope, $rootScope)\r\n {\r\n // Data\r\n\r\n //////////\r\n\r\n // Remove the splash screen\r\n $scope.$on('$viewContentAnimationEnded', function (event)\r\n {\r\n if ( event.targetScope.$id === $scope.$id )\r\n {\r\n $rootScope.$broadcast('msSplashScreen::remove');\r\n }\r\n });\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock(msUtils, fuseGenerator, fuseConfig)\r\n {\r\n /**\r\n * Generate extra classes based on registered themes so we\r\n * can use same colors with non-angular-material elements\r\n */\r\n fuseGenerator.generate();\r\n\r\n /**\r\n * Disable md-ink-ripple effects on mobile\r\n * if 'disableMdInkRippleOnMobile' config enabled\r\n */\r\n if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\r\n {\r\n var bodyEl = angular.element('body');\r\n bodyEl.attr('md-no-ink', true);\r\n }\r\n\r\n /**\r\n * Put isMobile() to the html as a class\r\n */\r\n if ( msUtils.isMobile() )\r\n {\r\n angular.element('html').addClass('is-mobile');\r\n }\r\n\r\n /**\r\n * Put browser information to the html as a class\r\n */\r\n var browserInfo = msUtils.detectBrowser();\r\n if ( browserInfo )\r\n {\r\n var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\r\n angular.element('html').addClass(htmlClass);\r\n }\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('app.core')\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($ariaProvider, $logProvider, msScrollConfigProvider, fuseConfigProvider)\r\n {\r\n // Enable debug logging\r\n $logProvider.debugEnabled(true);\r\n\r\n /*eslint-disable */\r\n\r\n // ng-aria configuration\r\n $ariaProvider.config({\r\n tabindex: false\r\n });\r\n\r\n // Fuse theme configurations\r\n fuseConfigProvider.config({\r\n 'disableCustomScrollbars' : false,\r\n 'disableCustomScrollbarsOnMobile': true,\r\n 'disableMdInkRippleOnMobile' : true\r\n });\r\n\r\n // msScroll configuration\r\n msScrollConfigProvider.config({\r\n wheelPropagation: true\r\n });\r\n\r\n /*eslint-enable */\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock($rootScope, $timeout, $state, authService)\r\n {\r\n // Activate loading indicator\r\n var stateChangeStartEvent = $rootScope.$on('$stateChangeStart', function ()\r\n {\r\n $rootScope.loadingProgress = true;\r\n });\r\n\r\n // De-activate loading indicator\r\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\r\n {\r\n $timeout(function ()\r\n {\r\n $rootScope.loadingProgress = false;\r\n });\r\n });\r\n\r\n // Store state in the root scope for easy access\r\n $rootScope.state = $state;\r\n\r\n // Cleanup\r\n $rootScope.$on('$destroy', function ()\r\n {\r\n stateChangeStartEvent();\r\n stateChangeSuccessEvent();\r\n });\r\n\r\n authService.fillAuthData();\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .config(routeConfig);\r\n\r\n /** @ngInject */\r\n function routeConfig($stateProvider, $urlRouterProvider, $locationProvider)\r\n {\r\n $locationProvider.html5Mode(true);\r\n\r\n $urlRouterProvider.otherwise('/');\r\n\r\n /**\r\n * Layout Style Switcher\r\n *\r\n * This code is here for demonstration purposes.\r\n * If you don't need to switch between the layout\r\n * styles like in the demo, you can set one manually by\r\n * typing the template urls into the `State definitions`\r\n * area and remove this code\r\n */\r\n // Inject $cookies\r\n var $cookies;\r\n\r\n angular.injector(['ngCookies']).invoke([\r\n '$cookies', function (_$cookies)\r\n {\r\n $cookies = _$cookies;\r\n }\r\n ]);\r\n\r\n // Get active layout\r\n var layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigationFullwidthToolbar2';\r\n\r\n var layouts = {\r\n verticalNavigation : {\r\n main : 'app/core/layouts/vertical-navigation.html',\r\n toolbar : 'app/toolbar/layouts/vertical-navigation/toolbar.html',\r\n navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\r\n },\r\n verticalNavigationFullwidthToolbar : {\r\n main : 'app/core/layouts/vertical-navigation-fullwidth-toolbar.html',\r\n toolbar : 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html',\r\n navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\r\n },\r\n verticalNavigationFullwidthToolbar2 : {\r\n main : 'app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html',\r\n toolbar : 'app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html',\r\n navigation: 'app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html'\r\n },\r\n horizontalNavigation: {\r\n main : 'app/core/layouts/horizontal-navigation.html',\r\n toolbar : 'app/toolbar/layouts/horizontal-navigation/toolbar.html',\r\n navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\r\n },\r\n contentOnly : {\r\n main : 'app/core/layouts/content-only.html',\r\n toolbar : '',\r\n navigation: ''\r\n },\r\n contentWithToolbar : {\r\n main : 'app/core/layouts/content-with-toolbar.html',\r\n toolbar : 'app/toolbar/layouts/content-with-toolbar/toolbar.html',\r\n navigation: ''\r\n }\r\n };\r\n // END - Layout Style Switcher\r\n\r\n // State definitions\r\n $stateProvider\r\n .state('app', {\r\n abstract: true,\r\n views : {\r\n 'main@' : {\r\n templateUrl: layouts[layoutStyle].main,\r\n controller : 'MainController as vm'\r\n },\r\n 'toolbar@app' : {\r\n templateUrl: layouts[layoutStyle].toolbar,\r\n controller : 'ToolbarController as vm'\r\n },\r\n 'navigation@app': {\r\n templateUrl: layouts[layoutStyle].navigation,\r\n controller : 'NavigationController as vm'\r\n },\r\n 'quickPanel@app': {\r\n templateUrl: 'app/quick-panel/quick-panel.html',\r\n controller : 'QuickPanelController as vm'\r\n }\r\n }\r\n });\r\n }\r\n\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .controller('IndexController', IndexController);\r\n\r\n /** @ngInject */\r\n function IndexController(fuseTheming)\r\n {\r\n var vm = this;\r\n\r\n // Data\r\n vm.themes = fuseTheming.themes;\r\n\r\n //////////\r\n }\r\n})();\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .constant(\"CONST_DATATABLES\", {\r\n \"OPTIONS\": {\r\n // dom : 'rt<\"bottom\"<\"left\"<\"length\"l>><\"right\"<\"info\"i><\"pagination\"p>>>',\r\n pagingType : 'simple_numbers',\r\n lengthChange : false,\r\n pageLength : 10,\r\n // scrollY : 'auto',\r\n responsive : true,\r\n filter: false,\r\n language: {\r\n \"lengthMenu\": \"Mostrando _MENU_ registros por página\",\r\n \"zeroRecords\": \"No hay registros encontrados\",\r\n \"info\": \"Pagina _PAGE_ de _PAGES_\",\r\n \"infoEmpty\": \"No se encontraron registros\",\r\n \"infoFiltered\": \"(Filtrados de _MAX_ elementos totales)\",\r\n \"search\": \"Buscar\", \r\n \"paginate\": {\r\n \"first\": \"Primera\",\r\n \"last\": \"Ultima\",\r\n \"next\": \"Siguiente\",\r\n \"previous\": \"Anterior\"\r\n },\r\n },\r\n // initComplete: function ()\r\n // {\r\n // var api = this.api(),\r\n // searchBox = angular.element(this).find('#keyword-search');\r\n\r\n // // Bind an external input as a table wide search box\r\n // if ( searchBox.length > 0 )\r\n // {\r\n // searchBox.on('keyup', function (event)\r\n // {\r\n // api.search(event.target.value).draw();\r\n // });\r\n // }\r\n // },\r\n }\r\n });\r\n})();\r\n\n(function ()\r\n{\r\n 'use strict';\r\n\r\n angular\r\n .module('fuse')\r\n .factory('interceptors', interceptorsFactory)\r\n .config(config)\r\n .config(treeViewConfig)\r\n .config(mdDateConfig)\r\n .config(['uiMask.ConfigProvider', maskConfig]);\r\n\r\n function config($translateProvider, $httpProvider, $mdDateLocaleProvider, ivhTreeviewOptionsProvider){\r\n // Put your common app configurations here\r\n\r\n // angular-translate configuration\r\n // $translateProvider.useLoader('$translatePartialLoader', {\r\n // urlTemplate: '{part}/i18n/{lang}.json'\r\n // });\r\n $translateProvider.preferredLanguage('en');\r\n $translateProvider.useSanitizeValueStrategy('sanitize');\r\n\r\n $httpProvider.interceptors.push('interceptors');\r\n }\r\n\r\n function treeViewConfig(ivhTreeviewOptionsProvider){\r\n ivhTreeviewOptionsProvider.set({\r\n defaultSelectedState: false,\r\n validate: true,\r\n expandToDepth: -1,\r\n twistieCollapsedTpl: '',\r\n twistieExpandedTpl: '',\r\n twistieLeafTpl: '  '\r\n });\r\n }\r\n\r\n function mdDateConfig($mdDateLocaleProvider){\r\n $mdDateLocaleProvider.formatDate = function(date) { \r\n if (date !== null) {\r\n return moment(date).locale(\"es\").format(\"DD/MM/YYYY\");\r\n }\r\n };\r\n $mdDateLocaleProvider.parseDate = function(dateString) {\r\n var m = moment(dateString, 'DD/MM/YYYY', true);\r\n return m.isValid() ? m.toDate() : new Date(NaN);\r\n };\r\n }\r\n\r\n function maskConfig(uiMaskConfigProvider){\r\n uiMaskConfigProvider.clearOnBlur(true);\r\n uiMaskConfigProvider.addDefaultPlaceholder(false); \r\n }\r\n\r\n function interceptorsFactory($q, localStorageService, $location, msNavigationService, $rootScope, $window) {\r\n return {\r\n request: function (config) { \r\n config.headers = config.headers || {};\r\n \r\n var appData = localStorageService.get('appData');\r\n if (config.method.toLowerCase() == 'get' && config.url.indexOf(\"app/main\") != -1){\r\n // When request is from change page in app\r\n // Delete not access menu\r\n if (!appData)\r\n return config;\r\n var menu = appData.access;\r\n \r\n if (appData.user.userType)\r\n {\r\n var userAccess = appData.user.userType.access;\r\n angular.forEach(menu, function(access) {\r\n if (access.isMenu){\r\n // Si es menu y no tiene ningun submenu permitido\r\n if (userAccess.filter(function(a){ return a.fatherAccessId == access.id }).length == 0)\r\n msNavigationService.deleteItem(access.navigationPath);\r\n }else {\r\n // Si es submenu y no tiene acceso permitido\r\n if (userAccess.filter(function(a){ return a.name == access.name }).length == 0)\r\n msNavigationService.deleteItem(access.navigationPath);\r\n }\r\n });\r\n }\r\n }else if (config.url.indexOf(\"app\") == -1){\r\n // When the request is to Api service\r\n var authData = localStorageService.get('authorizationData'); \r\n if (authData) {\r\n \r\n config.headers.Authorization = 'Bearer ' + authData.token;\r\n\r\n if (appData && appData.branch)\r\n config.headers.BranchId = appData.branch.id;\r\n }\r\n \r\n if (config.data && config.url.indexOf('token') == -1)\r\n config.data = JSON.stringify(config.data);\r\n }\r\n\r\n return config;\r\n },\r\n responseError: function (response) {\r\n var error = '';\r\n switch (response.status) {\r\n case 401: // Unauthorize\r\n alert('No esta autorizado para esta operación');\r\n $location.path('/');\r\n return;\r\n case 400: // Bad Request\r\n if (response.data.modelState){\r\n error = '
    ';\r\n for (var key in response.data.modelState) {\r\n for (var i = 0; i < response.data.modelState[key].length; i++) {\r\n error += '
  • ' + response.data.modelState[key][i] + '
  • ';\r\n }\r\n }\r\n error += '
';\r\n }else if (response.data.message)\r\n error = response.data.message;\r\n else if(response.data.error && response.data.error == 'validation_ex'){\r\n error = response.data.error_description;\r\n }else if (response.data != ''){\r\n error = response.data; \r\n }\r\n break;\r\n case 404: // Not Found\r\n error = 'Recurso no encontrado';\r\n break;\r\n case 500: // Internal server Error\r\n if (response.data && response.data.exceptionType && response.data.exceptionType.indexOf(\"AppValidationException\") != -1)\r\n error = response.data.exceptionMessage;\r\n break;\r\n case -1:\r\n error = \"Error de conexion, por favor reintente, si el problema persiste comuniquese con el administrador.\" \r\n break;\r\n }\r\n if (error && error != '') {\r\n showError(error);\r\n } else if(response.status != '-1') {\r\n console.log('ERROR NO DEFINIDO!!!!');\r\n console.log(response);\r\n showError('Comunicate con el administrador');\r\n }\r\n\r\n return $q.reject(response);\r\n },\r\n response: function(response){\r\n if (response.config.method.toLowerCase() == 'get' && \r\n response.config.url.indexOf(\"app/main\") != -1 && \r\n response.config.url.indexOf(\"app/main/login\") == -1 && // Except Login\r\n response.config.url.indexOf(\"app/main/license\") == -1 // Except License\r\n ){\r\n $rootScope.isLocked = true;\r\n var content = $(response.data);\r\n var appData = localStorageService.get('appData');\r\n var userAccess = appData.user.userType.access;\r\n var allAccess = appData.access; \r\n \r\n if (!allAccess || allAccess.length == 0)\r\n window.location.href = \"/\"; \r\n // $window.location.reload();\r\n \r\n var validatedControls = [];\r\n validatedControls = allAccess.filter(function(a){ return a.isControl && response.config.url.indexOf(a.navigationPath) != -1 });\r\n if (validatedControls.length > 0){\r\n angular.forEach(validatedControls, function(control){\r\n if (userAccess.filter(function(a){ return a.id == control.id }).length == 0){\r\n //content.find('#' + control.controlName).remove();\r\n content.find('#' + control.controlName).attr(\"disabled\", true);\r\n }\r\n });\r\n response.data = content.get(0).outerHTML;\r\n }\r\n }\r\n \r\n return response;\r\n }\r\n }; \r\n }\r\n \r\n function showError(message){\r\n console.log(message);\r\n var message = $('
' + message + '
');\r\n $('body').append(message);\r\n message.show();\r\n setTimeout(function(){\r\n message.remove()\r\n }, 4000);\r\n }\r\n})();\n/* eslint-disable comma-dangle */\r\n(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"fuse\").factory(\"api\", apiService);\r\n\r\n /** @ngInject */\r\n function apiService($resource) {\r\n var api = {};\r\n\r\n // Base Url\r\n // api.baseUrl = \"http://localhost:8000/api/\";\r\n // api.baseUrl = \"https://api.kalaclub.net/api/\";\r\n // api.baseUrl = \"https://api.altea.club/api/\";\r\n // api.baseUrl = \"https://api.operactive.club/api/\";\r\n // api.baseUrl = \"https://api.hazegym.club/api/\";\r\n api.baseUrl = \"https://api.omada.city/api/\";\r\n // api.baseUrl = \"https://api.urban-fitness.club/api/\";\r\n\r\n api.catalogs = {\r\n branches: $resource(api.baseUrl + \"Branches/:id\", { id: \"@id\" }),\r\n clubAccess: $resource(\r\n api.baseUrl + \"ClubAccess/:id\",\r\n { id: \"@id\" },\r\n {\r\n getAll: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"ClubAccessAll/1\",\r\n isArray: true\r\n }\r\n }\r\n ),\r\n media: $resource(api.baseUrl + \"Media/:id\", { id: \"@id\" }),\r\n countries: $resource(api.baseUrl + \"Countries/:id\", { id: \"@id\" }),\r\n professions: $resource(api.baseUrl + \"Professions/:id\", { id: \"@id\" }),\r\n addressTypes: $resource(api.baseUrl + \"AddressTypes/:id\", { id: \"@id\" }),\r\n activities: $resource(api.baseUrl + \"Activities/:id\", { id: \"@id\" }),\r\n employees: $resource(api.baseUrl + \"Employees/:id\", { id: \"@id\" }),\r\n employeeTypes: $resource(api.baseUrl + \"EmployeeTypes/:id\", {\r\n id: \"@id\",\r\n }),\r\n partnerTypes: $resource(api.baseUrl + \"PartnerTypes/:id\", { id: \"@id\" }),\r\n productTypes: $resource(api.baseUrl + \"ProductTypes/:id\", { id: \"@id\" }),\r\n productProperties: $resource(api.baseUrl + \"ProductProperties/:id\", {\r\n id: \"@id\",\r\n }),\r\n productPropertyOptions: $resource(\r\n api.baseUrl + \"ProductPropertyOptions/:propertyId\",\r\n { propertyId: \"@propertyId\" },\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n products: $resource(\r\n api.baseUrl + \"Products/:id\",\r\n { id: \"@id\" },\r\n {\r\n getByCode: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"Products/:id/:code\",\r\n },\r\n // save: { method: 'POST', url: api.baseUrl + 'Products' },\r\n }\r\n ),\r\n templates: $resource(api.baseUrl + \"Templates/:productTypeId\", {\r\n productTypeId: \"@productTypeId\",\r\n }),\r\n massiveTemplates: $resource(\r\n api.baseUrl + \"MassiveTemplates/:productTypeId\",\r\n { productTypeId: \"@productTypeId\" }\r\n ),\r\n massiveProducts: $resource(api.baseUrl + \"MassiveProducts\", {}),\r\n periodicities: $resource(api.baseUrl + \"Periodicities\", {}),\r\n dues: $resource(api.baseUrl + \"Dues/:id\", { id: \"@id\" }),\r\n duePrices: $resource(\r\n api.baseUrl + \"DuePrices/:dueId/:searchType/:searchId\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n }\r\n ),\r\n agreements: $resource(api.baseUrl + \"Agreements/:id\", { id: \"@id\" }),\r\n genders: $resource(api.baseUrl + \"Genders/:id\", { id: \"@id\" }),\r\n rentableZones: $resource(api.baseUrl + \"RentableZones/:id\", {\r\n id: \"@id\",\r\n }),\r\n rentableZonePrices: $resource(\r\n api.baseUrl + \"RentableZonePrices/:rentableZoneId/:groupId\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n }\r\n ),\r\n activitiesSchedules: $resource(\r\n api.baseUrl + \"ActivitiesSchedules\",\r\n {},\r\n {\r\n query: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"ActivitiesSchedules/:activityId\",\r\n },\r\n }\r\n ),\r\n banks: $resource(api.baseUrl + \"Banks/:id\", { id: \"@id\" }),\r\n tpvs: $resource(api.baseUrl + \"Tpvs/:id\", { id: \"@id\" }),\r\n levels: $resource(api.baseUrl + \"Levels/:id\", { id: \"@id\" }),\r\n levelScores: $resource(api.baseUrl + \"LevelScores/:id\", { id: \"@id\" }),\r\n paymentMethods: $resource(api.baseUrl + \"PaymentMethods/:id\", {\r\n id: \"@id\",\r\n }),\r\n paymentMethodOptions: $resource(\r\n api.baseUrl + \"PaymentMethodOptions/:id\",\r\n { id: \"@id\" }\r\n ),\r\n satCodeTypes: $resource(api.baseUrl + \"SatCodeTypes/:id\", { id: \"@id\" }),\r\n satCodes: $resource(api.baseUrl + \"SatCodes/:id\", { id: \"@id\" }),\r\n satCfdiUsesRegimenFiscal: $resource(\r\n api.baseUrl + \"SatCfdiUsesRegimenFiscal/:id\",\r\n { id: \"@id\" },\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n evaluations: $resource(api.baseUrl + \"Evaluations/:id\", { id: \"@id\" }),\r\n becas: $resource(api.baseUrl + \"Becas/:id\", { id: \"@id\" }),\r\n calculationModes: $resource(api.baseUrl + \"CalculationModes/:id\", {\r\n id: \"@id\",\r\n }),\r\n warehouses: $resource(api.baseUrl + \"Warehouses/:id\", { id: \"@id\" }),\r\n accessTimeZones: $resource(\r\n api.baseUrl + \"AccessTimeZones/:id\",\r\n { id: \"@id\" },\r\n {\r\n getAll: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"ClubAccessAll/2\",\r\n isArray: true,\r\n },\r\n }\r\n ),\r\n employeeCalendarEvents: $resource(\r\n api.baseUrl + \"EmployeeCalendarEvents/:id\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n getByProspect: {\r\n isArray: true,\r\n url: api.baseUrl + \"EmployeeCalendarEvents/:id/:prospectId\",\r\n },\r\n }\r\n ),\r\n zones: $resource(api.baseUrl + \"Zones/:id\", { id: \"@id\" }),\r\n activitiesSchedulesZones: $resource(\r\n api.baseUrl + \"ActivitiesSchedulesZones/:scheduleId\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n }\r\n ),\r\n passTypes: $resource(api.baseUrl + \"PassTypes/:id\", { id: \"@id\" }),\r\n passes: $resource(\r\n api.baseUrl + \"Passes/:id\",\r\n { id: \"@id\" },\r\n {\r\n massiveDelete: {\r\n method: \"DELETE\",\r\n url: api.baseUrl + \"Passes/:initNumber/:endNumber\",\r\n },\r\n }\r\n ),\r\n duesRules: $resource(\r\n api.baseUrl + \"DuesRules/:id\",\r\n { id: \"@id\" },\r\n {\r\n checkByPartnerId: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n conceptosNotaCredito: $resource(\r\n api.baseUrl + \"ConceptosNotaCredito/:id\",\r\n {}\r\n ),\r\n files: $resource(\r\n api.baseUrl + \"Files\",\r\n {},\r\n {\r\n getFile: { method: \"PUT\", isArray: false },\r\n }\r\n ),\r\n accounts: $resource(\r\n api.baseUrl + \"accounts/:id\",\r\n { id: \"@id\" }\r\n )\r\n };\r\n\r\n api.partners = {\r\n partners: $resource(\r\n api.baseUrl + \"Partners/:id\",\r\n { id: \"@id\" },\r\n {\r\n getByFamily: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Partners/:id/:familyId\",\r\n },\r\n getByFilters: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Partners/:keyword/:pageNumber/:pageSize\"\r\n },\r\n getByFiltersPaginated: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"Partners/paginated/:keyword/:pageNumber/:pageSize/:showFamiliars\"\r\n }\r\n // getByKardex : { method: 'GET', isArray: true, url: api.baseUrl + 'Partners/:id/:dummy1/:dummy2/:dummy3' },\r\n }\r\n ),\r\n family: $resource(\r\n api.baseUrl + \"PartnersFamily/:partnerId\",\r\n { partnerId: \"@partnerId\" },\r\n {\r\n get: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"PartnersFamily/:partnerId/:id\",\r\n },\r\n }\r\n ),\r\n addresses: $resource(\r\n api.baseUrl + \"PartnerAddresses/:partnerId\",\r\n { partnerId: \"@partnerId\" },\r\n {\r\n save: { method: \"POST\", url: api.baseUrl + \"PartnerAddresses/:id\" },\r\n }\r\n ),\r\n absences: $resource(\r\n api.baseUrl + \"PartnerAbsences\",\r\n {},\r\n {\r\n query: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerAbsences/:familyId\",\r\n },\r\n save: { method: \"POST\", url: api.baseUrl + \"PartnerAbsences\" },\r\n }\r\n ),\r\n levels: $resource(\r\n api.baseUrl + \"PartnerLevels\",\r\n {},\r\n {\r\n query: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerLevels/:familyId\",\r\n },\r\n save: { method: \"POST\", url: api.baseUrl + \"PartnerLevels\" },\r\n }\r\n ),\r\n rentables: $resource(\r\n api.baseUrl + \"PartnerRentables/:id\",\r\n { id: \"@id\" },\r\n {\r\n query: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerRentables/:familyId\",\r\n },\r\n save: { method: \"POST\", url: api.baseUrl + \"PartnerRentables\" },\r\n getByRentableZone: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerRentables/:familyId/:rentableZoneId\",\r\n },\r\n delete: {\r\n method: \"DELETE\",\r\n url: api.baseUrl + \"PartnerRentables/:id\",\r\n },\r\n }\r\n ),\r\n automaticPayment: $resource(\r\n api.baseUrl + \"PartnerAutomaticPayments/:id\",\r\n { id: \"@id\" }\r\n ),\r\n becas: $resource(\r\n api.baseUrl + \"PartnerBecas\",\r\n {},\r\n {\r\n query: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerBecas/:familyId\",\r\n },\r\n }\r\n ),\r\n changeDates: $resource(api.baseUrl + \"PartnerChangeDates\", {}),\r\n prospects: $resource(api.baseUrl + \"Prospects/:id\", {}),\r\n prospectComments: $resource(api.baseUrl + \"ProspectComments/:id\", {}),\r\n periodicalProducts: $resource(\r\n api.baseUrl + \"PartnerPeriodicalProducts/:id\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n activities: $resource(\r\n api.baseUrl + \"PartnerActivitiesSchedules/:familyId\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n verify: {\r\n method: \"GET\",\r\n isArray: true,\r\n url:\r\n api.baseUrl +\r\n \"PartnerActivitiesSchedules/:id/:activityScheduleZoneId\",\r\n },\r\n }\r\n ),\r\n info: $resource(\r\n api.baseUrl + \"PartnersInfo/:filterType/:keyword\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n messages: $resource(\r\n api.baseUrl + \"PartnerMessages/:id\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n getByFamily: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerMessages/:familyId/dummy\",\r\n },\r\n }\r\n ),\r\n passes: $resource(\r\n api.baseUrl + \"PartnerPasses/:id\",\r\n { id: \"@id\" },\r\n {\r\n getById: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"PartnerPasses/:id\",\r\n },\r\n get: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"PartnerPasses/:familyId/:from/:to\",\r\n },\r\n checkPassNumber: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"PartnerPasses/:familyId/:passNumber\",\r\n },\r\n delete: { method: \"DELETE\", url: api.baseUrl + \"PartnerPasses/:id\" },\r\n }\r\n ),\r\n accessTimeZones: $resource(\r\n api.baseUrl + \"PartnerClubAccessTimeZones/:id\",\r\n { id: \"@id\" }\r\n ),\r\n passesFiles: $resource(\r\n api.baseUrl + \"PartnerPassesFiles\",\r\n {},\r\n {\r\n sendMail: { method: \"PUT\", isArray: false },\r\n }\r\n ),\r\n credentialFiles: $resource(\r\n api.baseUrl + \"PartnerCredentialFiles\",\r\n {},\r\n {\r\n sendMail: { method: \"PUT\", isArray: false },\r\n }\r\n ),\r\n contracts: $resource(\r\n api.baseUrl + \"PartnerContracts/:id\",\r\n {},\r\n {\r\n getContract: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"PartnerContracts/:id/:isLastData\",\r\n isArray: false,\r\n },\r\n }\r\n ),\r\n emails: $resource(api.baseUrl + \"PartnerEmails\", {}),\r\n };\r\n\r\n api.security = {\r\n users: $resource(\r\n api.baseUrl + \"Users\",\r\n {},\r\n {\r\n getByUsername: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"Users/:id/:username\",\r\n isArray: false,\r\n },\r\n query: { method: \"GET\", url: api.baseUrl + \"Users\", isArray: true },\r\n get: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"Users/:id\",\r\n isArray: false,\r\n },\r\n save: { method: \"POST\", url: api.baseUrl + \"Users\" },\r\n delete: { method: \"DELETE\", url: api.baseUrl + \"Users/:id\" },\r\n change: { method: \"PUT\", url: api.baseUrl + \"Users\" },\r\n }\r\n ),\r\n roles: $resource(api.baseUrl + \"Roles/:id\", { id: \"@id\" }),\r\n access: $resource(api.baseUrl + \"Access/:id\", { id: \"@id\" }),\r\n userTypes: $resource(api.baseUrl + \"UserTypes/:id\", { id: \"@id\" }),\r\n controlsAccess: $resource(\r\n api.baseUrl + \"ControlsAccess\",\r\n {},\r\n {\r\n login: { method: \"POST\", isArray: true },\r\n }\r\n ),\r\n };\r\n\r\n api.invoices = {\r\n calculation: $resource(\r\n \"\",\r\n {},\r\n {\r\n check: {\r\n method: \"GET\",\r\n url: api.baseUrl + \"Calculation/:partnerId/:calculationDate\",\r\n isArray: true,\r\n },\r\n calculate: {\r\n method: \"POST\",\r\n url: api.baseUrl + \"Calculation\",\r\n isArray: true,\r\n },\r\n }\r\n ),\r\n orders: $resource(\r\n api.baseUrl + \"Orders\",\r\n {},\r\n {\r\n save: { method: \"POST\", isArray: false },\r\n get: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"Orders/:id\",\r\n },\r\n getByPeriod: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Orders/:from/:to\",\r\n },\r\n getByPartner: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Orders/:from/:to/:partnerId\",\r\n },\r\n cancel: { method: \"DELETE\", url: api.baseUrl + \"Orders/:id\" },\r\n }\r\n ),\r\n invoices: $resource(\r\n api.baseUrl + \"Invoices/:id\",\r\n {},\r\n {\r\n getByPeriod: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Invoices/:from/:to\",\r\n },\r\n getByPartner: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Invoices/:from/:to/:partnerId\",\r\n },\r\n getByFolio: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"Invoices/:serie/:folio/0/0\",\r\n },\r\n delete: {\r\n method: \"DELETE\",\r\n url:\r\n api.baseUrl +\r\n \"Invoices/:id/:invoiceCancellationReasonId/:UuidReference\",\r\n },\r\n }\r\n ),\r\n invoicesOrders: $resource(\r\n api.baseUrl + \"InvoicesOrders\",\r\n {},\r\n {\r\n get: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"InvoicesOrders\",\r\n },\r\n }\r\n ),\r\n turns: $resource(\r\n api.baseUrl + \"Turns/:dateIni/:dateEnd\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n plannedProducts: $resource(\r\n api.baseUrl + \"PlannedProducts/:id\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true },\r\n }\r\n ),\r\n generate: $resource(api.baseUrl + \"InvoiceGenerate\", {}),\r\n notasCredito: $resource(\r\n api.baseUrl + \"NotasCredito/:from/:to\",\r\n {},\r\n {\r\n get: { method: \"GET\", isArray: true }\r\n }\r\n ),\r\n pdf: $resource(api.baseUrl + \"Pdf\", {}),\r\n email: $resource(api.baseUrl + \"Email\", {}),\r\n complements: $resource(\r\n api.baseUrl + \"Complements\",\r\n {},\r\n {\r\n save: { method: \"POST\", isArray: false },\r\n get: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Complements/:id\"\r\n },\r\n getReceipt: {\r\n method: \"GET\",\r\n isArray: false,\r\n url: api.baseUrl + \"Complements/:id/receipt\"\r\n },\r\n getByPeriod: {\r\n method: \"GET\",\r\n isArray: true,\r\n url: api.baseUrl + \"Complements/:from/:to/:includeCompletePayed\"\r\n },\r\n cancel: { method: \"DELETE\", url: api.baseUrl + \"Complements/:id\" }\r\n }\r\n ),\r\n };\r\n\r\n api.inventory = {\r\n inventory: $resource(api.baseUrl + \"Inventory/:id\", {}),\r\n products: $resource(api.baseUrl + \"InventoryProducts/:code\", {})\r\n };\r\n\r\n api.sat = {\r\n cfdiUses: $resource(api.baseUrl + \"SatCfdiUses/:id\", {}),\r\n coins: $resource(api.baseUrl + \"SatCoins/:id\", {}),\r\n invoiceTypes: $resource(api.baseUrl + \"SatInvoiceTypes/:id\", {}),\r\n paymentMethods: $resource(api.baseUrl + \"SatPaymentMethods/:id\", {}),\r\n payments: $resource(api.baseUrl + \"SatPayments/:id\", {}),\r\n products: $resource(\r\n api.baseUrl + \"SatProducts/:id\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n }\r\n ),\r\n taxes: $resource(api.baseUrl + \"SatTaxes/:id\", {}),\r\n taxTypes: $resource(api.baseUrl + \"SatTaxTypes/:id\", {}),\r\n units: $resource(\r\n api.baseUrl + \"SatUnits/:id\",\r\n {},\r\n {\r\n get: { isArray: true },\r\n }\r\n ),\r\n zipCodes: $resource(api.baseUrl + \"SatZipCodes/:zipcode\", {}),\r\n regimenFiscales: $resource(api.baseUrl + \"SatRegimenFiscales/:id\", {}),\r\n banks: $resource(api.baseUrl + \"SatBanks/:id\", {}),\r\n cadenas: $resource(api.baseUrl + \"SatCadenas/:id\", {}),\r\n cfdiRelacionado: $resource(api.baseUrl + \"SatCfdiRelacionado/:id\", {}),\r\n catInvoiceCancellationReasons: $resource(\r\n api.baseUrl + \"catInvoiceCancellationReason/:id\",\r\n {}\r\n ),\r\n };\r\n\r\n api.accionistas = {\r\n acciones: $resource(api.baseUrl + \"Acciones/:id\", {}),\r\n accionistas: $resource(api.baseUrl + \"Accionistas/:id\", {}),\r\n transfers: $resource(api.baseUrl + \"AccionesTransfers\", {}),\r\n };\r\n\r\n api.app = {\r\n access: $resource(\r\n api.baseUrl + \"AppAccess\",\r\n {},\r\n {\r\n request: { method: \"GET\" },\r\n addLicense: { method: \"POST\" },\r\n license: { method: \"PUT\" },\r\n close: { method: \"DELETE\" },\r\n closeSession: {\r\n method: \"DELETE\",\r\n url: api.baseUrl + \"AppAccess/:contrasena\",\r\n },\r\n }\r\n ),\r\n };\r\n\r\n api.reports = {\r\n reports: $resource(\r\n api.baseUrl + \"Reports\",\r\n {},\r\n {\r\n generate: { method: \"POST\", isArray: true },\r\n }\r\n ),\r\n groups: $resource(api.baseUrl + \"ReportGroups\", {}),\r\n dashboard: $resource(\r\n api.baseUrl + \"Dashboard\",\r\n {},\r\n {\r\n population: { url: api.baseUrl + \"dashboard/population\", method: \"GET\", isArray: true },\r\n debts: { url: api.baseUrl + \"dashboard/debts\", method: \"GET\", isArray: true },\r\n age: { url: api.baseUrl + \"dashboard/age\", method: \"GET\", isArray: true },\r\n gender: { url: api.baseUrl + \"dashboard/gender\", method: \"GET\", isArray: true },\r\n inscriptions: { url: api.baseUrl + \"dashboard/inscriptions\", method: \"GET\", isArray: true },\r\n inscriptionsbyweek: { url: api.baseUrl + \"dashboard/inscriptionsbyweek\", method: \"GET\", isArray: true },\r\n sales: { url: api.baseUrl + \"dashboard/sales\", method: \"GET\", isArray: true },\r\n salestop: { url: api.baseUrl + \"dashboard/salestop\", method: \"GET\", isArray: true },\r\n salesbytype: { url: api.baseUrl + \"dashboard/salesbytype\", method: \"GET\", isArray: true },\r\n salestopbytype: { url: api.baseUrl + \"dashboard/salestopbytype\", method: \"GET\", isArray: true },\r\n salesyear: { url: api.baseUrl + \"dashboard/salesyear\", method: \"GET\", isArray: true },\r\n salesyearbytype: { url: api.baseUrl + \"dashboard/salesyearbytype\", method: \"GET\", isArray: true },\r\n }\r\n )\r\n };\r\n\r\n return api;\r\n }\r\n})();\r\n\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.security.users', [\r\n 'ivh.treeview', \r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.security.users', {\r\n url : '/users',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/users/users/users.html',\r\n controller : 'SecurityUsersController as vm'\r\n }\r\n }\r\n })\r\n .state('app.security.users.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/users/user/user.html',\r\n controller : 'SecurityUserController as vm'\r\n }\r\n },\r\n resolve : {\r\n User: function ()\r\n {\r\n return { id: 0, name: '', active: true, access: [] };\r\n },\r\n UserTypes: function(apiResolver){\r\n return apiResolver.resolve('security.userTypes@query');\r\n },\r\n Branches: function(apiResolver){\r\n return apiResolver.resolve('catalogs.branches@query');\r\n }\r\n },\r\n })\r\n .state('app.security.users.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/users/user/user.html',\r\n controller : 'SecurityUserController as vm'\r\n }\r\n },\r\n resolve : {\r\n User: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('security.users@get', { id: $stateParams.id });\r\n },\r\n UserTypes: function(apiResolver){\r\n return apiResolver.resolve('security.userTypes@query');\r\n },\r\n Branches: function(apiResolver){\r\n return apiResolver.resolve('catalogs.branches@query');\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.security.users', {\r\n title: 'Usuarios',\r\n state: 'app.security.users'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.security.branches', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.security.branches', {\r\n url : '/branches',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/branches/branches/branches.html',\r\n controller : 'SecurityBranchesController as vm'\r\n }\r\n }\r\n })\r\n .state('app.security.branches.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/branches/branch/branch.html',\r\n controller : 'SecurityBranchController as vm'\r\n }\r\n },\r\n resolve : {\r\n Branch: function ()\r\n {\r\n return { id: 0, name: '', active: true, setting: { interes: 10, daysOfGrace: 10, discountType: 2 } };\r\n },\r\n Warehouses: function(apiResolver){\r\n return apiResolver.resolve('catalogs.warehouses@query');\r\n }\r\n },\r\n })\r\n .state('app.security.branches.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/security/views/branches/branch/branch.html',\r\n controller : 'SecurityBranchController as vm'\r\n }\r\n },\r\n resolve : {\r\n Branch: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.branches@get', { id: $stateParams.id });\r\n },\r\n Warehouses: function(apiResolver){\r\n return apiResolver.resolve('catalogs.warehouses@query');\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.security.branches', {\r\n title: 'Sucursales',\r\n state: 'app.security.branches'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.turns', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.turns', {\r\n url : '/turns',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/turns/turns.html',\r\n controller : 'InvoicesTurnsController as vm'\r\n }\r\n },\r\n resolve : {\r\n Turns: function (apiResolver)\r\n {\r\n return apiResolver.resolve('invoices.turns@query');\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.turns', {\r\n title: 'Turnos',\r\n shortcuticon : 'icon-repeat', \r\n state: 'app.invoices.turns'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.invoices.plannedProducts', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.invoices.plannedProducts', {\r\n url : '/plannedProducts',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/invoices/views/plannedProducts/plannedProducts.html',\r\n controller : 'InvoicesPlannedProductsController as vm'\r\n }\r\n },\r\n resolve: {\r\n PlannedProducts: function(apiResolver){\r\n return apiResolver.resolve('invoices.plannedProducts@query');\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.invoices.plannedProducts', {\r\n title: 'Cargos planificados',\r\n state: 'app.invoices.plannedProducts'\r\n });\r\n }\r\n})();\n\r\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.zones', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.zones', {\r\n url : '/zones',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/zones/zones.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.zones', {\r\n title: 'Ubicaciones de club',\r\n state: 'app.catalogs.zones'\r\n });\r\n }\r\n})();\n\r\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.warehouses', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.warehouses', {\r\n url : '/warehouses',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/warehouses/warehouses.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.warehouses', {\r\n title: 'Almacenes',\r\n state: 'app.catalogs.warehouses'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.tpvs', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.tpvs', {\r\n url : '/tpvs',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/tpvs/tpvs.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.tpvs', {\r\n title: \"TPV's\",\r\n state: 'app.catalogs.tpvs'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.satCodes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.satCodes', {\r\n url : '/satCodes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/satCodes/satCodes.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.satCodes', {\r\n title: 'Códigos del SAT',\r\n state: 'app.catalogs.satCodes'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.professions', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.professions', {\r\n url : '/professions',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/professions/professions.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.professions', {\r\n title: 'Profesiones',\r\n state: 'app.catalogs.professions'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.paymentMethods', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.paymentMethods', {\r\n url : '/paymentMethods',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/paymentMethods/paymentMethods.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.paymentMethods', {\r\n title: 'Formas de pago',\r\n state: 'app.catalogs.paymentMethods'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.paymentMethodOptions', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.paymentMethodOptions', {\r\n url : '/paymentMethodOptions',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/paymentMethodOptions/paymentMethodOptions.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.paymentMethodOptions', {\r\n title: 'Formas de pago (Opciones)',\r\n state: 'app.catalogs.paymentMethodOptions'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.passTypes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.passTypes', {\r\n url : '/passTypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/passTypes/passTypes.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.passTypes', {\r\n title: 'Tipos de pases',\r\n state: 'app.catalogs.passTypes'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.partnerTypes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.partnerTypes', {\r\n url : '/partnerTypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/partnerTypes/partnerTypes.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.partnerTypes', {\r\n title: 'Tipos de socio',\r\n state: 'app.catalogs.partnerTypes'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.media', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.media', {\r\n url : '/media',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/media/media.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.media', {\r\n title: 'Medios',\r\n state: 'app.catalogs.media'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.levels', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.levels', {\r\n url : '/levels',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/levels/levels.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.levels', {\r\n title: 'Niveles de Avance',\r\n state: 'app.catalogs.levels'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.levelScores', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.levelScores', {\r\n url : '/levelScores',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/levelScores/levelScores.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.levelScores', {\r\n title: 'Calificaciones',\r\n state: 'app.catalogs.levelScores'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.evaluations', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.evaluations', {\r\n url : '/evaluations',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/evaluations/evaluations.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.evaluations', {\r\n title: 'Evaluaciones',\r\n state: 'app.catalogs.evaluations'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.employeeTypes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.employeeTypes', {\r\n url : '/employeeTypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/employeeTypes/employeeTypes.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.employeeTypes', {\r\n title: 'Tipos de empleados',\r\n state: 'app.catalogs.employeeTypes'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.countries', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.countries', {\r\n url : '/countries',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/countries/countries.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.countries', {\r\n title: 'Paises',\r\n state: 'app.catalogs.countries'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.clubAccess', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.clubAccess', {\r\n url : '/clubAccess',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/clubAccess/clubAccess.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.clubAccess', {\r\n title: 'Accesos Club',\r\n state: 'app.catalogs.clubAccess'\r\n });\r\n }\r\n})();\n\r\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.becas', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.becas', {\r\n url : '/becas',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/becas/becas.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.becas', {\r\n title: 'Becas',\r\n state: 'app.catalogs.becas'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.agreements', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.agreements', {\r\n url : '/agreements',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/agreements/agreements.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.agreements', {\r\n title: 'Convenios',\r\n state: 'app.catalogs.agreements'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.addressTypes', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.addressTypes', {\r\n url : '/addressTypes',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/addressTypes/addressTypes.html',\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.addressTypes', {\r\n title: 'Tipos de direccion',\r\n state: 'app.catalogs.addressTypes'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.accounts', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.accounts', {\r\n url : '/accounts',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/accounts/accounts.html'\r\n }\r\n }\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.accounts', {\r\n title: 'Cuentas',\r\n state: 'app.catalogs.accounts'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.catalogs.accessTimeZones', [\r\n ])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.catalogs.accessTimeZones', {\r\n url : '/accessTimeZones',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/accessTimeZones/accessTimeZones/accessTimeZones.html',\r\n controller : 'CatalogsAccessTimeZonesController as vm'\r\n }\r\n }\r\n })\r\n .state('app.catalogs.accessTimeZones.add', {\r\n url : '/add',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/accessTimeZones/accessTimeZone/accessTimeZone.html',\r\n controller : 'CatalogsAccessTimeZoneController as vm'\r\n }\r\n },\r\n resolve : {\r\n AccessTimeZone: function ()\r\n {\r\n return { \r\n id : 0, \r\n name : '',\r\n isMonday : true,\r\n mondayInitHour: \"0500\",\r\n mondayEndHour: \"2359\",\r\n isTuesday : true, \r\n tuesdayInitHour: \"0500\",\r\n tuesdayEndHour: \"2359\",\r\n isWednesday : true, \r\n wednesdayInitHour: \"0500\",\r\n wednesdayEndHour: \"2359\",\r\n isThursday : true, \r\n thursdayInitHour: \"0500\",\r\n thursdayEndHour: \"2359\",\r\n isFriday : true, \r\n fridayInitHour: \"0500\",\r\n fridayEndHour: \"2359\",\r\n isSaturday : true, \r\n saturdayInitHour: \"0500\",\r\n saturdayEndHour: \"2359\",\r\n isSunday : true, \r\n sundayInitHour: \"0500\",\r\n sundayEndHour: \"2359\",\r\n active : true \r\n };\r\n }\r\n },\r\n })\r\n .state('app.catalogs.accessTimeZones.detail', {\r\n url : '/:id',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/catalogs/views/accessTimeZones/accessTimeZone/accessTimeZone.html',\r\n controller : 'CatalogsAccessTimeZoneController as vm'\r\n }\r\n },\r\n resolve : {\r\n AccessTimeZone: function ($stateParams, apiResolver)\r\n {\r\n return apiResolver.resolve('catalogs.accessTimeZones@get', { id: $stateParams.id });\r\n }\r\n },\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.catalogs.accessTimeZones', {\r\n title: 'Horarios de acceso',\r\n state: 'app.catalogs.accessTimeZones'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.accionistas.transfer', [ \r\n ])\r\n .config(accionistasTransferConfig);\r\n\r\n /** @ngInject */\r\n function accionistasTransferConfig($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.accionistas.transfer', {\r\n url : '/transfer',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/accionistas/views/transfer/transfer.html',\r\n controller : 'AccionistasTransferController as vm'\r\n }\r\n },\r\n resolve : {\r\n Accionistas: function (apiResolver)\r\n {\r\n return apiResolver.resolve('accionistas.accionistas@query');\r\n }\r\n }\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.accionistas.transfer', {\r\n title: 'Traspaso',\r\n shortcuticon : 'icon-cash-multiple', \r\n state: 'app.accionistas.transfer'\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.pages.profile', [])\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.pages.profile', {\r\n url : '/profile',\r\n views : {\r\n 'content@app': {\r\n templateUrl: 'app/main/pages/profile/profile.html',\r\n controller : 'PagesProfileController as vm'\r\n }\r\n },\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.inventory', \r\n [\r\n 'datatables',\r\n // Catalogs\r\n 'app.inventory.inventories',\r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.inventory', {\r\n abstract: true,\r\n url : '/inventory'\r\n });\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps.inventory', {\r\n title : 'Inventario',\r\n icon : 'icon-archive',\r\n weight: 3\r\n });\r\n }\r\n})();\n(function(){\r\n\t'use strict';\r\n\r\n angular\r\n .module('app.accionistas', \r\n [\r\n 'datatables',\r\n // Accionistas\r\n 'app.accionistas.acciones', \r\n 'app.accionistas.purchase', \r\n // 'app.accionistas.accionistas', \r\n 'app.accionistas.transfer', \r\n ]\r\n )\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($stateProvider, msNavigationServiceProvider)\r\n {\r\n // State\r\n $stateProvider\r\n .state('app.accionistas', {\r\n abstract: true,\r\n url : '/accionistas'\r\n })\r\n ;\r\n\r\n // Navigation\r\n msNavigationServiceProvider.saveItem('apps', {\r\n title : '',\r\n group : true,\r\n weight: 1\r\n });\r\n\r\n msNavigationServiceProvider.saveItem('apps.accionistas', {\r\n title : 'Accionistas',\r\n icon : 'icon-cash',\r\n weight: 3\r\n });\r\n }\r\n})();\nangular.module(\"fuse\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/quick-panel/quick-panel.html\",\"TODAY\\nCHATACTIVITY\\n\");\n$templateCache.put(\"app/core/layouts/content-only.html\",\"
\");\n$templateCache.put(\"app/core/layouts/content-with-toolbar.html\",\"
\\n
\");\n$templateCache.put(\"app/core/layouts/horizontal-navigation.html\",\"
\\n
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation-fullwidth-toolbar-2.html\",\"
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation-fullwidth-toolbar.html\",\"
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation.html\",\"
\\n
\");\n$templateCache.put(\"app/core/theme-options/theme-options.html\",\"
\\nLayout Style:
\\n{{layoutStyle.label}}
\\n
Layout Mode:
{{layoutMode.label}}\\n
\\nColor Palette:
\");\n$templateCache.put(\"app/main/home/home.html\",\"
\");\n$templateCache.put(\"app/main/license/license.html\",\"
Ingrese licencia
\\n
Ingrese licencia
Guardar \\nGuardando...
\");\n$templateCache.put(\"app/main/login/login.html\",\"
\\nIngrese usuario y contraseña
\\n
\\nEl usuario es obligatorio
\\n
La contraseña es obligatoria.\\n
Iniciando... Iniciar sesionCerrar sesiones 1\\\">{{item.name}}\\n 1\\\">Entrar
\");\n$templateCache.put(\"app/main/temp-login/temp-login.html\",\"
\\nLoginCerrar
\\n
Ingrese Descripción.
\\n
Ingrese Precio.
El campo debe ser numérico.\\n
Valor incorrecto
Valor incorrecto.\\n
Ingrese Interés.\\n
El campo debe ser numérico.
\\nValor incorrecto.
Valor incorrecto.
\\n
Aceptar\\n
Cancelar
\\n
\");\n$templateCache.put(\"app/core/directives/ms-info-bar/ms-info-bar.html\",\"
\\n
\");\n$templateCache.put(\"app/core/directives/ms-material-color-picker/ms-material-color-picker.html\",\"
{{vm.selectedColor.palette}} {{vm.selectedColor.hue}} Select Color
\\n{{vm.selectedColor.palette}} {{vm.selectedColor.hue}} Select Color\\n\\n
{{palette}}
{{hue}}
\");\n$templateCache.put(\"app/core/directives/ms-search-bar/ms-search-bar.html\",\"
\\n
Sin resultados!\\n
{{result.title}}
{{result.description}}
\");\n$templateCache.put(\"app/core/directives/ms-shortcuts/ms-shortcuts.html\",\"
0\\\" ng-sortable=\\\"MsShortcuts.sortableOptions\\\">
\\n
{{shortcut.title.charAt(0)}}
\\n{{shortcut.title}}
\\nClick para agregar/quitar acceso directo\\n
\\n
Sin resultados!
\\n
\\n{{result.title}}
\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/activity/activity-tab.html\",\"Friends\\n\\\"{{friend.name}}\\\"
{{contact.unread}}

{{friend.message}}

{{friend.time}}

\\n
Application Servers

{{server.location}}

{{server.detail}}

\\n
User Stats
\\n{{stat.title}} ({{stat.current}} / {{stat.total}})
\");\n$templateCache.put(\"app/quick-panel/tabs/chat/chat-tab.html\",\"
Recent\\\"{{contact.name}}\\\"
{{contact.unread}}

{{contact.name}}

{{contact.lastMessage}}

\\n
Start New Chat\\\"{{contact.name}}\\\"
\\n

{{contact.name}}

\\n{{vm.chat.contact.name}}

\\n
\\\"{{vm.chat.contact.name}}\\\"
{{dialog.message}}
{{dialog.time}}
\\n
\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/today/today-tab.html\",\"Today\\n
{{vm.date | date:\\'EEEE\\'}}
{{vm.date | date:\\'d\\'}} th \\n{{vm.date | date:\\'MMMM\\'}}
Events

{{event.title}}

\\n{{event.detail}}

Notes

{{note.title}}

\\n{{note.detail}}

\\nQuick Settings

Notifications

\\n

Cloud Sync

\\n

Retro Thrusters

\");\n$templateCache.put(\"app/main/directives/cd-catalog/cd-catalog.template.html\",\"
\\n{{vm.title}}
No de registros: {{vm.items.length}}
\\nNuevo {{vm.itemName}}
\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}} \\n
{{vm.detailTitle}}
\\n
\\n
Ingrese Nombre.
\\nActivo\\n
Borrar\\nGUARDAR GUARDANDO...
\");\n$templateCache.put(\"app/main/directives/cd-catalog-check/cd-catalog-check.template.html\",\"{{label}}\\n\");\n$templateCache.put(\"app/main/directives/cd-catalog-numeric/cd-catalog-numeric.template.html\",\"\");\n$templateCache.put(\"app/main/directives/cd-catalog-input/cd-catalog-input.template.html\",\"\");\n$templateCache.put(\"app/main/directives/cd-catalog-select/cd-catalog-select.template.html\",\"\\n{{ item.name }}\");\n$templateCache.put(\"app/main/directives/cd-date-folio/cd-date-folio.template.html\",\"
Por Fecha\\nPor Folio\\n
\\n\\n\\n
{{item | json}}\\n
\");\n$templateCache.put(\"app/main/directives/cd-export-excel-button/cd-export-excel-button.template.html\",\"
Exportar a Excel
\");\n$templateCache.put(\"app/main/directives/cd-input-time/cd-input-time.template.html\",\"\");\n$templateCache.put(\"app/main/directives/cd-partners-range/cd-partners-range.template.html\",\"
\\n
\");\n$templateCache.put(\"app/main/directives/cd-rentable-selection/cd-rentable-selection.template.html\",\"
\\n{{item.name}}
\");\n$templateCache.put(\"app/main/directives/cd-report-age-ranges/cd-report-age-ranges.template.html\",\"

Rango de edades

Rango {{range.id}}\\n\\n
\");\n$templateCache.put(\"app/main/directives/cd-report-date-period/cd-report-date-period.template.html\",\"
Por Fecha\\nPor Periodo\\n
\\n\\n\\n
{{opt.name}}\\n
{{item | json}}
\\n
\");\n$templateCache.put(\"app/main/directives/cd-report-dates-range/cd-report-dates-range.template.html\",\"
\\n
\");\n$templateCache.put(\"app/main/directives/cd-sat-select/cd-sat-select.template.html\",\"{{item.name}}No se hay resultados.\\n\");\n$templateCache.put(\"app/main/login/dialog-login/dialog-login.html\",\"
DESBLOQUEAR
\\n
\\nEl usuario es obligatorio
La contraseña es obligatoria.\\n
Aceptar
\");\n$templateCache.put(\"app/main/login/dialogs/dialog-close-sesions.html\",\"
{{vm.title}}
\\n
Ingrese contraseña.
\\n
\\nCERRAR SESIONES\\nCANCELAR
\");\n$templateCache.put(\"app/main/pages/profile/profile.html\",\"
\\n{{vm.user.name}} {{vm.user.lastname}}
\\nDatos de usuario\\nCambiar contraseña\\n
\");\n$templateCache.put(\"app/main/test/drag-selection/drag-selection.html\",\"\\nRenglones:
Columnas: Generar matriz\\n
\");\n$templateCache.put(\"app/main/test/excel/excel1.html\",\"

Export to Excel

TeamProcess TypeCedent
value 1\\nvalue 2value 3
value 4value 5value 6
10.12.2015\\nAXA Affin101024 - Quota Share QS
\");\n$templateCache.put(\"app/navigation/layouts/horizontal-navigation/navigation.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation/navigation.html\",\"
AR \\nANIMAL REST
\");\n$templateCache.put(\"app/toolbar/layouts/content-with-toolbar/toolbar.html\",\"
F FUSE
\\n
\\n
\\nJohn Doe
\\nMy ProfileInbox\\n{{vm.userStatus.title}}\\n{{status.title}}\\nLogout\\n
\\n\\n
{{vm.selectedLanguage.code}}\\n
{{lang.title}}\\n
\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation-fullwidth-toolbar-2/navigation.html\",\"\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation/toolbar.html\",\"
\\n
John Doe
\\n
My ProfileInbox\\n{{vm.userStatus.title}}\\n{{status.title}}\\nLogout\\n
\\n\\n
{{vm.selectedLanguage.code}}\\n
{{lang.title}}\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/toolbar.html\",\"
\\n
F FUSE
\\n
\\n
\\n
John Doe
My Profile\\nInbox\\n{{vm.userStatus.title}}{{status.title}}\\nLogout
\\n
\\n
{{vm.selectedLanguage.code}}\\n
{{lang.title}}\\n
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar/toolbar.html\",\"
\\n
\\n
\\n
John Doe
My Profile\\nInbox\\n{{vm.userStatus.title}}{{status.title}}\\nLogout
\\n
\\n{{vm.selectedLanguage.code}}
\\n {{lang.title}}
\\n
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation-fullwidth-toolbar-2/toolbar.html\",\"
\\nKalaClub Web
\\n\\n
\\n
\\nBloquear/Desbloquear controles\\n
\\n{{vm.user.name}} {{vm.user.lastname}}/{{vm.branch.name}}
Mi perfil\\n\\nSalir
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/horizontal.html\",\"
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/vertical.html\",\"\\n\");\n$templateCache.put(\"app/main/accionistas/views/acciones/acciones.html\",\"
\\n
\\nAcciones
No de acciones: {{vm.items.length}}
Agregar multiple\\n\\nBorrar seleccionada
{{vm.status}}
\\n
Número
Serie
Fecha
Asignado a:
Fecha Asignación
\\n{{item.number}}{{item.serie}}{{item.date | date : \\'dd/MM/yyyy\\'}}\\n{{item.accionista.completeName}}{{item.assignedDate | date : \\'dd/MM/yyyy\\'}}
\\n
\");\n$templateCache.put(\"app/main/accionistas/views/purchase/purchase.html\",\"
\\nCompra de acciones

Quien realizará la compra:

Accionista existente\\nEx-AccionistaAccionista nuevo

Comprar acciones:

\\nAl clubA otro accionista\\n\\n{{opt.completeName}}
AtrasSiguiente Guardar y salir
\\n
\\n
{{opt.completeName}}

\\nPersonales

y/o
\\n
\\n
Dato obligatorio
\\n
\\n
\\n\\n\\n

\\nEmpresa

\\n\\n\\n
\\n
\\n
Dato obligatorio\\n
Dato obligatorio\\n
Dato obligatorio\\n

Disponibles

\\n
SerieNúmero
{{item.serie}}\\n{{item.number}}
\\n
\\n\\n

Seleccionados

\\n
SerieNúmero
{{item.serie}}\\n{{item.number}}
{{item.serie}}\\n{{item.number}}
\\n
\");\n$templateCache.put(\"app/main/accionistas/views/transfer/transfer.html\",\"
\\nTraspaso de acciones
Guardar
\\n
\\n{{opt.completeName}}\\n

Traspasar a:

\\nEl ClubOtro accionista
\\n
\\nDato obligatorio
\\nDato obligatorio
\\nDato obligatorio
\\n\\n{{opt.completeName}}
\\n

\\nAcciones a traspasar

\\n
SerieNúmero
{{item.serie}}\\n{{item.number}}
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/accounts/accounts.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/addressTypes/addressTypes.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/agreements/agreements.html\",\"\\n\");\n$templateCache.put(\"app/main/catalogs/views/becas/becas.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/clubAccess/clubAccess.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/countries/countries.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/duesRules/duesRules.html\",\"
\\n
\\nReglas de cuotas
No de reglas: {{vm.items.length}}
\\nAgregar
\\n\\n
Cuota Actual
Cuota Nueva
Sexo
Acción
Acciones
{{item.dueCurrent.name}}{{item.dueNew.name}}{{item.gender.name}}{{item.action}} - Forzado\\nEditarBorrar\\n
\");\n$templateCache.put(\"app/main/catalogs/views/employeeTypes/employeeTypes.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/evaluations/evaluations.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/levelScores/levelScores.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/levels/levels.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/media/media.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/partnerTypes/partnerTypes.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/passes/passes.html\",\"
\\nPases y Credenciales
No de pases/credenciales: {{vm.items.length}}
\\n
\\nAgregar multiple\\nBorrar seleccionadoBorrar multiple
\\n{{vm.status}}
\\n
Tipo de pase
Numero de pase
Fecha de alta
{{item.passType.name}}{{item.number}}\\n{{item.insertDate | date : \\'dd/MM/yyyy\\'}}
\");\n$templateCache.put(\"app/main/catalogs/views/passTypes/passTypes.html\",\"\\n\\n\");\n$templateCache.put(\"app/main/catalogs/views/paymentMethods/paymentMethods.html\",\"\\n\\n\");\n$templateCache.put(\"app/main/catalogs/views/paymentMethodOptions/paymentMethodOptions.html\",\"\\n\");\n$templateCache.put(\"app/main/catalogs/views/professions/professions.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/satCodes/satCodes.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/tpvs/tpvs.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/warehouses/warehouses.html\",\"\");\n$templateCache.put(\"app/main/catalogs/views/zones/zones.html\",\"\");\n$templateCache.put(\"app/main/license/dialogs/dialog-login/dialog-login.html\",\"
\\nGENERAR LICENCIA
\\n
\\nEl usuario es obligatorio
La contraseña es obligatoria.\\n
Aceptar
\");\n$templateCache.put(\"app/main/invoices/views/batch/batch.html\",\"
\\n
CARGA MASIVA DE RECIBOS

\\nSube un archivo con el layout correcto para procesar masivamente las solicitudes y generar los recibos correspondientes\\n

\\nSUBIENDO ARCHIVO... SUBIR

\\nSe procesaron {{vm.result.successLines}} registros correctamente

0\\\">

\\nSe encontraron {{vm.result.errorLines}} errores, descarga el archivo de registros con error AQUI

Detalle de errores:

\\n
  • {{item}}
\");\n$templateCache.put(\"app/main/invoices/views/complements/complements.html\",\"
RECIBOS ELECTRÓNICOS DE PAGOS
\\nFacturas con pago parcial o diferido
\\n
Facturas con pago parcial o diferido\\n
\\n\\n\\nIncluir Pagadas
Folio
Familia
Fecha
RFC
Cliente
Monto
Responsable
\\n{{item.folio}}{{item.partner.sequentialNumber}}{{item.expeditionDate | date : \\'dd/MM/yyyy\\'}}\\n{{item.rfc}}{{item.razonSocial}}{{item.total | currency: \\'$ \\': 2}}
\\n
\\n
\\nPagos de Factura Seleccionada (REP)
Folio
Fecha
Forma Pago
Parcialidad
Pago
Saldo Anterior
Saldo Insoluto
Acciones
{{item.id}}\\n{{item.paymentDate | date : \\'dd/MM/yyyy\\'}}{{item.satPayment.description}}\\n{{item.sequentialNumber}}{{item.amount | currency: \\'$ \\': 2}}\\n{{item.saldoAnterior | currency: \\'$ \\': 2}}{{item.saldoInsoluto | currency: \\'$ \\': 2}}Ver archivo
\\n
\\nGeneración de Recibo Electrónico de Pago
\\n\\n
\\n
Campo requerido.
\\n
{{opt.name}}
Campo requerido.
\\n
Campo requerido.
\\n
\\n\\n
RFC Invalido.\\n
\\n{{opt.name}}\\n
\\n{{opt.name}}\\n
Campo requerido.
\\n
Campo requerido.\\n
\\n
Campo requerido.\\n
Agregar complemento
FacturaTotal Factura\\nParcialidadSaldoFamiliaTitularEmail
{{vm.invoice.folio}}\\n{{vm.invoice.total | currency: \\'$ \\': 2}}{{vm.complement.sequentialNumber}}\\n{{vm.balance | currency: \\'$ \\': 2}}{{vm.invoice.partner.sequentialNumber}}\\n{{vm.invoice.partner.completeName}}{{vm.invoice.partner.email}}
\");\n$templateCache.put(\"app/main/invoices/views/plannedProducts/plannedProducts.html\",\"
\\nCargos Planificados
No de cargos planificados: {{vm.plannedProducts.length}}\\n
Nuevo\\n
\\n\\n
# Socio\\n
Nombre de Socio
\\n
Producto
Vencimiento
Acciones
\\n{{item.id}}{{item.partner.completeName}}{{item.product.name}} - {{item.price | currency: \\'$ \\': 2}}\\n{{item.expirationDate | date: \\'dd/MM/yyyy\\'}}\\n
\\n
\");\n$templateCache.put(\"app/main/invoices/views/receipt/receipt.html\",\"
ImprimirVer PDF\\nVer XML\\nEnviar por Email
{{vm.settings.name}}
{{vm.settings.address}}
Telefono: {{vm.settings.phone}}
Email: {{vm.settings.email}}
Tipo de Documento
\\nFACTURA ({{vm.item.folio}}) NOTA DE CREDITO ({{vm.item.folio}}) RECIBO ELECTRÓNICO DE PAGO ({{vm.item.folio}})
\\nFecha y hora de emisión
{{vm.item.expeditionDate}}
\\nFecha y hora de certificación
{{vm.item.satData.fechaCertificacion}}
\\n\\n\\n
Receptor del comprobante Fiscal
\\n{{vm.item.partner.addresses[0].street}} No {{vm.item.partner.addresses[0].number}} COL. {{vm.item.partner.addresses[0].colony}}, {{vm.item.partner.addresses[0].municipio}}, CP. {{vm.item.partner.addresses[0].zipCode}}\\n
{{vm.item.targetRazonSocial}} - {{vm.item.targetRfc}}
No Membresía: {{vm.item.partner.sequentialNumber}}
Folio fiscal
\\n{{vm.item.satData.folioFiscal}}
No. Certificado Digital
\\n{{vm.item.satData.numeroCertificado}}
Vigencia del certificado
\\nDel {{vm.settings.certificateValidFrom | date: \\'dd/MM/yyyy\\'}} al {{vm.settings.certificateValidTo | date: \\'dd/MM/yyyy\\'}}\\n
No. Serie Certificado SAT
{{vm.item.satData.numeroSerieCertificado}}\\n
{{item.subtotal | currency}}
CantidadUnidadConceptoPrecio UnitarioImporte
\\n{{item.quantity}}{{item.satUnit.name}}\\n{{item.satProduct.code}} - {{item.description}}{{item.unityValue | currency}}
Importe con letra: {{vm.numberToLetters(vm.item.total)}}\\n
\\n
Metodo de pago:\\n{{vm.item.satPaymentMethod.name}}Tipo de comprobante: {{vm.item.satInvoiceType.name}}
\\nForma de pago:{{vm.item.satPayment.name}}Moneda: {{vm.item.satCoin.name}}
\\n
Subtotal:{{vm.item.subtotal | currency}}
Descuento:{{vm.item.discount | currency}}
IVA:{{vm.item.transferedTaxesTotal | currency}}
Total:\\n{{vm.item.total | currency}}

\\nInformación del pago

\\nImporte: {{vm.item.complement.amount|currency}}
Importe con letra: {{vm.numberToLetters(vm.item.complement.amount)}}\\n
Tipo de Comprobante: (P) pago

\\nLugar de Expedición: {{vm.item.complement.expeditionSatZipCode.code}}
Subtotal:\\n{{vm.item.subtotal | currency}}
IVA:\\n{{vm.item.complement.amount | currency}}
Total:\\n{{vm.item.complement.amount | currency}}
\\n\\n
Forma de PagoFecha de PagoMonedaTipo de cambioMonto
\\n{{vm.item.complement.satPayment.description}}{{vm.item.complement.paymentDate|date:\\'dd/MM/yyyy HH:mm:ss\\'}}\\n{{vm.item.complement.satCoin.code}}1.0{{vm.item.complement.amount}}

Documento relacionado

\\n
Id documento:\\n{{vm.item.cfdiRelacionado}}Número parcialidad{{vm.item.complement.sequentialNumber}}
Folio de la factura:{{vm.item.invoiceFolio}}Importe total a pagar:\\n{{vm.item.complement.invoice.total|currency}}
Objeto Impuesto documento relacionado:\\nSí objeto de impuestoImporte pagado:{{vm.item.complementPayed|currency}}
\\nMoneda del documento relacionado:{{vm.item.complement.invoice.satCoin.description}}\\nImporte de saldo insoluto:{{vm.item.complementDebt|currency}}
Referencia: Factura {{vm.item.invoiceFolio}}
\\nObservaciones: {{vm.item.notes}}
Documentos relacionados: {{vm.item.cfdiRelacionado}}\\n
Cadena Original del Complemento de Certificación del SAT\\n
{{vm.item.satData.cadenaOriginalComplemento}}
Sello Digital del CFDI
{{vm.item.satData.selloDigitalCfdi}}
\\n
Sello Digital SAT
\\n{{vm.item.satData.selloDigitalSat}}
\\nEste Documento es una representacion impresa de un CFDI
Versión del CFDI 4.0
\\nUso de CFDI: {{vm.item.satCfdiUse.name}}
\");\n$templateCache.put(\"app/main/invoices/views/turns/turns.html\",\"
\\nTurnos
\\nNo total de turnos: {{vm.turns.length}}
\\n
Abrir turno
\\n\\n\\n{{item.text}}\\n
\\n\\n
ID
FechaApertura
Turno
UsuarioApertura
FechaCierre
UsuarioCierre
Acciones
{{item.id}}{{item.openDate | date : \\'dd/MM/yyyy HH:mm\\' }}{{item.turnNumber}}\\n{{item.user.name}}{{item.closeDate | date : \\'dd/MM/yyyy HH:mm\\' }}{{item.closeUser.name}}Cerrar turno\\n
\\n
\");\n$templateCache.put(\"app/main/partners/views/prospectCalendar/prospectCalendar.html\",\"
\\n
Agenda de\\n{{opt.completeName}}conTodos\\n{{opt.completeName}}
Hoy\\nDia\\nSemana\\nMes
\\n{{vm.calendarView.title}}
\");\n$templateCache.put(\"app/main/reports/views/dashboard/dashboard.html\",\"
Dashboard
Indicadores
\\n
\\nCargando información...
Ventas\\nVentas últimos 12 meses \\nTotal: {{vm.salesyearbytype.total|currency}}
Ventas últimos 7 días Total: {{vm.sales.total|currency}}\\n\\nVentas últimos 7 días \\nTotal: {{vm.salesbytype.total|currency}}\\n
\\nTop 10 productos más vendidos\\n Total: {{vm.salestop.total|currency}}Ventas por tipo últimos 30 días \\nTotal: {{vm.salestopbytype.total|currency}}
Inscripciones últimos 12 meses \\nTotal: {{vm.inscriptions.total|number}}\\nInscripciones últimas 4 semanas \\nTotal: {{vm.inscriptions.total|number}}
Socios activos
Total: {{vm.population.total|number}}\\n
\\nDeudores por tipo\\n
Socios activos por edad
\\nTotal: {{vm.byage.total|number}}
\\n
Socios por genero
\\nTotal: {{vm.bygender.total|number}}
\");\n$templateCache.put(\"app/main/partners/views/prospects/prospects.html\",\"
Prospectos\\n
Agregar prospecto
No de prospectos: {{vm.prospects.length}}
\\n
TODOS\\nSolo InscritosSolo NO Inscritos\\nCalendario
\\n\\n
ID
\\nFecha
Nombre de Prospecto
Vendedor
Inscrito?
Acciones
No hay registros a mostrar
{{item.id}}\\n{{item.insertDate | date: \\'dd/MM/yyyy\\'}}{{item.completeName}}\\n{{item.seller.name}} {{item.seller.fatherLastname}} {{item.seller.motherLastname}}\\nSI NOEditar prospecto\\n\\nVer prospectoBorrar prospecto\\n\\nInscribir prospectoMostrar calendario de vendedor
\\n
ComentariosAgregar comentario\\n
\\n\\nGuardarCancelar
\\n

Cargando comentarios...

\\nNo hay comentarios a mostrar

{{item.insertDate | date: \\'dd/MM/yyyy HH:mm\\'}}

{{item.comment}}\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/reports/views/tst/tst.html\",\"
{{vm.invoice.date}}
\\nREPORTE DE PRUEBA
No de socios
\\nLorem Ipsum es simplemente el texto de relleno de las
\\n
\\n\\n
CredencialFamiliaNombreCuota
{{item.credentialCode}}\\n{{item.sequentialNumber}}{{item.name}}{{item.dueName}}
\\n{{item.credentialCode}}{{item.sequentialNumber}}{{item.name}}{{item.dueName}}
{{item.credentialCode}}{{item.sequentialNumber}}{{item.name}}{{item.dueName}}
\\n
No Registros{{vm.data.length}}
\\nPlease pay within 15 days. Thank you for your business.
\\nIn condimentum malesuada efficitur. Mauris volutpat placerat auctor. Ut ac congue dolor. Quisque scelerisque lacus sed feugiat fermentum. Cras aliquet facilisis pellentesque. Nunc hendrerit quam at leo commodo, a suscipit tellus dapibus. Etiam at felis volutpat est mollis lacinia. Mauris placerat sem sit amet velit mollis, in porttitor ex finibus. Proin eu nibh id libero tincidunt lacinia et eget eros.\\n
\");\n$templateCache.put(\"app/main/reports/views/selector/selector.html\",\"
\\n
\\n
Selección de reportes\\n
Generar reporte Generando...
\\n

Grupos

\\n
GrupoNo Reportes
{{item.name}}{{item.reports.length}}

Reportes

ReporteNúmero
\\n{{item.name}}{{item.number}}

Parametros

\\n\\n\\n{{param.label}}\\n{{ item.name }}\\nSeleccionar todos Quitar seleccion{{ item.name }} {{ item.fatherLastname }}\\n{{ item.name }}{{ item.name }}\\n\\nSeleccionar todos Quitar seleccion{{ item.name }}\\n\\n\\n{{ item.name }}TODOS\\n{{ item.completeName }}TODOS\\n\\n{{ item.name }}TODOS\\n{{ item.name }}{{ item.completeName }}\\n\\n\\n{{ item.name }}\\n{{ item.name }}TODOS{{ item.name }}\\n
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-1/template-1.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-10/template-10.html\",\"
\\n
{{card.title}}
{{card.subtitle}}
\\\"{{card.media.image.alt}}\\\"
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-3/template-3.html\",\"
{{card.title}}
{{card.subtitle}}
{{card.cta}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-2/template-2.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}\\n
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-4/template-4.html\",\"
{{card.title}}\\n
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-5/template-5.html\",\"
{{card.title}}
\\n{{card.event}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-6/template-6.html\",\"
\\n{{card.subtitle}}
{{card.title}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-7/template-7.html\",\"
{{card.title}}\\n
{{card.subtitle}}
{{card.text}}
\\n
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-8/template-8.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.button1}}\\n{{card.button2}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-9/template-9.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\\n
\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/horizontal/horizontal.html\",\"
{{$index + 1}} \\n
{{step.stepTitle}}
Optional
Back
Next\\nSubmit
\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/vertical/vertical.html\",\"
\");\n$templateCache.put(\"app/main/catalogs/views/accessTimeZones/accessTimeZone/accessTimeZone.html\",\"
{{vm.item.name}}
Detalle de Horario de Acceso
GUARDAR\\n
Ingrese nombre(s).
\\n
Ingrese Panel.
Activo
\\n\\n
DíaHora InicioHora Fin
Lunes
Martes
\\nMiercoles
Jueves\\n
Viernes\\n
Sabado\\n\\n
Domingo
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/accessTimeZones/accessTimeZones/accessTimeZones.html\",\"
\\n
\\nHorarios de Acceso
No de horarios: {{vm.accessTimeZones.length}}
\\n
Nuevo\\n
\\n
ID
Nombre
Lunes
Martes
Miercoles
Jueves
Viernes
Sabado
Domingo
Activo
Acciones
{{item.id}}{{item.name}}
\\n{{item.mondayInitHour.substr(0,2)}}:{{item.mondayInitHour.substr(2,2)}} - {{item.mondayEndHour.substr(0,2)}}:{{item.mondayEndHour.substr(2,2)}}\\n
\\n{{item.tuesdayInitHour.substr(0,2)}}:{{item.tuesdayInitHour.substr(2,2)}} - {{item.tuesdayEndHour.substr(0,2)}}:{{item.tuesdayEndHour.substr(2,2)}}\\n
\\n{{item.wednesdayInitHour.substr(0,2)}}:{{item.wednesdayInitHour.substr(2,2)}} - {{item.wednesdayEndHour.substr(0,2)}}:{{item.wednesdayEndHour.substr(2,2)}}\\n
\\n{{item.thursdayInitHour.substr(0,2)}}:{{item.thursdayInitHour.substr(2,2)}} - {{item.thursdayEndHour.substr(0,2)}}:{{item.thursdayEndHour.substr(2,2)}}\\n
\\n{{item.fridayInitHour.substr(0,2)}}:{{item.fridayInitHour.substr(2,2)}} - {{item.fridayEndHour.substr(0,2)}}:{{item.fridayEndHour.substr(2,2)}}\\n
\\n{{item.saturdayInitHour.substr(0,2)}}:{{item.saturdayInitHour.substr(2,2)}} - {{item.saturdayEndHour.substr(0,2)}}:{{item.saturdayEndHour.substr(2,2)}}\\n
\\n{{item.sundayInitHour.substr(0,2)}}:{{item.sundayInitHour.substr(2,2)}} - {{item.sundayEndHour.substr(0,2)}}:{{item.sundayEndHour.substr(2,2)}}\\n
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/activities/activity/activity.html\",\"
{{vm.item.name}}
\\nDetalle de Actividad
GUARDAR
Información principal\\n
\\nIngrese Nombre.
\\nActivo
\\n
0\\\">Horarios
Nuevo
Horario
Instructor
Lunes
Martes
Miercoles
Jueves
Viernes
Sabado
Domingo
{{item.name}}\\n{{item.employee.name}} {{item.employee.fatherLastname}} {{item.employee.motherLastname}}
\\n{{item.mondayInitHour.substr(0,2)}}:{{item.mondayInitHour.substr(2,2)}} - {{item.mondayEndHour.substr(0,2)}}:{{item.mondayEndHour.substr(2,2)}}\\n
\\n{{item.tuesdayInitHour.substr(0,2)}}:{{item.tuesdayInitHour.substr(2,2)}} - {{item.tuesdayEndHour.substr(0,2)}}:{{item.tuesdayEndHour.substr(2,2)}}\\n
\\n{{item.wednesdayInitHour.substr(0,2)}}:{{item.wednesdayInitHour.substr(2,2)}} - {{item.wednesdayEndHour.substr(0,2)}}:{{item.wednesdayEndHour.substr(2,2)}}\\n
\\n{{item.thursdayInitHour.substr(0,2)}}:{{item.thursdayInitHour.substr(2,2)}} - {{item.thursdayEndHour.substr(0,2)}}:{{item.thursdayEndHour.substr(2,2)}}\\n
\\n{{item.fridayInitHour.substr(0,2)}}:{{item.fridayInitHour.substr(2,2)}} - {{item.fridayEndHour.substr(0,2)}}:{{item.fridayEndHour.substr(2,2)}}\\n
\\n{{item.saturdayInitHour.substr(0,2)}}:{{item.saturdayInitHour.substr(2,2)}} - {{item.saturdayEndHour.substr(0,2)}}:{{item.saturdayEndHour.substr(2,2)}}\\n
\\n{{item.sundayInitHour.substr(0,2)}}:{{item.sundayInitHour.substr(2,2)}} - {{item.sundayEndHour.substr(0,2)}}:{{item.sundayEndHour.substr(2,2)}}\\n
\\n
\\nHORARIO
Ingrese nombre.\\n
SIN INSTRUCTOR{{item.name}} {{item.fatherLastname}} {{item.motherLastname}}\\nReq. Cupo\\n
\\n
UbicacionesCupo
\\n{{item.name}}
\\n
\\n\\n\\n\\n
DíaHora InicioHora Fin
\\nLunes
Martes\\n
\\nMiercoles
Jueves
Viernes
Sabado
Domingo
\\nGuardarCancelar
\");\n$templateCache.put(\"app/main/catalogs/views/activities/activities/activities.html\",\"
\\nActividades
No de actividades: {{vm.activities.length}}
\\n
Nuevo\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}} \\n\\n
\");\n$templateCache.put(\"app/main/catalogs/views/conceptos-nota-credito/concepto-nota-credito/concepto-nota-credito.html\",\"
{{vm.item.name}}
Concepto de Nota de Crédito
GUARDANDO... GUARDAR
\\nIngrese nombre.
\\nActivo
\\n\\n
[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n
\\nSeleccione Valor de Impuesto del SAT.
\");\n$templateCache.put(\"app/main/catalogs/views/conceptos-nota-credito/conceptos-nota-credito/conceptos-nota-credito.html\",\"
\\nConceptos de Notas de Crédito
No de conceptos: {{vm.conceptos.length}}
Nuevo\\n
\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}}
\");\n$templateCache.put(\"app/main/catalogs/views/dues/due/due.html\",\"
{{vm.item.name}}
\\nDetalle de Cuota
GUARDAR
Información de Cuota\\n
\\nIngrese Nombre.
Para TitularPara Familiar
Activo
Dato requerido
El valor debe ser numerico\\n
Valor demasiado pequeño
Valor demasiado grande
\\n
Dato requerido
El valor debe ser numerico\\n
Valor demasiado pequeño
Valor demasiado grande
\\n
\\n
Dato requerido\\n
El valor debe ser numerico
Valor demasiado pequeño
Valor demasiado grande
Dato requerido
El valor debe ser numerico\\n
Valor demasiado pequeño
Valor demasiado grande
\\n
{{opt.name}}\\n
Dato requerido
\\n
{{opt.name}} - {{opt.code}}\\n
[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n
\\nSeleccione Valor de Impuesto del SAT.
\\n 0\\\">Precios
Nuevo
Vigencia
Interes
Dias de gracia
\\n{{item.validFrom | date : \\'dd/MM/yyyy\\'}} - {{item.validTo | date : \\'dd/MM/yyyy\\'}}{{item.interes}}\\n{{item.daysOfGrace}}\\n
\");\n$templateCache.put(\"app/main/catalogs/views/dues/dues/dues.html\",\"
\\nCuotas
\\nNo de cuotas: {{vm.dues.length}}
\\n
Nuevo
\\n\\n\\n
ID
Nombre
Tipo
Activo
Acciones
{{item.id}}{{item.name}} \\n
\");\n$templateCache.put(\"app/main/catalogs/views/employees/employee/employee.html\",\"
\\n{{vm.item.name}} {{vm.item.fatherLastname}} {{vm.item.motherLastname}}
\\nDetalle de Empleado
Mostrar calendarioGUARDAR
\\n
\\n
Ingrese nombre(s).
Ingrese Apellido Paterno.
0\\\">
{{ item.name }}
Seleccione tipo de empleado.\\n
{{item.name}} {{item.fatherLastname}} {{item.motherLastname}}\\n
\\nSeleccione Usuario.
\\nActivo
\\n\\n\\n
\");\n$templateCache.put(\"app/main/catalogs/views/employees/employees/employees.html\",\"
\\nEmpleados
No de empleados: {{vm.employees.length}}
Nuevo\\n
\\n
ID
Nombre
Tipo de empleado
Activo
Acciones
{{item.id}}{{item.completeName}}
\\nUsr: {{item.user.username}}
{{item.employeeType.name}}\\nMostrar calendario \\nEditar\\nBorrar
\");\n$templateCache.put(\"app/main/catalogs/views/productTypes/productType/productType.html\",\"
{{vm.item.name}}
\\nDetalle de Tipo de Producto
GUARDAR
\\nInformación de principal
\\nIngrese nombre de tipo.
\\nActivo
\\n
0\\\">Propiedades
\\n
\\nPropiedades
Agregar
\\n\\n
Propiedad
Acciones
\\n{{item.name}}\\nEditarBorrar
Nueva propiedad
\\n
Ingrese Propiedad.
\\nGUARDAR PROPIEDAD
\\n
\\n
Ingrese opción.
GUARDAR OPCION
\\n
Opciones
{{opt.value}}Borrar opción\\n
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/productTypes/productTypes/productTypes.html\",\"
\\nTipos de productos
No de tipos: {{vm.productTypes.length}}
Nuevo\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}}{{item.active}}EditarBorrar\\n
\");\n$templateCache.put(\"app/main/catalogs/views/products/product/product.html\",\"
{{vm.product.name}}
Detalle de Producto
GUARDAR\\n
\\nInformación de Producto
\\n{{ item.name }}\\n
\\n
Ingrese descripción del producto.
\\nGenera cupones?\\n

\\nCargando...

Ingrese costo del producto.
\\n\\n\\nRequiere stock para venta?Activo
\\n\\n{{opt.name}} - {{opt.code}}
\\n\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.
\\n\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.
\\n
Seleccione Valor de Impuesto del SAT.
\\n
Cupones\\n
\\nIngrese número de cupones.
Al menos debe imprimir 1 cupon.
\\n
\\nIngrese dias de validez del cupon.
Debe tener validez al menos de un dia.\\n
\\n
\\nIngrese monto de pago a terceros.
El monto minimo es 0.
\\n
\\nIngrese descripción a imprimir.
\");\n$templateCache.put(\"app/main/catalogs/views/products/products/products.html\",\"
\\n
\\nProductos
No Productos: {{vm.products.length}}
Nuevo\\nMasivo\\n
Código
Nombre
Tipo
Activo
Acciones
{{item.code}}{{item.name}}{{item.productType.name}} \\n
\");\n$templateCache.put(\"app/main/catalogs/views/rentable-zones/rentable-zone/rentable-zone.html\",\"\\n
{{vm.item.name}}
Detalle de Zona de rentables
GUARDANDO... GUARDAR
Información de Zona\\n
\\nIngrese nombre.
\\n\\nActivo
\\n\\n
[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n
\\nSeleccione Valor de Impuesto del SAT.
\\n 0\\\">Precios
Nuevo
Vigencia
Interés
Dias de gracia
\\n{{item.validFrom | date : \\'dd/MM/yyyy\\'}} - {{item.validTo | date : \\'dd/MM/yyyy\\'}}{{item.interes}}\\n{{item.daysOfGrace}}\\n
0\\\" \\nmd-on-select=\\\"vm.configSelected()\\\">Configuración de rentables
Ingrese numero de renglones.
El valor minimo es 0.\\n
Ingrese numero de columnas.
El valor minimo es 0.\\n
\\nGenerar Matriz
\");\n$templateCache.put(\"app/main/catalogs/views/rentable-zones/rentable-zones/rentable-zones.html\",\"
\\nZonas de rentables
No de zonas: {{vm.zones.length}}
Nuevo\\n
\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}} \\n
\");\n$templateCache.put(\"app/main/inventory/views/inventories/inventories/inventories.html\",\"
\\n
\\nInventario
No de productos: {{vm.inventory.length}}
Nuevo
\\n
Código
\\n
Producto
Almacen
Cantidad
Precio
\\n
{{item.product.code}}\\n{{item.product.name}}{{item.warehouse.name}}$
\");\n$templateCache.put(\"app/main/inventory/views/inventories/inventory/inventory.html\",\"\");\n$templateCache.put(\"app/main/invoices/views/notasCredito/notasCredito/notasCredito.html\",\"
\\n
\\n
Notas de Crédito
No total de notas de crédito: {{vm.notasCredito.length}}\\n
Nueva Nota de Credito
\\n\\n\\n
\\n\\n
Folio
Folio Fact.
Recibo
Monto
Fecha
Notas
Acciones
\\n{{item.folio}}{{item.invoiceFolio}}{{item.orderFolio}}\\n{{item.total | currency : \\'$ \\': 2 }}{{item.expeditionDate | date : \\'dd/MM/yyyy HH:mm\\' }}\\n{{item.notes}}Ver archivo
\");\n$templateCache.put(\"app/main/invoices/views/orders/coupon/coupon.html\",\"
Imprimir
\\nCUPON {{ (\\'000000\\'+vm.order.id).slice(-6)}}{{ (\\'00\\'+($index + 1)).slice(-2)}}
\\n{{vm.partner.completeName}}
{{vm.products.name}}\\n

\");\n$templateCache.put(\"app/main/invoices/views/orders/orders/orders.html\",\"
\\nRecibos / Facturas
\\n 0\\\" ng-disabled=\\\"vm.invoiceGenerating\\\">\\nGENERANDO.... Facturar {{vm.ordersSelected.length}} recibo(s)\\n
\\n\\n
TODOS{{item.completeName}}TodosFacturadosNO Facturados
Folio/Fact\\nSeleccionar todo
\\nSocio
Fecha
Total
Acciones
\\n{{item.folio}}{{item.folio}} / {{item.invoiceId}} {{item.folio}}{{item.partner.completeName}}\\n{{item.insertDate | date: \\\"dd/MM/yyyy HH:mm\\\"}}{{item.total | currency}}
Reimprimir Cupones\\nReimprimir Recibo\\nCancelar ReciboMostrar detalles
\\n

Facturas generadas

\\n
Folio
RFC
Razon Social
Fecha
Total
Acciones
{{item.folio}}{{item.targetRfc}}
\\n{{item.orderFolio}} Varios folios
{{item.targetRazonSocial}}{{item.insertDate | date: \\\"dd/MM/yyyy HH:mm\\\"}}{{item.total | currency}}Mostrar detallesVer factura\\nCancelar factura\\n
\\n
\");\n$templateCache.put(\"app/main/invoices/views/orders/order/order.html\",\"

Total

{{vm.order.total | currency: \\'$ \\': 2}}
1\\n \\n Cuotas y Productos
\\nBuscar código de socio
{{item.completeName}}No se hay resultados.\\n\\n
\\n...\\nCalcular\\n
Buscar productos\\n\\n
Descuento general\\n\\nQuitar descuentosQuitar intereses\\nBorrar todo
\\n
\\n

No hay productos ni cuotas por pagar

\\n\\n\\n
Acciones
Producto o servcio
Periodo
P.Unitario
Cant.
\\n
Importe\\n
Intereses\\n
Descuento
\\n
Total

Calculando...

Aplicar descuentoBorrar producto\\n\\nEditar
{{item.description}}
{{item.partner.completeName}}
\\n{{item.initPeriodDate | date :\\'dd/MM/yyyy\\' }} - {{item.endPeriodDate | date :\\'dd/MM/yyyy\\' }}{{item.price | currency: \\'$\\': 2}}{{item.subtotal | currency: \\'$\\': 2}}{{item.interest | currency: \\'$\\': 2}}\\n{{item.discountAmmount | currency: \\'$\\': 2}}{{item.total | currency: \\'$\\': 2}}
\\n
Subtotal
\\n{{ vm.order.subtotal | currency : \\'$\\' : 2}}
Intereses
\\n+ {{ vm.order.interests | currency : \\'$\\' : 2}}
Descuento
\\n- {{ vm.order.discountAmmount | currency : \\'$\\' : 2}}
Total
\\n{{ vm.order.total | currency : \\'$\\' : 2}}
\\n
\\n2 Forma de pago\\n
\\n
PAGOS ( {{vm.order.payments.length}} ) \\nRestan por pagar {{ vm.order.total - vm.order.payed | currency: \\'$ \\': 2 }} de {{ vm.order.total | currency: \\'$ \\': 2 }}\\n
{{item.name}}\\n
Obigatorio
\\n
0\\\">\\n{{item.name}}\\n
Obligatiorio
El importe no puede ser menor a 0.01
El importe excede el total a pagar.\\n
\\n{{item.name}}\\n
Agregar
Forma de pagoOpción\\nImporteReferenciaTPV

No hay pagos registrados

\\n{{item.paymentMethod.name}}{{item.paymentMethodOption.name}}{{item.ammount | currency : \\'$ \\': 2}}\\n{{item.reference}}{{item.tpv.name}}Borrar\\n
\\n
\\nGenerar Observaciones
\\n
\\nDATOS DE FACTURACIÓN
\\n{{item.addressType.name}} - {{item.street}} {{item.number}} ...\\n\\nModificar?
\\nIngrese nombre
Ingrese RFC
Ingrese dirección
Ingrese Extensión
\\n
Ingrese Estado\\n
Ingrese Municipio
\\n
Ingrese colonia
\\n
\\nIngrese C.P.
\\n
Ingrese ciudad
\\n
Ingrese correo
\\nFormato de email incorrecto
\\n
3\\n \\n Vista previa

Datos de socio

{{vm.order.partner.completeName}}
\\n\\n{{item.paymentMethod.name}} {{item.paymentMethodOption.name}}({{item.ammount | currency: \\'$ \\': 2}}),
{{vm.order.address.razonSocial}} [{{vm.order.address.rfc}}]
\\n{{vm.order.address.street}} No.{{vm.order.address.number}} Int.{{vm.order.address.interiorNumber}} {{vm.order.address.state}} {{vm.order.address.municipio}} {{vm.order.address.colony}} CP. {{vm.order.address.zipCode}}\\n
Tel.{{vm.order.address.phone}} Email:{{vm.order.address.email}}
\\n
Producto o servcio
P. Unitario
Cant.
Subtotal
Descuento
Total
\\n{{item.description}}
0\\\">\\n{{p.productPropertyName}}: {{p.value}} /
/ Domicilio: {{item.address.selectingProductSelect}} / Evento: {{item.calendarEvent.title}} \\n/ Empleado: {{item.employee.name}} {{item.employee.lastname}} \\n/ Mascota: {{item.pet.name}}
{{item.price | currency: \\'$\\': 2}}{{item.quantity}}{{item.subtotal | currency: \\'$\\': 2}}{{item.discountAmmount | currency: \\'$\\': 2}}\\n{{item.total | currency: \\'$\\': 2}}
\\n\\n\\n
Subtotal
{{ vm.order.subtotal | currency : \\'$\\' : 2}}
Intereses
\\n+ {{ vm.order.interests | currency : \\'$\\' : 2}}
Descuento
\\n- {{ vm.order.discountAmmount | currency : \\'$\\' : 2}}
Total
\\n{{ vm.order.total | currency : \\'$\\' : 2}}
\\nValidarEditar
Anterior
\\nSiguienteGuardar\\n Enviando...
\");\n$templateCache.put(\"app/main/invoices/views/orders/receipt/receipt.html\",\"
ImprimirFacturar\\nTamaño
\\n
{{vm.settings.name}}
{{vm.settings.address}}
\\nTelefono: {{vm.settings.phone}}
Email: {{vm.settings.email}}
\\n
Web: {{vm.settings.webUrl}}
SOCIO
{{vm.order.partner.completeName}}
\\nTeléfono: {{vm.order.partner.phone}}
Email\\n: {{vm.order.partner.email}}
FOLIO\\n{{vm.order.folio}}
MEMBRESÍA\\n{{vm.order.partner.sequentialNumber}}
FECHA\\n{{vm.order.insertDate | date : \\'dd/MM/yyyy HH:mm\\'}}
TOTAL\\n{{vm.order.total | currency}}
\\n
CONCEPTOSPRECIOCANTINTERES\\nDESCUENTOTOTAL
{{item.description}}
\\n{{item.partner.completeName}}
{{item.price | currency}}\\n{{item.quantity}}{{item.interest | currency}}\\n{{item.discountAmmount | currency}}{{item.total | currency}}
\\n
SUBTOTAL\\n{{vm.order.subtotal | currency}}
INTERESES+{{vm.order.interests | currency}}\\n
DESCUENTO-{{vm.order.discountAmmount | currency}}
TOTAL{{vm.order.total | currency}}
Observaciones
{{vm.order.notes}}
Este documento no es un comprobante fiscal
{{vm.settings.name}}
\\n{{vm.settings.address}}
Teléfono: {{vm.settings.phone}}
\\nEmail: {{vm.settings.email}}
Web: {{vm.settings.webUrl}}
\\n
\\nSOCIO
{{vm.order.partner.completeName}}
Teléfono\\n: {{vm.order.partner.phone}}
Email: {{vm.order.partner.email}}
\\n
\\n
FOLIO\\n{{vm.order.folio}}
MEMBRESÍA\\n{{vm.order.partner.sequentialNumber}}
FECHA\\n{{vm.order.insertDate | date : \\'dd/MM/yyyy HH:mm\\'}}
TOTAL\\n{{vm.order.total | currency}}
\\n\\n\\n
CONCEPTOSPRECIOCANTINTERESDESCUENTOTOTAL
{{item.description}}
{{item.partner.completeName}}
{{item.price | currency}}{{item.quantity}}{{item.interest | currency}}{{item.discountAmmount | currency}}{{item.total | currency}}
\\n
SUBTOTAL{{vm.order.subtotal | currency}}
\\nINTERESES+{{vm.order.interests | currency}}
DESCUENTO\\n-{{vm.order.discountAmmount | currency}}
TOTAL{{vm.order.total | currency}}\\n
Observaciones
\\n
{{vm.order.notes}}
\\nEste documento no es un comprobante fiscal
\");\n$templateCache.put(\"app/main/pages/profile/tabs/main/main.html\",\"
\\nInformación principal
Ingrese correo electronico
\\nFormato de email incorrecto
Ingrese Nombre(s)
\\n
Ingrese Apellidos
Guardar
\\nCambiar Avatar
Cargar
\");\n$templateCache.put(\"app/main/pages/profile/tabs/change-password/change-password.html\",\"
\\nCambio de contraseña
\\n
\\n
Ingrese contraseña anterior
Ingrese nueva contraseña
\\nConfirme contraseña nueva
Las contraseñas no coinciden
\\n
Cambiar\\n
\");\n$templateCache.put(\"app/main/partners/views/partners/info/info.html\",\"
\\n
\\n
Información de Socios\\n
Buscar por:
{{opt.name}}
Buscar
\\n
\\n
#Resultados de busqueda
No se encontraron datos
{{item.sequentialNumber}}{{item.completeName}}
\\n

\\n\\n\\n
#Familiares
No se encontraron datos\\n
{{item.id}}{{item.completeName}}
Datos generales
\\n

Informacion de Titular o Familiar

\\n
\\n\\n\\n
\\n\\n
\\nModificar\\nPases y credenciales
\\nMensajesEnvia credencial
\\n
\");\n$templateCache.put(\"app/main/partners/views/partners/partner/partner.html\",\"
\\n# {{vm.item.sequentialNumber}} - {{vm.item.name}} {{vm.item.fatherLastname}} {{vm.item.motherLastname}}
Detalle de Usuario
FacturarGUARDANDO... GUARDAR
Principal
{{ item.name }}\\n
\\nSeleccione Tipo de socio.
\\n
Ingrese serie.\\n
Ingrese número.
\\n
Buscar Acción\\n
Ingrese nombre(s).
Ingrese Apellido paterno(s).
\\n
0 && vm.item.isRecurrent\\\">Cargo automatico
\\nMostrar Contrato\\nMostrar Kardex
{{ item.name }}\\n
Seleccione País.\\n
{{ item.name }}
Seleccione Sexo
\\n
{{ item.name }}
Seleccione Profesión.\\n
\\n
Seleccione fecha\\n
Fecha incorrecta
\\n({{vm.item.age}} años)
\\n
Ingrese teléfono.
\\n
Ingrese Email.
\\nFormato de Email incorrecto.
{{ item.name }}
Seleccine medio de comunicación.\\n
0\\\">
{{ item.name }}
Seleccine cuota.
\\n
\\n{{ item.periodicity.name }} ({{item.price | currency : \\'$ \\' : 2}})
\\nSeleccione periodicidad de cuota.
\\n\\n{{ item.name }} (INACTIVO)\\n{{ item.name }}\\nCálculo Recurrente\\n
\\n 0\\\">\\n\\n{{ item.name }} {{item.fatherLastname}} {{item.motherLastname}}
Seleccione Vendedor.
\\n
{{ item.name }}\\n 0\\\" ng-disabled=\\\"!vm.item || !vm.item.branches || vm.item.branches.length == 0\\\">Accesos a club\\n
ActivoBloqueadoAutenticación por huella\\n
0\\\">\\nOtras cuotas 0\\\">Fotos 0\\\">Direcciones 0\\\">Familiares 0 && vm.item.isRecurrent\\\">Ausencias\\n 0\\\">Actividades 0\\\">Niveles de Avance 0\\\">Rentables 0\\\">Becas 0\\\">Resumen Pagos
\");\n$templateCache.put(\"app/main/partners/views/partners/partners/partners.html\",\"
\\n
\\nSocios
\\nNo de socios: {{vm.total}}
\\nBUSCAR
\\nNuevo
Solo TitularesTitulares y familiares
#
Nombre
No. Credencial
Inscripción
Pagado
\\n{{item.sequentialNumber}}{{item.completeName}}C{{item.credentialCode}}\\n{{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}{{item.payedDate | date: \\'dd/MM/yyyy\\'}}\\n
Página {{ vm.pageIndex }} de {{ vm.pageTotal }}Anterior= vm.pageTotal\\\" ng-click=\\\"vm.nextPage()\\\">Siguiente
MostrarCambio de fechas\\n\\nFacturar
\\n\\n
\\n
\\n
\\n
\");\n$templateCache.put(\"app/main/security/views/branches/branch/branch.html\",\"
{{vm.item.name}}
\\nDetalle de Sucursal
GUARDAR\\n
\\nInformación de Sucursal
Ingrese nombre(s).
\\n{{option.name}}\\n
\\nSeleccione almacen.
Ingrese prefijo de facturación.
\\nPrefijo demasiado largo.
Activo
Configuraciones

Configuraciones de sistema

Ingrese Interes.
Ingrese dias de gracia.
Usa firma con mouse\\n
{{item.name}}
\\nSeleccione tipo de descuento.
\\n{{item.name}}

Configuraciones de recibo

\\n
Ingrese Nombre de empresa.
\\n
Ingrese dirección de la empresa.
\\n
\\n
Ingrese teléfono.
Ingrese correo electrónico.\\n
\\n
Ingrese página web.
Ingrese numero de copias del recibo.

Imagen de recibo

Subir

Configuraciones del SAT

\\n
Ingrese RFC.
\\n
Ingrese razon social.\\n
\\n{{item.name}}
Seleccione Impuesto del SAT.\\n
\\n
Ingrese RFC predeterminado.
\\n
\\nIngrese Razon Social predeterminado.

Para Facturar\\n

Ingrese Serie.
Solo se permiten 3 dígitos máximo.
\\n
\\nIngrese Numero inicial.
Mínimo debe ser 1.
\\n
\\n{{opt.name}}
\\nSeleccione modo de facturación.
\\nCambiar certificado
Subir certificado
{{vm.item.setting.certificateFileName}}\\n
Cambiar llave
Subir llave
{{vm.item.setting.keyFileName}}
Cambiar Cadena Original
\\nSubir Cadena Original
Cambiar PFX
Subir PFX
\\n

Datos de detalle de orden de venta

Ingrese RFC.
\\n
\\n[{{item.code}}] {{item.description}}
Seleccione Impuesto del SAT.\\n
\\n{{item.description}}
Seleccione Impuesto del SAT.\\n
\\n
\\nSeleccione Valor de Impuesto del SAT.
\\n{{item.name}}
\\nCampo obligatorio.
{{item.name}}
Campo obligatorio.\\n
{{item.name}}
\\nCampo obligatorio.

\\nConfiguración de Envío de Correo Electrónico

\\n\\n\\n
\\n
\");\n$templateCache.put(\"app/main/security/views/branches/branches/branches.html\",\"
\\nSucursales
No de sucursales: {{vm.branches.length}}
Nuevo\\n
\\n
ID
Nombre
Almacen
Activo
Acciones
{{item.id}}{{item.name}}{{item.warehouse.name}} \\n
\");\n$templateCache.put(\"app/main/security/views/userTypes/userTypes/userTypes.html\",\"
\\nTipos de usuario
No de tipos de usuario: {{vm.items.length}}
\\n
Nuevo\\n
\\n\\n
ID
Nombre
Activo
Acciones
{{item.id}}{{item.name}} \\n
\");\n$templateCache.put(\"app/main/security/views/userTypes/userType/userType.html\",\"
\\n{{vm.item.name}} {{vm.item.fatherLastname}} {{vm.item.motherLastname}}
\\nDetalle de Usuario
\\nGUARDAR
\\nInformación Principal
\\n
Ingrese nombre(s).
Activo
\\nMostrar todos los prospectos
Accesos

Seleccione Accesos

  • \\n{{menu.label}}
      0\\\">
    • {{submenu.label}}
        0\\\">
      • {{control.label}}
      • \\n
\");\n$templateCache.put(\"app/main/security/views/users/user/user.html\",\"
\\n{{vm.item.name}} {{vm.item.fatherLastname}} {{vm.item.motherLastname}}
\\nDetalle de Usuario
GUARDAR
Información de Usuario
\\n
Ingrese nombre(s).
\\n
\\n
Ingrese usuario.
\\n
Ingrese correo electrónico.
\\nNo contiene formato de correo electrónico.
Ingrese contraseña.
\\n
Ingrese confirmación de contraseña.
\\nLas contraseñas no coinciden
{{ item.name }}\\n
Seleccione tipo de usuario.\\n
Activo
Sucursales

Sucursales

\\n
{{item.name}}
\\n
\");\n$templateCache.put(\"app/main/security/views/users/users/users.html\",\"
\\nUsuarios
No de usuarios: {{vm.users.length}}
Nuevo\\n
\\n
ID
Usuario
Nombre
Activo
Acciones
{{item.id}}{{item.name}} {{item.fatherLastname}} {{item.motherLastname}}{{item.username}} \\nEditar usuarioReestablecer contraseña\\n
\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/vertical/step/vertical-step.html\",\"
{{stepInfo.stepTitleTranslate | translate }}
{{stepInfo.stepTitle}}
Optional
Back\\nNext\\nSubmit
\");\n$templateCache.put(\"app/main/accionistas/views/acciones/dialogs/dialog-massiveAdd/dialog-massiveAdd.html\",\"
AGREGAR ACCIONES MULTIPLES\\n
\\n
\\n
Ingrese número inicial.\\n
\\nIngrese número final.
GUARDAR GUARDANDO...
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/duesRules/dialogs/dialog-detail/dialog-detail.html\",\"
AGREGAR / EDITAR REGLA DE CUOTA\\n
{{opt.name}}\\n{{item.name}}\\nMixto\\n{{opt.name}}\\n{{opt.name}}\\n\\nForzar?
GUARDAR GUARDANDO...
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/passes/dialogs/dialog-massivePassesRemove/dialog-massivePassesRemove.html\",\"
\\nBORRAR multiples pases
Ingrese número inicial.\\n
El numero inicial mínimo es 50,000.
\\n
Ingrese número final.
\\nEl numero final mínimo es 50,001.
BORRAR BORRANDO...
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/passes/dialogs/dialog-massivePasses/dialog-massivePasses.html\",\"
\\nMultiples pases
\\n{{item.name}}
\\n
Seleccione tipo de pase.
\\nUltimo generado: {{vm.lastNumber}}
\\n
Ingrese número inicial.\\n
El numero inicial mínimo es 50,000.
\\n
Ingrese número final.
\\nEl numero final mínimo es 50,001.
GUARDAR GUARDANDO...
\\n
\");\n$templateCache.put(\"app/main/catalogs/views/products/products/dialogs/dialog-massive.html\",\"
\\nCarga de productos masiva
{{ item.name }}
Seleccione tipo de producto.\\n
\\nIngrese prefijo de descripción del producto.
\\nIngrese prefijo de código.

Cargando...

\\n
Comenzar carga
Cerrar
\\n
\");\n$templateCache.put(\"app/main/invoices/views/plannedProducts/dialogs/dialog-add/dialog-add.html\",\"
\\nAGREGAR CARGO(S) PERIODICOS\\n
\\n\\n{{item.name}}
{{item.completeName}}\\n\\n{{item.completeName}}\\n
\\n{{item.name}}{{item.name}}
Titular - Familiar - {{item.name}}\\n
\\n{{item.product.name}} - ({{item.price | currency: \\'$ \\': 2}})\\n\\n\\n
\\nSeleccione fecha
Fecha incorrecta
\\n
GUARDAR\\n GUARDANDO...
\");\n$templateCache.put(\"app/main/partners/views/prospectCalendar/dialogs/dialog-event/dialog-event.html\",\"
\\n
\\n{{vm.dialogTitle}}
\\n{{ item.completeName }}
Seleccione prospecto.
\\n
\\n\\n
\\n
\\nGUARDARCANCELAR
\");\n$templateCache.put(\"app/main/partners/views/partners/info/credential/credential.html\",\"
Imprimir\\nEnviar por Email
\\n
\\n
\");\n$templateCache.put(\"app/main/partners/views/partners/info/printable-pass/printable-pass.html\",\"
Imprimir\\nEnviar por Email\\n
\\n
{{vm.item.pass.passType.name}}
VIGENCIA ({{vm.item.validFrom | date: \\'dd/MM/yyyy\\'}}\\n - {{vm.item.validTo | date: \\'dd/MM/yyyy\\'}})
ASIGNADO A (\\n{{vm.item.name}})
\");\n$templateCache.put(\"app/main/partners/views/partners/partner/contract/contract-altea.html\",\"
ImprimirGuardar\\nFirmar\\nEnviar por email\\nObtener datos nuevamente
\\n\\n\\n\\n\\n\\n
\\nDIR/ADM/LEG/CSD/20.0
ACUERDO DE MEMBRESÍA | CARÁTULA
NORMAS ADMINISTRATIVAS Y CONTRATO DE SERVICIOS DEPORTIVOS Y RECREATIVOS\\n
ACUSE DE RECIBO Y CONFORMIDAD
ALTEA FITNESS, S.A. DE C.V.
\\nTipo de membresía:\\n{{vm.data.dueName}}Fecha de Membresía{{vm.data.date| date: \\'dd/MM/yyyy\\'}}\\n
Nombre del titular y/o usuario(a){{vm.data.partnerName}}Fecha de nacimiento
(dd/mm/aa)
{{vm.data.birthdate | date: \\'dd/MM/yyyy\\'}}\\n
Domicilio:\\n{{vm.data.addressStreet}}, {{vm.data.addressColony}}, {{vm.data.addressMunicipio}}, {{vm.data.addressState}}\\n
Correo electrónico{{vm.data.email}}Teléfono fijo\\n{{vm.data.addressPhoneNumber}}Telefono celular{{vm.data.AddressPhoneNumber2}}

\\nPor medio de la presente, manifiesto a ustedes que estoy enterado del contenido y alcance legal de las Normas Administrativas y Financieras de \\nALTEA FITNESS S.A. DE C.V.(en lo sucesivo ALTEA WELLNESS CLUB\\n). Manifiesto que es mi deseo y voluntad inscribirme y/o reinscribirme al Club deportivo ALTEA WELLNESS CLUB\\n, por lo cual, para los efectos administrativos y legales procedentes \\nMANIFIESTO QUE ALTEA WELLNESS CLUB HA HECHO DE MI CONOCIMIENTO, ME HA EXPLICADO Y HE ENTENDIDO LOS SERVICIOS OFERTADOS, LOS COSTOS DE INSCRIPCIÓN Y/O MEMBRESÍAS, LAS CUOTAS, PAGOS, PAGOS EXTRAORDINARIOS Y FORMAS DE PAGO, POR LO CUAL, EN ESTE MOMENTO EXPRESO MI ABSOLUTA CONFORMIDAD CON LA NORMATIVIDAD ADMINISTRATIVA, REGLAMENTO DEL CLUB Y LOS COSTOS DE LOS SERVICIOS OFERTADOS QUE ALTEA WELLNESS CLUB ME HA COMUNICADO, LOS CUALES ME OBLIGO A CUMPLIR.\\n

\\nDatos fiscales (en caso de requerir factura)
Nombre o Razón Social\\n
\\n{{vm.data.razonSocial}}
R.F.C:{{vm.data.rfc}}
Calle y número{{vm.data.factAddressStreet}}
Colonia:{{vm.data.factAddressColony}}Localidad:{{vm.data.factAddressMunicipio}}Estado:{{vm.data.addressState}}
Correo electrónico:{{vm.data.FactAddressEmail}}
\\nAnexo II. Contrato de Servicios de ALTEA FITNESSS.A. DE C.V.
Tipo de membresía:\\n{{vm.data.dueName}}\\nFolio de Membresía{{vm.data.folioMembresia}}
Nombre del Titular Y/O Usuario:{{vm.data.partnerName}}
Nombre(s)Apellido PaternoApellido Materno
Usuario:{{dependent.completeName}}\\nFecha de nacimiento:\\n{{dependent.birthdate| date: \\'dd/MM/yyyy\\'}}Parentesco:{{dependent.partnerType.name}}

\\n________________________________________________________

Nombre:\\n {{vm.data.partnerName}}

Fecha {{vm.data.date| date: \\'dd/MM/yyyy\\'}} No. de Membresia:\\n {{vm.data.folioMembresia}}

www.alteawellnessclub.comTel: 771 169 0005 / 7711690034
\\nCONTRATO DE ADHESIÓN PARA LA PRESTACIÓN DE SERVICIOS DEPORTIVOS E INSTALACIONES
\\nCON EL CONJUNTO DE DERECHOS Y OBLIGACIONES INHERENTES AL PRESENTE CONTRATO Y OBLIGACIONES

\\nCONTRATO DE ADHESIÓN PARA LA PRESTACIÓN DE SERVICIOS DEPORTIVOS E INSTALACIONES\\n que celebran por una parte ALTEA FITNESS S.A. DE C.V. también conocida como \\nALTEA WELLNESS CLUB, a quien en lo sucesivo se le denominará EL CLUB\\n y por la otra, la persona cuyos datos aparecen en el presente contrato, denominado EL TITULAR\\n el cual representa a la (s) persona (s) que además de él tendrán los derechos que concede el presente contrato en su calidad de \\nUSUARIO (S)\\n, y que en lo sucesivo y para los efectos del presente contrato se les denominará conjuntamente como \\nEL TITULAR Y/O USUARIO(S)\\n los cuales están de acuerdo con sujetar su voluntad a lo establecido en las siguientes:

CLÁUSULAS

PRIMERA.- OBJETO DEL CONTRATO.-\\n A través del presente contrato EL CLUB pone a disposición de EL TITULAR Y/O USUARIO(S)\\n\\n sus instalaciones, personal y equipos para la práctica de las actividades deportivas multidisciplinarias que para tal efecto diseñe y establezca \\nEL CLUB en los términos señalados tanto en el presente contrato como en el reglamento interno de \\nEL CLUB el cual forma parte integrante del presente contrato. EL TITULAR Y/O USUARIO (S)\\n manifiesta (n)que previo a la celebración del presente contrato EL CLUB\\n le dio a conocer sus instalaciones y equipos,los horarios de servicio, los tipos de servicios que presta, los costos y la periodicidad de los pagos, manifestando \\nEL TITULAR Y/O USUARIO(S) conocer estos y estar conforme con los mismos.

\\nSEGUNDA.- LA MEMBRESÍA.- El objeto de la membresía, en adelante LA MEMBRESÍA\\n, es constituir una afiliación entre EL TITULAR Y/O USUARIO(S) y EL CLUB\\n para el acceso a las instalaciones, personal y equipos para la práctica de las actividades deportivas multidisciplinarias establecidas. A partir de la fecha de adquisición de \\nLA MEMBRESÍA, EL CLUB acepta y reconoce la membresía de EL TITULAR Y/O USUARIO(S)\\n, quedando obligado a conducirse conforme las reglas establecidas en el reglamento de EL CLUB.

\\nEL TITULAR Y/O USUARIO(S) reconocen y aceptan expresamente que los derechos que otorga \\nLA MEMBRESÍA son extensivos únicamente para los miembros que integran LA MEMBRESÍA\\n que previamente ha quedado establecido y registrado ante EL CLUB\\n y que estos derechos son intransferibles.

TERCERA.- COSTO DE LA MEMBRESÍA.-\\n El costo y tipo de MEMBRESÍA que acredita a EL TITULAR Y/O USUARIO(S)\\n como miembro de EL CLUB dependerá del número de usuarios, los cuales se detallan en el ANEXO 1\\n del presente contrato y que forma parte integrante del mismo.

El costo de |LA MEMBRESÍA\\n será único y cubre la filiación entre EL TITULAR Y/O USUARIO(S) y EL CLUB, \\ndicho costo será independiente\\n de las cuotas de mantenimiento, gastos de administración, cuotas extras y demás gastos extraordinarios que se generen por el uso de los servicios que presta \\nEL CLUB, los cuales en todo caso deberán ser cubiertos por EL TITULAR Y/O USUARIO(S).\\n

EL TITULAR Y/O USUARIO(S)\\n reconocen y aceptan expresamente que el pago (costo) por concepto de LA MEMBRESÍA\\n por ningún motivo y/o circunstancia será reembolsable.

LA MEMBRESÍA\\n será vitalicia y no requerirá de renovación siempre y cuando se haga uso de forma continua e ininterrumpida de la misma y se cubran puntual e ininterrumpidamente las cuotas de mantenimiento respectivas.\\n

CUARTA.- CUOTA DE MANTENIMIENTO.-\\n Con el objeto de cubrir el costo de mantenimiento por los servicios, instalaciones y equipo \\nEL TITULAR Y/O USUARIO(S)\\n se obligan a cubrir de forma mensual o anual según su elección, las cuotas mensuales de mantenimiento cuyo costo dependerá del número de usuarios que hagan uso de las instalaciones de \\nEL CLUB y cuyo costo se detalla en el ANEXO 1\\n del presente contrato y que forma parte integrante del mismo.
EL TITULAR Y/O USUARIO(S)\\n están de acuerdo en que el costo de la cuota de mantenimiento tendrá un incremento de forma ANUAL el cual será informado previamente por \\nEL CLUB con por lo menos TREINTA DÍAS de anticipación al incremento mencionado.
\\n
Todo mes de pago es forzoso aun y a pesar de que EL TITULAR Y/O USUARIO(S)\\n no hayan ocupado los servicios materia del presente contrato. Para el caso de que EL TITULAR Y/O USUARIO(S)\\n no haya cubierto en tiempo y forma el pago de su cuota mensual, EL CLUB\\n se reserva el derecho de negar el acceso y/o prestación de los servicios contratados sin responsabilidad alguna.
\\n
QUINTA.- FORMA DE PAGO.- EL TITULAR Y/O USUARIO(S)\\n se obligan a pagar la cuota de mantenimiento mencionada en la cláusula CUARTA anterior \\nA MÁS TARDAR EL QUINTO DÍA NATURAL (CALENDARIO) DE CADA MES con las siguientes formas de pago:

  1. \\nDIRECTAMENTE EN SUCURSAL BANCARIA MEDIANTE EL USO DE FICHA DE DEPÓSITO EN EL BANCO (BANBAJIO) No. DE CUENTA 27415454 O BIEN POR TRANSFERENCIA ELECTRÓNICA O SPEI A LA CLABE 030290900020810846. BANCO BANBAJIO A NOMBRE DE ALTEA FITNESS, S.A. DE C.V.\\n
  2. MEDIANTE CARGO A TARJETA DE CREDITO Y/O DÉBITO CON TERMINAL PUNTO DE VENTA.
  3. \\n\\nMEDIANTE CARGO A TARJETAS DE CRÉDITO 3 Y 6 MESES SIN INTERESES (UNICAMENTE APLICA PARA EL PAGO DE CUATRO MESES DE LA CUOTA DE MANTENIMIENTO EN ADELANTE ASÍ COMO PARA LA MEMBRESÍA)\\n
  4. MEDIANTE LA DOMICILIACIÓN DE TARJETA DE CRÉDITO Y/O DÉBITO.
  5. \\nMEDIANTE PAGO EN EFECTIVO EN LA CAJA QUE SE UBICA DENTRO DE LAS INSTALACIONES DE EL CLUB.


\\nEL CLUB\\n no reconocerá los pagos que se hayan efectuado en forma diferente a los aquí establecidos. El recibo de caja, ficha de depósito o Boucher bancario obtenido será el comprobante de pago, el cual deberá ser conservado por \\nEL TITULAR Y/O USUARIO(S) para el caso de cualquier aclaración posterior.

\\nEL TITULAR Y/O USUARIO(S)\\n podrá optar por domiciliar el pago de su cuota mensual a una tarjeta de crédito o débito, en tal caso \\nEL TITULAR Y/O USUARIO(S) se obligan a tener fondos suficientes para que se realice el cargo correspondiente.\\n

SEXTA.- RECARGOS.- Para el caso de que EL TITULAR Y/O USUARIO(S)\\n no efectúen en tiempo y forma el pago de los servicios materia del presente contrato EL CLUB\\n podrá cobrar a EL TITULAR Y/O USUARIO(S)\\n un 5% adicional al costo mensual a partir del sexto día natural (calendario) de cada mes en que se preste el servicio; los recargos serán acumulables hasta en tanto \\nEL TITULAR Y/O USUARIO (S) den cumplimiento con la obligación insoluta.

\\nSÉPTIMA.- CREDENCIAL DE IDENTIFICACIÓN.-\\n Para tener acceso a las instalaciones y poder hacer uso de las mismas así como de los equipos y las actividades deportivas multidisciplinarias \\nEL TITULAR Y/O USUARIO(S)\\n deberán exhibir en el control de acceso la (s) credencial (es) que lo acrediten como miembros de EL CLUB\\n, dicha (s) credencial (es) deberá (n) ser portada por EL TITULAR Y/O USUARIO(S)\\n mientras permanezca en las instalaciones de EL CLUB y deberá se mostrada cuando el personal de \\nEL CLUB la solicite.

OCTAVA.- CUMPLIMIENTO DE LAS NORMAS Y REGLAMENTOS.-\\n Con el objeto de preservar el orden y seguridad de todos los usuarios, EL TITULAR Y/O USUARIO(S)\\n se obligan a respetar y cumplir en todo momento las disposiciones establecidas en las normas de seguridad, en los reglamentos de cada área de \\nEL CLUB\\n, así como en las indicaciones verbales que señalen los encargados de área y/o entrenadores y/o personal de \\nEL CLUB\\n. Cualquier violación a lo estipulado en la presente cláusula será causa suficiente para suspender los servicios materia del presente contrato sin responsabilidad alguna para \\nEL CLUB.

NOVENA.- LIMITE DE RESPONSABILIDAD.- EL TITULAR Y/O USUARIO(S)\\n son los únicos responsables por su condición física, estado de salud y seguridad, por lo cual EL CLUB\\n recomienda a EL TITULAR Y/O USUARIO(S)\\n que antes de iniciar cualquier plan de entrenamiento acudan con su profesional de la salud a efecto de que tengan conocimiento de las conveniencias y/o riesgos específicos de practicar actividad física. Derivado de lo anterior \\nEL TITULAR Y/O USUARIO(S)\\n manifiesta (n) que se encuentra (n) apto (s) físicamente para realizar las actividades que ofrece EL CLUB\\n\\n a través de sus instructores y demás personal, por lo que, desde este momento libera de cualquier responsabilidad a \\nEL CLUB\\n por cualquier lesión, accidente, enfermedad, padecimiento,contagio, infección, peligro de muerte o incluso la muerte que \\nEL TITULAR Y/O USUARIO(S)\\n pudiesen sufrir antes, durante o después de efectuar cualquier actividad dentro de EL CLUB\\n, ya sea por el uso de aparatos de ejercicio, de la práctica de algún deporte o de cualquier otra actividad que se realice dentro de las instalaciones de \\nEL CLUB.

Así mismo, EL CLUB\\n manifiesta que previo a la celebración del presente contrato, ha hecho del conocimiento a \\nEL TITULAR Y/O USUARIO(S)\\n,que los instructores, coaches, entrenadoresy personal en general que prestan sus servicios dentro de las instalaciones de \\nEL CLUB\\n únicamente fungen como personal de apoyo para indicar el uso de los aparatos, entrenamiento o la realización de una actividad física determinada pero en ningún motivo y bajo ninguna circunstancia podrán ser considerados profesionales de la salud, por lo cual tienen prohibido prescribir o sugerir cualquier tipo de dieta o medicamento. Para el caso de que algún miembro del personal de \\nEL CLUB sugiera a EL TITULAR Y/O USUARIO(S)\\n algún plan de nutrición o el consumo de algún alimento, medicamento, nutrimento o substancia de cualquier tipo, su consumo será bajo la estricta responsabilidad de \\nEL TITULAR Y/O USUARIO(S) quienes desde este momento deslindan a EL CLUB\\n de cualquier responsabilidad por los efectos que pudiesen causarle.

DÉCIMA.- PERTENENCIAS PERSONALES.-\\n El cuidado de las pertenencias personales y/o bienes de EL TITULAR Y/O USUARIO(S)\\n serán responsabilidad de cada usuario, razón por la cual EL CLUB\\n no se hará responsable por las perdidas, robos, extravío, daños y en general por cualquier menoscabo a los objetos de \\nEL TITULAR Y/O USUARIO(S).

EL TITULAR Y/O USUARIO(S)\\n podrán hacer uso de los lockers una vez que haya efectuado el proceso de contratación y pagado las cuotas establecidas para dicho servicio, esto con el objeto de depositar sus pertenencias, sin embargo, el correcto uso y seguridad de estos corren a cargo del propio \\nTITULAR Y/O USUARIO(S), por lo cual deslindan desde este momento de cualquier responsabilidad a \\nEL CLUB por las pérdidas o robos de sus objetos y pertenecías depositados dentro de los lockers.
\\n
DÉCIMA PRIMERA.- ACCESO DE MENORES DE EDAD.-\\n Los menores de edad deberán acceder a las instalaciones de EL CLUB\\n acompañadosde un adulto quien será responsable de su integridad y quien deberá acompañar al menor en todo momento.
\\n
DÉCIMA SEGUNDA.- TERMINACIÓN ANTICIPADA.- Para el caso de que EL TITULAR Y/O USUARIO(S)\\n decida terminar de forma anticipada el presente contrato, deberá hacerlo del conocimiento por escrito de \\nEL CLUB\\n con por lo menos treinta días de anticipación, debiendo cubrir la cantidad de a un mes de cuota de mantenimiento al momento de efectuar dicha solicitud por concepto de pena convencional.\\n

La solicitud de terminación anticipada la deberá hacer el TITULAR Y/O USUARIO (S)\\n en términos que se menciona en la presente cláusula y únicamente surtirá efectos cuando su trámite se realice por escrito en el área correspondiente (administración y/o atención al cliente). Cualquier otro procedimiento o solicitud efectuada ante un área o dependencia diferente de la que expresamente se señala en el cuerpo de la presente cláusula, se tendrá por no realizada y en todo caso subsistirá la obligación de pago a cargo de \\nEL TITULAR Y/O USUARIO (S)\\n, en términos y condiciones a que se refiere el apartado VI del presente contrato de servicios.

Cuando \\nEL TITULAR Y/O USUARIO (S)\\n hubiere efectuado el pago anticipado del periodo (12 meses) y se vean obligados a terminar anticipadamente el presente contrato, se \\n\\nAPLICARÁ LA DEVOLUCIÓN DEL MONTO PAGADO DEL MES O DE LOS MESES QUE NO DISFRUTARÁ DEL SERVICIO (PREVIA NOTIFICACIÓN POR ESCRITO) AL ÁREA DE ADMINISTRACION Y/O ATENCIÓN AL CLIENTES, CON 20 DÍAS NATURALES DE ANTICIPACIÓN.\\n

DÉCIMA TERCERA.- DOMICILIO DE LAS PARTES.-\\n Las partes señalan como sus respectivos domicilios para todo lo relacionado con la interpretación, cumplimiento y en su caso ejecución del presente contrato, los siguientes:\\n

  1. ELCLUB: ALTEA FITNESS S.A. DE C.V. (ALTEA WELLNESS CLUB)\\n Ubicado en Boulevard Ramón G. Bonfil No. 1800. Col. Venta Prieta C.P. 42184, Pachuca de Soto, Hidalgo.
  2. \\nEL TITULAR Y/O USUARIO (S) el domicilio que aparece en los datos correspondientes de \\nEL TITULAR Y/O USUARIO(S) en el anverso del presente contrato.


\\nDÉCIMA CUARTA.- JURISDICCIÓN.-\\n Para todo lo relativo a la interpretación y cumplimiento del presente contrato, las partes se someten de forma expresa a la jurisdicción y competencia de los tribunales de la Ciudad de Pachuca de Soto, Estado de Hidalgo, renunciando de forma expresa a cualquier otra jurisdicción que en razón de sus domicilios presentes o futuros les pudiesen corresponder.\\n

\\nEl presente contrato se firma por duplicado en la ciudad de Pachuca de Soto, Estado de Hidalgo, a {{vm.data.date| date: \\'dd\\'}} de {{vm.data.date| date: \\'MM\\'}} de {{vm.data.date| date: \\'yyyy\\'}}.\\n
\\n
Firmar\\n
\\n{{vm.data.partnerName}}
{{vm.data.folioMembresia}}\\n
AVISO DE PRIVACIDAD\\nDIR/ADM/LEG/APS/20.0

\\nALTEA FITNESS, S.A. DE C.V., mejor conocida como ALTEA WELLNESS CLUB con domicilio en Boulevard Ramón G. Bonfil, número 1800, Colonia Venta Prieta, en la Ciudad de Pachuca de Soto, Estado de Hidalgo, C.P. 42084 y portal de internet alteawellnessclub.com es responsable del uso y protección de sus datos personales razón por la cual le hacemos saber lo siguiente:\\n

\\nLos datos personales que recabaremos de usted serán utilizados para las siguientes finalidades necesarias para prestar el servicio que se solicita:\\n

  • Verificar y confirmar su identidad.
  • Estableces los datos de contacto.
  • \\nComercialización de productos y servicios que ofrecemos.
  • \\nDatos respecto de sus características y su condición física.
  • Elaboración y expedición de comprobantes fiscales.\\n
  • Dar atención al cliente.
  • \\nAtender y dar seguimiento a dudas, aclaraciones, quejas, sugerencias y reclamaciones.
  • \\nTratándose de trabajadores o aspirantes que deseen trabajar en ALTEA WELLNESS CLUB los datos recabados se utilizarán para comprobar las cualidades manifestadas por el aspirante, para elaborar el contrato de trabajo y para conformar el expediente laboral.\\n

\\nDe forma adicional, utilizaremos su información personal para las siguientes finalidades, las cuales NO SON NECESARIAS para prestar el servicio solicitado, pero que podrán permitirnos brindarle un mejor servicio y atención:\\n

  • Informarle respecto de nuestros servicios, ofertas y promociones.
  • \\nParticipar en nuestros eventos, concursos y sorteos.
  • Evaluación de la calidad en el servicio.
  • \\nEnvío propaganda comercial.

\\nEn caso de no desear que sus datos personales sean utilizados para los fines secundarios antes descritos, solicitamos nos escriba un correo a la siguiente dirección a contacto@alteawellnessclub.com; la negativa para el uso de sus datos personales para las finalidades secundarias no podrá ser motivo para que le neguemos los servicios o productos que solicite o contrate con nosotros.\\n

\\nPara conocer mayor información sobre los términos y condiciones en que serán tratados sus datos personales, como los terceros con quienes compartimos su información personal y la forma en que podrá ejercer sus derechos ARCO, puede consultar el aviso de privacidad integral en alteawellnessclub.com/privacidad en la sección aviso de privacidad.\\n

Última modificación 19 de junio de 2020.

\\nAVISO DE PRIVACIDAD. ALTEA FITNESS, S.A. DE C.V., también con conocida como ALTEA WELLNESS CLUB, S.A. DE C.V. con domicilio en Boulevard Ramón G. Bonfil, número 1800, Colonia Venta Prieta, en la Ciudad de Pachuca de Soto, Estado de Hidalgo, C.P. 42084 utilizará sus datos personales recabados para: Verificar y confirmar su identidad. Estableces los datos de contacto. Comercialización de productos y servicios que ofrecemos. Datos respecto de sus características y su condición física. Elaboración y expedición de comprobantes fiscales. Dar atención al cliente. Atender y dar seguimiento a dudas, aclaraciones, quejas, sugerencias y reclamaciones. Tratándose de trabajadores o aspirantes que deseen trabajar en ALTEA WELLNESS CLUB los datos recabados se utilizarán para comprobar las cualidades manifestadas por el aspirante, para elaborar el contrato de trabajo y para conformar el expediente laboral. Para más información sobre el tratamiento y los derechos que puede ejercer puede acceder al aviso de privacidad integral en la página de internet https://alteawellnessclub.com/privacidad/\\n
ACUSE DE RECIBIDO DE REGLAMENTO INTERNO PARA USUARIOS\\nDIR/ADM/LEG/RGI/ACUS/20.0

\\nCertifico como titular de la membresía numero {{vm.data.folioMembresia}} que he recibo Reglamento Interno para Usuarios por parte de Altea Fitness S.A. de C.V. (Altea Wellness Club), aceptando términos y condiciones así como el alcances y propósitos de cada una de las pautas, procesos, reglas y normas que en el se establecen.\\n

\\n
\\n
\\nAVISO DE PRIVACIDAD. ALTEA FITNESS, S.A. DE C.V., también con conocida como ALTEA WELLNESS CLUB, S.A. DE C.V. con domicilio en Boulevard Ramón G. Bonfil, número 1800, Colonia Venta Prieta, en la Ciudad de Pachuca de Soto, Estado de Hidalgo, C.P. 42084 utilizará sus datos personales recabados para: Verificar y confirmar su identidad. Estableces los datos de contacto. Comercialización de productos y servicios que ofrecemos. Datos respecto de sus características y su condición física. Elaboración y expedición de comprobantes fiscales. Dar atención al cliente. Atender y dar seguimiento a dudas, aclaraciones, quejas, sugerencias y reclamaciones. Tratándose de trabajadores o aspirantes que deseen trabajar en ALTEA WELLNESS CLUB los datos recabados se utilizarán para comprobar las cualidades manifestadas por el aspirante, para elaborar el contrato de trabajo y para conformar el expediente laboral. Para más información sobre el tratamiento y los derechos que puede ejercer puede acceder al aviso de privacidad integral en la página de internet https://alteawellnessclub.com/privacidad/\\n
\\n
REGLAMENTODIR/ADM/LEG/RGI/20.0

\\nBIENVENIDA

\\nEn nombre del Consejo de Administración y nuestro equipo de colaboradores, le damos la más cordial Bienvenida a ALTEA WELLNESS CLUB.\\n
Cumplir con sus expectativas de calidad y de servicio es nuestro Objetivo.
\\nContacto: contacto@alteawellnessclub.com Blvd. Ramón G. Bonfil No. 1800. Col Venta Prieta, Pachuca de Soto, Hidalgo. C.P. 42084.\\n

CAPÍTULO I
GENERALES

\\nCon el objetivo de establecer reglas claras que propicien un ambiente de armonía y respeto entre nuestros usuarios, así como de regular el funcionamiento y uso de las instalaciones del Club, el Consejo de Administración de ALTEA FITNESS, S.A. DE C.V. en colaboración con las autoridades administrativas, operativas, deportivas y comités, publican el presente reglamento para el conocimiento y cumplimiento de sus usuarios.\\n

  1. \\nPara hacer uso de las instalaciones, es obligatorio haber adquirido los derechos mediante cualquiera de los contratos o formas establecidas por parte de ALTEA WELLNESS CLUB.\\n
  2. \\nEl Comité de Aceptación se reserva el derecho de admisión, mismo que aceptará o rechazará las solicitudes que le sean presentadas, con el objetivo de mantener un ambiente sano y cordial dentro ALTEA WELLNESS CLUB.\\n
  3. \\nEl Consejo de Administración se reserva el derecho de rechazar o aceptar mediante el contrato correspondiente, la realización de actividades o eventos deportivos, culturales o sociales con acceso a personas que no sean usuarios de ALTEA WELLNESS CLUB.\\n
  4. \\nEl acceso a las instalaciones de ALTEA WELLNESS CLUB ya sea como usuario, invitado o contratante se entenderá como un tácito consentimiento de las disposiciones y normas contenidas en este reglamento.\\n

CAPÍTULO II
DE LOS USUARIOS

\\nDe acuerdo con el numeral 4 del capítulo I de este reglamento, el acceso a las instalaciones de ALTEA WELLNESS CLUB, ya sea como usuario en cualquiera de sus modalidades o como invitado, le obliga a conocer y estar de acuerdo con las normas contenidas en este reglamento.\\n

  1. \\nSe llamarán usuarios a las personas que hayan adquirido una membresía mediante cualquiera de los contratos establecidos por ALTEA WELLNESS CLUB.\\n
  2. Los usuarios y tipos de membresías, tendrán las siguientes categorías:

MEMBRESÍA FAMILIAR\\n
\\nLos integrantes que la conforman deberán ser de línea directa: papá, mamá e hijos menores de 18 años. (Los últimos integrantes tienen costo adicional sobre el precio de lista).\\n
Es importante que en esta membresía exista un adulto responsable de los menores.

MEMBRESÍA DE PAREJA\\n
\\nLos integrantes que la conforman NO necesariamente deberán ser familiares, podrán ser: primos, amigos, compañeros de trabajo, etc. Caso especial: Cuando solo exista la figura de Mamá o Papá e hijo(a).\\n

MEMBRESÍA INDIVIDUAL
\\nComo su nombre lo indica lo conforma un solo integrante mayor de 18 años.

MEMBRESÍA EMPRESARIAL\\n
\\nEl uso de esta membresía es de uso exclusivo para organizaciones con las que se tenga un convenio, al igual que sus beneficios.\\n

MEMBRESÍA RESIDENTES
\\nEn el caso de Altea Luxury & Living, deberá pagar una cuota de inscripción y mantenimiento con un precio preferencial, la cual será asignada por Altea Fitness S.A. de C.V. (Altea Wellness Club).\\n

MEMBRESÍA ARRENDATARIOS
\\nBeneficio para los arrendatarios de Altea Luxury & Living (Torre 1 y 2). El cual consta de un 50% en el pago de la membresía y la totalidad de la cuota de mantenimiento.\\n

INSCRIPCIONES COLABORADORES
\\nBeneficio para familiares (cónyuges e hijos) de las personas que colaboran de manera directa o indirectamente con la empresa (Altea Wellnes Club, Altea Luxury & Living).\\n

USUARIO ADICIONAL

  1. \\nEl usuario titular deberá solicitar por escrito al Consejo de Administración, el ingreso del adicional reservándose el Club el derecho de admisión.\\n
  2. Se entiende como usuario adicional únicamente a los hijos del titular y/o su conyuge.
  3. \\nNo habrá más de cuatro usuarios adicionales por membresía.
  4. \\nLa cuota por usuario adicional será la que la Administración determine en su momento.

\\nUSUARIOS AUSENTES
\\nSe considera a los titulares y sus dependientes que por determinada circunstancia manifiesten por escrito, con treinta días de anticipación, su imposibilidad de hacer uso de los servicios de ALTEA WELLNESS CLUB. Sus cuotas de ausente correrán a partir del mes siguiente a aquél en que hayan hecho su petición por escrito, concluyendo el período solicitado, el usuario retornará a su calidad de usuario normal.\\n

  1. \\nEl status de ausencia se podrá solicitar por escrito en al área administrativa y sólo aplica para periodos de dos meses o más, cubriendo el monto de un mes de la cuota de mantenimiento vigente. Dicho monto podrá ser cubierto una vez que el usuario se reincorpore (no aplica para periodos de un mes).\\n
  2. \\nEl titular y todos los integrantes de la familia que decidan realizar su pago en cuota de ausente no tendrán derecho de hacer uso de las instalaciones como usuario del Club.\\n
  3. \\nEl realizar su pago en cuota ausente se refiere a mantener su membresía actualizada y no acumular algún adeudo, dicha cuota podrá respetarse en ausente por un periodo máximo de doce meses.\\n
  4. La solicitud para pago de cuota de ausente deberá hacerse por escrito treinta días antes de empezar el mes.\\n
  5. \\nLos usuarios que estén en calidad de ausentes no podrán ingresar y hacer uso de las instalaciones del Club con pases de cortesía o como invitado de otros usuarios, sólo podrán hacer uso de las instalaciones, pagando su pase con la cuota correspondiente.\\n

DE LAS MEMBRESÍAS

  1. \\nLa calidad de Residente no obliga ni da derecho al uso de las instalaciones del Club.
  2. \\nPara hacer uso de las instalaciones se requiere tener calidad de usuario, la que será otorgada por el consejo de administración a través del contrato de uso correspondiente.\\n
  3. \\nEl titular de la membresía podrá transferir sus derechos previa notificación por escrito así como la firma del formato de “convenio de cesión de derechos”, obligándose el nuevo usuario a firmar un contrato de prestación de servicios y deberá cubrir la cuota de traspaso correspondiente, esta cuota será una cantidad equivalente al 30 % del valor vigente en que el Club tenga a la venta este tipo de membresías.\\n
  4. \\nEn el caso de cesión de derechos de membresías, el nuevo titular será responsable de las cuotas de mantenimiento no cubiertas por el usuario original y en general de los adeudos originados por el usuario cedente.\\n
  5. \\nEl Club se reserva el derecho de admitir o no a nuevos usuarios de conformidad con la resolución que tome al efecto el Consejo de Administración, el cesionario deberá estar al corriente en el pago de sus cuotas de mantenimiento.\\n
  6. El titular de la membresía no podrá y renuncia al derecho de arrendar el uso de su membresía,
  7. \\nEl interesado en ser usuario ALTEA WELLNESS CLUB, ya sea por la adquisición de una membresía nueva, por la adquisición de una membresía a través de un traspaso. Deberá cubrir los siguientes requisitos:\\n
    1. Llenar y firmar la solicitud correspondiente.
    2. Suscribir el contrato de uso correspondiente.
    3. \\nPagar las cuotas de admisión y mantenimiento que fije el Consejo de Administración.
    4. \\nSi el interesado o futuros usuarios pertenecieron antes a ALTEA WELLNESS CLUB, no deberán tener registros de adeudos.\\n

CAPÍTULO III

SON DERECHOS DE LOS USUARIOS

  1. \\nTodos los usuarios cualquiera que sea su categoría en que hayan sido admitidos en ALTEA WELLNESS CLUB tendrán los mismos derechos y obligaciones.\\n
  2. \\nEl uso y goce de los servicios e instalaciones disponibles propiedad de ALTEA WELLNESS CLUB, siempre que estén al corriente en el pago de sus cuotas, excepto los que estén cubriendo cuota de ausente.\\n
  3. \\nPresentar por escrito individualmente a la Administración las sugerencias o comentarios para mejorar las instalaciones y los servicios de ALTEA WELLNES CLUB.\\n
  4. \\nParticipar en torneos, actividades y eventos que se promuevan por parte de ALTEA WELLNESS CLUB, siempre y cuando reúnan las condiciones y requisitos que en su momento se solicita.\\n

CAPÍTULO IV

SON OBLIGACIONES DE LOS USUARIOS
\\nLa calidad del usuario del Club sólo se comprueba con la credencial, control electrónico o biométrico que para tal efecto implemente el Consejo de Administración. El personal del Club tiene la facultad de solicitar a todas las personas que pretenden utilizar los servicios, instalaciones, establecimientos, locales y demás activos del Club que acrediten su calidad de usuarios, no teniendo derecho a utilizar los servicios que presta el Club quienes no cumplan con esta regla.\\n

  1. \\nEl cumplimiento de todas y cada una de las disposiciones tanto del contrato inicial de uso de membresía, como de los puntos establecidos en el presente reglamento.\\n
  2. \\nEs obligación del titular, hacer del conocimiento de los beneficiarios de su membresía los puntos establecidos en el presente reglamento.\\n
  3. \\nConservar una conducta de respeto y tolerancia dentro de ALTEA WELLNESS CLUB, tanto los usuarios como familiares e invitados en su caso.\\n
  4. \\nRespetar y guardar toda consideración a los demás usuarios, personal que labora en el Club y Concesionarios del mismo.\\n
  5. \\nRespetar los procedimientos de control de acceso vigentes, así como proporcionar su número de membresía y/o credencial, cuando así lo solicite cualquier Empleado del Club.\\n
  6. No introducir alimentos, bebidas y/o sustancias tóxicas al Club.
  7. \\nCumplir con los requisitos de ingreso tanto el titular como cada uno de sus integrantes: Fotografías, copia de identificación oficial, acta de nacimiento, comprobante de domicilio, certificado médico, acta de matrimonio según sea el caso.\\n
  8. \\nInformar y actualizar datos generales de domicilio, teléfono, correo electrónico, cuando estos sean diferentes a los proporcionados inicialmente.\\n
  9. \\nInformar por escrito del cambio de estado civil de sus hijos, dando de baja a los que pasan de solteros a casados y mayores de 18 años.\\n
  10. \\nPara los usuarios mayores de 70 años, será necesaria una carta responsiva liberando a la Administración de ALTEA WELLNESS CLUB de cualquier responsabilidad por el uso de las instalaciones del Club, debiendo renovar anualmente la constancia médica donde indique que se encuentra en condiciones de salud satisfactorias para poder hacer uso de las instalaciones del club.\\n
  11. \\nReconocer que el área de enfermería (primeros auxilios) es exclusiva para URGENCIAS, (revisiones físicas, dermatológicas y en su caso atención pre-hospitalaria).\\n
  12. \\nSeguir las recomendaciones recibidas por parte del personal calificado del Club cuando estime que la condición física o salud no es la adecuada para practicar alguna actividad física específica.\\n
  13. \\nReconocer que el Club no tiene, ni tendrá responsabilidad alguna por cualquier accidente que le pudiera ocurrir al usuario dentro de las instalaciones o por su participación en las actividades o eventos programados.\\n
  14. \\nEl usuario deslinda expresamente de cualquier responsabilidad al Club, por cualquier tipo de robos, pérdidas o daños que sufra el usuario, en sus pertenencias o propiedades, así como en su persona, haciendo extensiva esta manifestación a todos y cada uno de sus familiares e invitados. En caso de perdidas mayores o “Casos Fortuitos”, el club no tiene obligación de ninguna índole.\\n
  15. \\nPagar las cuotas que le correspondan dentro de los plazos previstos y cubrir de inmediato el importe de los servicios y consumos dentro de las instalaciones del Club, de lo contrario se suspenderá el uso de las instalaciones a los integrantes de la membresía.\\n
  16. \\nTodos los pagos que realicen los usuarios serán definitivos y en ningún caso podrán ser reembolsados, aun cuando no se hubiera hecho uso de instalaciones por suspensión, sanción o cancelación de la membresía.\\n
  17. Cubrir los intereses moratorios en el caso de retraso en pago de mantenimiento.
  18. \\nRespetar los límites de velocidad vehicular y de los espacios destinados para los usuarios con capacidades diferentes.\\n
  19. \\nNo cometer ningún acto que altere el orden y la disciplina en el Club o en las actividades y servicios que en él se prestan,\\n
  20. No realizar actos que vayan en contra a la moral y las buenas costumbres.
  21. \\nNo promover ni incitar a otros a participar en acciones, solicitudes o peticiones contrarias a los objetivos del club o que deformen sus finalidades ante terceros o autoridades.\\n
  22. \\nCuidar las instalaciones, establecimientos, locales, maquinaria, equipos, muebles y demás activos del CLUB, evitando que el mal uso de ellos se haga, motive su deterioro o destrucción y obligándose a cubrir el daño ocasionado, mismo que será evaluado por el área de administración. .\\n
  23. Aceptar y acatar las sanciones que conforme al presente Reglamento se impongan.
  24. \\nPresentar credencial vigente, utilizar el medio electrónico o biométrico implementado para el control de acceso que rija en ese momento para que le sea permitido el ingreso a las instalaciones del Club.\\n
  25. \\nQueda prohibido ingresar en estado de ebriedad así como consumir drogas o enervantes, dentro de las instalaciones del Club.\\n
  26. \\nLas demás que les imponga el presente reglamento o que determine el Consejo de Administración y se publiquen en el Club.\\n
  27. \\nEl Club tendrá la facultad de cerrar todas o parcialmente las instalaciones con el objeto de realizar acciones de mantenimiento y/o reparaciones, así como para realizar el convivio del día del colaborador ALTEA WELLNESS CLUB.\\n

CAPÍTULO V

DE LAS CUOTAS

  1. \\nEl Consejo de Administración de ALTEA WELLNESS CLUB, determinará las cuotas mensuales de mantenimiento y administración, de acuerdo con los diversos tipos de usuarios. Su monto podrá ser modificado al inicio de año o cuando las condiciones económicas que prevalezcan lo requieran por el Consejo de Administración, así como los precios de los servicios adicionales que se utilicen (lockers, clases, pases de invitado, eventos, etc.)\\n
  2. \\nLas cuotas de mantenimiento comprenderán periodos mensuales, su pago deberá de realizarse íntegro de la membresía dentro de los cinco primeros días del periodo a cubrir, a partir del sexto día del mes el o los usuario (s) no podrá seguir haciendo uso de los servicios de ALTEA WELLNESS CLUB.\\n
  3. \\nEl pago oportuno dentro de los cinco primeros días del mes garantizan la prestación del o los servicios de ALTEA WELLNESS CLUB.\\n
  4. \\nEn ningún caso el usuario podrá argumentar el no uso de instalaciones por suspensión temporal de alguno de los servicios o instalaciones de ALTEA WELLNESS CLUB, originadas por obras de mantenimiento y conservación, hechos o actos de terceros, por caso fortuito, de fuerza mayor o cualquier otra causa para liberarse de la obligación del pago de cuotas de mantenimiento, ya que la inasistencia a ALTEA WELLNESS CLUB, en todo caso se entenderá por causas imputables al usuario.\\n
  5. \\nLos usuarios que dejen de cubrir sus cuotas mensuales, deberán liquidar el total de sus adeudos pendientes para hacer uso de los servicios de ALTEA WELLNESS CLUB.\\n
  6. \\nLos usuarios sólo podrán cambiar de modalidad de pago de cuota de mantenimiento dos veces al año, ya sea de familiar a pareja o individual, o viceversa, cubriendo la diferencia entre el costo de membresías, si fuese el caso.\\n
  7. \\nLas cuotas de invitados deberán pagarse al momento que se requiera, por parte del titular de la membresía, en caso de que se requiera fuera del servicio de caja, el titular podrá firmar el documento de aviso y aceptación de cargo a la membresía donde se indica cantidad de pases y precio unitario.\\n

CAPÍTULO VI

DE LAS FORMAS DE PAGO

    \\n
  1. \\nSe podrá pagar en la caja del club, con efectivo o tarjeta de débito o crédito, en el horario establecido, debiendo verificar las tarjetas aceptadas en el establecimiento.\\n
  2. \\nTransferencia electrónica. El usuario podrá realizar el pago de su cuota de mantenimiento por transferencia electrónica o SPEI a la CLABE 030290900020810846 BANCO BanBajío a nombre de ALTEA FITNESS, S.A. DE C.V., Una vez realizada la transferencia, deberá enviar comprobante del pago a la administración del club para su aplicación y facturación correspondiente al correo caja@alteawellnessclub.com Si la transferencia se realiza después del día cinco del mes, se deberá cubrir el monto total de la cuota vigente, renunciando a cualquier descuento o beneficio adquirido.\\n
  3. \\nPagos con cargo automático (domiciliación). - El usuario que desee realizar su pago con cargo automático a su tarjeta de crédito, débito o cuenta de cheques, deberá firmar una carta de autorización para el cobro de su cuota de mantenimiento.\\n
  4. \\nDirectamente en el banco mediante el uso de ficha de depósito bancario (BANCO BANBAJIO) al número de cuenta 27415454.\\n

CAPÍTULO VII

REGLAMENTOS PARA USO DE LAS DIVERSAS INSTALACIONES\\n
\\nEs responsabilidad y prerrogativa del personal de Deportes, Mantenimiento y Administración, apoyado por el personal de Seguridad, mantener un clima de orden, respeto y disciplina dentro de las instalaciones, para su cumplimiento, tienen facultades discrecionales de acuerdo al reglamento vigente de ALTEA WELLNESS CLUB, para hacer:\\n

  1. \\nCumplir el reglamento interno de ALTEA WELLNESS CLUB y de los reglamentos particulares de cada área y/o servicio o actividades deportivas o culturales.\\n
  2. \\nQue las clases que no tengan un Quórum según el área serán suspendidas y se suplirán por actividades de mayor interés para los usuarios.\\n
  3. \\nEl programa de actividades deportivas y recreativas, incluye un listado de actividades diversas en diferentes días y horarios, este es un servicio que otorga el Club a sus usuarios, mismo que puede sufrir modificaciones de acuerdo a la participación de los usuarios. Este programa de actividades se reducirá a guardias de servicio en la última semana de diciembre y primera semana de enero, mismas que serán notificadas con anticipación.\\n
  4. \\nQue los usuarios disfrutarán de los servicios haciendo uso del equipo con el atuendo apropiado, conforme al reglamento particular que se expida para cada área o deporte.\\n
  5. \\nQue para ejercer actividades de comercio o publicitarias de cualquier tipo dentro de las instalaciones de ALTEA WELLNESS CLUB, será necesario que la administración autorice mediante el contrato y se paguen los derechos correspondiente al ejercicio de actividades.\\n
  6. \\nQue los invitados se registren en el libro correspondiente, se identifiquen con documento oficial con fotografía vigente.\\n
  7. \\nQue el acceso a las instalaciones de ALTEA WELLNESS CLUB, obliga a aceptar las normas contenidas en este reglamento.\\n

REGLAMENTO DE CARÁCTER GENERAL

  1. \\nEstá terminantemente prohibido introducir al club cualquier clase de materiales inflamables, armas de fuego, explosivos, objetos punzocortantes y cualquier otro que ponga en riesgo la integridad de los usuarios y a las instalaciones del Club.\\n
  2. Está prohibido introducir alimentos y bebidas de cualquier tipo.
  3. No se permite el ingreso de mascotas.\\n
  4. \\nNo se pueden ingresar patines, bicicletas, inflables, patinetas y cualquier otro accesorio que se indique en los reglamentos internos.\\n
  5. \\nEstá prohibido el ingreso de altoparlantes, equipos de sonido, pantallas, bocinas y objetos similares que ocasionen desorden y molestias a los usuarios.\\n
  6. \\nEl robo sin importar el valor, está considerado como una falta grave que se sancionará con la expulsión definitiva del Club sin amonestación previa.\\n
  7. La velocidad máxima de circulación de vehículos en el estacionamiento será de 10Km/hora.
  8. \\nSe prohíbe utilizar los cajones de estacionamiento destinados a personas con capacidades especiales designadas por la Administración de Club, las cuales tendrán la calcomanía del distintivo que los acredite como usuarios con derecho a estos cajones.\\n
  9. \\nLos cajones que corresponden al Club están reservados para el uso exclusivo de los usuarios. Estos deberán respetar los señalamientos relativos a la velocidad, vialidad para peatones, espacio para cada vehículo, áreas específicas para el uso de personas con capacidades diferentes, distintivos, etc. Los choferes y guardias de los usuarios tendrán que sujetarse a estas reglas.\\n
  10. El uso de esta área se tendrá exclusivamente mientras el usuario se encuentre dentro de las instalaciones.\\n
  11. \\nTodas las pertenencias de los usuarios introducidas a las instalaciones de ALTEA WELLNESS CLUB, estarán bajo la custodia y responsabilidad de su propietario, por lo que el Club no asume responsabilidad alguna en caso de pérdida de las mismas.\\n
  12. \\nLa Administración está facultada para sancionar a los propietarios de los vehículos registrando los hechos o faltas con evidencias fotográficas y estas serán cuando:\\n
    1. El vehículo esté estacionado en doble fila.
    2. El vehículo obstruya las zonas peatonales.
    3. \\nEl vehículo obstruya la circulación.
    4. \\nEl vehículo esté ocupando las zonas destinadas para personas con capacidades especiales sin presentar el distintivo correspondiente.\\n
    5. El vehículo sea abandonado en forma permanente y sin previo aviso a la Administración.
  13. \\nEl circuito cerrado de vigilancia y su contenido es propiedad de ALTEA FITNESS S.A. DE C.V. (ALTEA WELLNESS CLUB) para lo cual dichos contenidos no podrán ser solicitados por los usuarios en ningún momento y por ninguna situación.\\n

REGLAMENTO DE LOS INVITADOS

  1. \\nLos usuarios podrán ser acompañados por invitados, previo pago de la cuota que en su momento fije el Consejo de Administración.\\n
  2. \\nLos invitados deberán registrarse en el libro de invitados, identificarse con documento oficial vigente con fotografía.\\n
  3. Los invitados deberán respetar todos los reglamentos, así como observar normas generales de buena conducta.\\n
  4. Será responsabilidad del usuario la conducta de sus invitados durante su estancia en el club.
  5. \\nEl invitado sólo podrá ingresar acompañado del titular de la membresía. Si el titular se retira, el invitado no podrá permanecer en las instalaciones.\\n

REGLAMENTO DE LOS CHOFERES Y NANAS

  1. \\nLos choferes y personal de seguridad que vengan acompañando a los usuarios del club, no podrán entrar a éste y deberán permanecer en el estacionamiento o en el lugar que se destine para ellos.\\n
  2. \\nLas nanas y empleadas domésticas que están cuidando o atendiendo a los menores sólo podrán acompañarlos a los baños de niños o niñas, alberca y restaurante, jardines y juegos infantiles, pero queda estrictamente prohibido que hagan uso de las instalaciones del Club.\\n
  3. \\nLos usuarios del club, deberán instruir a las personas a que se refiere este reglamento para que cumplan con las disposiciones que dicte el Consejo de Administración. Y se comporten debidamente con orden y respeto.\\n

REGLAMENTO DEL RESTAURANT-BAR

  1. \\nEl servicio de bar y restaurant será limitado a las áreas destinadas para ello.
  2. \\nEstá prohibido introducir alimentos y bebidas de cualquier tipo que no hayan sido adquiridos en restaurante o barras, así como, enervantes o drogas.\\n
  3. Está prohibido que los menores de edad consuman bebidas alcohólicas.
  4. \\nDeberá sujetarse al horario que sea establecido por la Administración en conjunto con el concesionario.
  5. \\nNo está permitido el acceso en traje de baño o sin usar la ropa adecuada al restaurante bar y lugares de reunión.
  6. \\n
  7. \\nEl personal del área de restaurant y snack bar, tienen prohibida la venta de bebidas con contenido etílico a menores de edad.\\n
  8. \\nEl club no se hace responsable por objetos olvidados o extraviados dentro de las instalaciones de restaurante, bar, snack y cualquier otra área.\\n
  9. El Club se reserva el derecho de admisión y servicio a cualquier usuario o invitado.

\\nREGLAMENTO DE LAS FIESTAS Y REUNIONES

  1. \\nLos usuarios que deseen celebrar fiestas, reuniones o cualquier evento particular, deberán contratar los espacios destinados para las mismas directamente en la Administración y cubrir los costos de renta fijados por el Consejo de Administración para usuarios y externos. En el caso de que exista concesión del área de alimentos y bebidas y los eventos requieran servicios de esta área, el evento se acordará con el Concesionario.\\n
  2. \\nLos usuarios que no se encuentren al corriente en el pago de sus cuotas de mantenimiento, de cualquier otra cuota especial o cargo que se le haya efectuado, no podrán contratar eventos en las instalaciones del club.\\n
  3. \\nEl usuario que contrate algún evento, será responsable de los daños causados a las instalaciones, muebles y equipo usados durante el evento.\\n

REGLAMENTO DE ACONDICIONAMIENTO FÍSICO

REGLAMENTO GENERAL DEL ÁREA\\n

  1. \\nEl uso del equipo de Acondicionamiento Físico (peso libre, peso integrado y cardiovascular) es exclusivo para Usuarios activos e invitados de Altea Wellness Club.\\n
  2. El uso de ropa y calzado deportivo es obligatorio.
  3. \\nEs responsabilidad de cada Usuario recoger los equipos que utilice (mancuernas, barras, discos, accesorios, materiales, etc.) y colocarlos en su lugar al término de su rutina.\\n
  4. \\nLos Instructores de Acondicionamiento Físico de Altea Wellness Club son los únicos autorizados para brindar asesoramiento en el uso del equipo, orientación para establecer rutinas de entrenamiento y entrenamientos personalizados.\\n
  5. \\nLa contratación de un Instructor para entrenamientos personalizados se realizará única y exclusivamente a través del área administrativa del club.\\n
  6. \\nEn caso de presentar alguna lesión, cirugía o embarazo, notificar al Instructor a cargo, y es responsabilidad de cada Usuario hacer uso del equipo.\\n
  7. Actuar respetuosamente hacia el Staff y demás Usuarios.
  8. \\nAtender las indicaciones del personal encargado del área.
  9. \\nToda sugerencia con respecto a las actividades y del área, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración del Club.\\n
  10. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la administración de Altea Wellness Club.\\n
  11. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  12. \\n

HIGIENE

  1. El uso de toalla es obligatorio.
  2. \\nEn atención a los demás Usuarios después de hacer uso del equipo se deberá dejar limpio y seco.
  3. \\nLos vestidores es el único lugar donde se permiten cambios de ropa.
  4. \\nSe prohíbe el acceso a Usuarios que tengan enfermedades infecciosas y/o heridas abiertas.

\\nRESTRICCIONES

  1. \\nPor seguridad solo mayores de 15 (quince) años podrán permanecer y hacer uso del área de Acondicionamiento Físico.
  2. \\n
  3. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratado, se prohíbe introducir alimentos y botellas de vidrio.\\n
  4. \\nLa administración de Altea Wellness Club podrá negar el uso del área de Acondicionamiento Físico en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  5. \\nQueda prohibido la impartición de entrenamientos personalizados por Instructores ajenos al Staff de Acondicionamiento Físico de Altea Wellness Club.\\n
  6. \\nQueda prohibido hacer mal uso del equipo de Acondicionamiento Físico que pueda causar deterioro o destrucción del mismo (azotar, golpear mancuernas, barras, discos, etc.)\\n
  7. \\nQueda prohibido el uso, aplicación, ingesta, compra y venta de cualquier tipo de sustancias dentro de las instalaciones de Altea Wellness Club.\\n
  8. \\nQueda prohibido desplazarse o permanecer en el área de Acondicionamiento Físico en traje de baño, bata o sin playera.\\n
  9. La venta y/o promoción de cualquier producto, negocio o servicio queda estrictamente prohibida.
  10. \\nEn atención a los demás Usuarios no se permite el uso de reproductores de música sin audífonos.
  11. \\nSe prohíbe introducir maletas, mochilas y backpacks o similares al área de Acondicionamiento Físico (peso libre y peso integrado)\\n
  12. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar, escupir o chiflar dentro del área de Acondicionamiento Físico.\\n
  13. \\nLos Instructores en general tienen la facultad de reportar a la administración a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  14. \\nEl incumplimiento de este reglamento o mala conducta en el área de Acondicionamiento Físico, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n

SEGURIDAD

  1. \\nAltea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.

\\nREGLAMENTO DE CARDIO

  1. \\nEl uso de toalla, ropa y calzado deportivo es obligatorio.
  2. \\nEn atención a los demás Usuarios y por higiene, después de hacer uso de un equipo, deberá dejarse seco y limpio.
  3. \\n
  4. Queda prohibido hacer mal uso del equipo de Cardio que pueda causar deterioro o destrucción del mismo.
  5. \\nPor seguridad solo mayores de 13 (trece) años podrán permanecer y hacer uso del área de Cardio.
  6. \\nLos Usuarios de 13 (trece) a 15 (quince) años deberán ser previamente valorados y autorizados por los Instructores de Acondicionamiento Físico para hacer uso del área de Cardio y deberán contar con carta responsiva firmada por Padre o Tutor.\\n
  7. \\nLa administración de Altea Wellness Club podrá negar el uso del área de Acondicionamiento Físico en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  8. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar, escupir o chiflar dentro del área de Cardio.\\n
  9. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratado, se prohíbe introducir alimentos, bebidas alcohólicas y botellas de vidrio al área de Cardio.\\n
  10. No se podrá permanecer en los equipos, mientras no se haga uso de los mismos.
  11. \\nEn atención a los demás Usuarios, no se permite el uso de reproductores de música sin audífonos.
  12. \\nMaletas, mochilas y chamarras no podrá estar cerca, ni sobre los aparatos de Cardio, deberán ser colocadas en el área asignada.\\n
  13. \\nLos Instructores en general tienen la facultad de reportar a la administración a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los demás Usuarios.\\n
  14. \\nEl incumplimiento de este reglamento o mala conducta en el área de Cardio, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n
  15. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Gerencia y/o administración de Altea Wellness Club.\\n
  16. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  17. \\n

REGLAMENTO DE LOCKERS, VESTIDORES, BAÑOS, REGADERAS, VAPOR, SAUNA, BAÑO FAMILIAR Y TOALLAS.\\n

REGLAMENTO GENERAL DEL ÁREA

  1. \\nEl acceso y uso de los servicios de vestidores es para Usuarios e Invitados.
  2. \\nEl acceso a vestidores será de la siguiente manera:
    1. Vestidor de Damas
      1. \\nUsuarios (mujeres) mayores a 12 (doce) años
      2. \\nMenores de 3 (tres) meses a 5 (cinco) años acompañados de un adulto (mujer)
  3. \\nVestidor de Caballeros
    1. Usuarios (hombres) mayores a 12 (doce) años
    2. \\nMenores de 3 (tres) meses a 5 (cinco) años acompañados de un adulto (hombre)
  4. Vestidor de Niñas
      \\n
    1. Menores (Niñas) de 6 (seis) a 11 (once) años.
  5. Vestidor Niños
    1. \\nMenores (Niños) de 6 (seis) a 11 (once) años.
  6. \\nQueda prohibido el acceso a Usuarios adultos a los vestidores de Menores.
  7. \\nLos Usuarios tienen derecho al uso de toallas que Altea Wellness Club proporciona en el área de vestidores, estas deben devolverse al término de su uso.\\n
  8. El uso de las secadoras es únicamente para el secado de cabello.
  9. \\nEl uso de regaderas es personal, queda estrictamente prohibido más de un adulto por regadera.
  10. \\nSe prohíbe tirar basura en todas las áreas de Vestidores.
  11. \\nSe recomienda el uso de sandalias en el área de Vestidores.
  12. \\nLos servicios (regaderas, secadoras, toallas, vapor, sauna, etc.) del área vestidores serán suspendidos 15 (quince) minutos antes del cierre.\\n
  13. Siempre dirigirse y actuar respetuosamente hacia el Staff y Usuarios.
  14. \\nLa venta y/o promoción de cualquier producto, negocio o servicio queda estrictamente prohibida.
  15. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar o chiflar dentro del área de Vestidores.\\n
  16. Queda prohibido introducir bebidas alcohólicas al área de Vestidores.
  17. \\nQueda prohibido comer en el área de Vestidores.
  18. \\nQueda prohibido introducir bocinas y utilizar reproductores de música, sin audífonos.
  19. \\nQueda prohibido permanecer y desplazarse desnudo, en el área de terraza y sala de espera de los Vestidores.
  20. \\nLa Administración de Altea Wellness Club podrá negar el uso del área de vestidores en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  21. \\nToda sugerencia con respecto al área de Vestidores, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración del Club.\\n
  22. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n
  23. \\nEl incumplimiento de este reglamento o mala conducta en el área de Vestidores, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n
  24. Altea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.
  25. \\nLa empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.

\\nVAPOR Y SAUNA

  1. \\nEl uso de toalla (para sentarse) es obligatorio antes de tomar una sesión de vapor o sauna.
  2. \\nSe recomienda ducharse antes de la sesión de vapor o sauna.
  3. \\nEl tiempo máximo de la sesión de vapor o sauna, será de 20 (veinte) minutos.
  4. \\nSe recomienda una sesión de vapor o sauna entre 2 y 3 horas después de una comida.
  5. \\nSe recomienda un descanso de 15 minutos antes de tomar una sesión de vapor o sauna, si se realizó actividad física.\\n
  6. Se recomienda una sesión de vapor o sauna al día.
  7. \\nNO se recomienda ingresar al área de vapor y sauna con joyas, relojes y accesorios de metal.
  8. \\nQueda prohibido el uso de cremas corporales y faciales, exfoliantes, tratamientos capilares, corporales o naturales dentro del área de vapor y sauna.\\n
  9. Queda prohibido depilarse, rasurarse, bañarse o cortarse las uñas en el área de vapor y sauna.
  10. \\nQueda prohibido el acceso al área de vapor y/o sauna a:
  11. Mujeres embarazadas.
  12. Menores de edad.
  13. \\nPersonas con diabetes.
  14. Personas con hipertensión e hipotensión.
  15. Personas con problemas renales
  16. \\nPersonas con problemas de corazón
  17. Personas con fiebre.
  18. \\nLa empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  19. \\nEl uso de las instalaciones es responsabilidad del Usuario.

ACCESO A VESTIDORES DE ALBERCA\\n

El acceso a vestidores de alberca será de la siguiente manera:
  1. Vestidor de Mujeres.\\n
  2. Vestidor de Hombres.
  3. Vestidor familiar: Únicamente un adulto con más de un menor.
  4. \\nVestidor de bebés: Un adulto con un menor no mayor a 6 (seis) años (Los adultos no podrán bañarse)

\\nDE LOS LOCKERS

  1. \\nLos usuarios pueden contar con Locker privado haciendo el pago de la renta que se encuentre vigente en ese momento.\\n
  2. \\nEl club no se hace responsable por pérdida o daño de objetos propiedad de sus usuarios, invitados o visitantes.
  3. \\n
  4. \\nNingún usuario podrá permitir el uso temporal de su locker a otra persona, con excepción de las registradas para efectos de la cuota de mantenimiento dentro de la membresía respectiva.\\n
  5. \\nLos usuarios están obligados a mostrar el recibo o documento que acredite el uso privado del locker, a la Administración del Club cuando esta lo requiera.\\n
  6. \\nEn caso de que el Club no cuente con registro que acredite la renta de Locker, tendrá la facultad de desalojar los bienes que se encuentren en su interior, sin responsabilidad para el Club.\\n
  7. \\nEl usuario debe desocupar el locker al vencimiento de la renta, cuando no realice el pago por la renovación correspondiente.\\n
  8. \\nCuando algún usuario acredite el derecho de uso de un locker y requiera el desalojo de los bienes, deberá notificarlo por escrito con los datos de la persona autorizada a realizar la apertura.\\n
  9. \\nLos lockers destinados para uso común no podrán ser asignados a ningún usuario, estos podrán ser usados una sola vez y desocuparlos el mismo día.\\n
  10. Queda estrictamente prohibido introducir alimentos y bebidas que no hayan sido adquiridas dentro del Club
  11. \\n
  12. \\nLa administración podrá ordenar al usuario la apertura de su locker para su inspección en caso de tener conocimiento de la existencia de bebidas alcohólicas, objetos o substancias prohibidas, si se hace caso omiso a esta orden, la administración está facultada para abrir el casillero en presencia de un testigo ó fedatario público para su inspección.\\n
  13. Está prohibido colocar cualquier tipo de anuncio, publicidad o imagen en el área de vestidores y Lockers.
  14. \\n

TOALLAS

  1. \\nLos Usuarios tienen derecho al uso de toallas que Altea Wellness Club proporciona en el área de vestidores, estas deben devolverse al término de su uso.\\n
  2. \\nLa toalla deberá ser asignada por el personal del Club con el Control que tenga establecido al momento, debiendo el usuario acatar el mismo para poder hacer uso de este servicio.\\n
  3. \\nEl uso de toallas es exclusivo para usuarios miembros del Club y sus invitados que entran con pase pagado o asignado por el titular de la membresía.\\n
  4. \\nEl usuario solo podrá solicitar 2 toallas en el caso de los adultos y 1 toalla en el caso de los niños por día y estas son exclusivas para el secado corporal, en caso de solicitar toalla extra deberá cubrir el precio establecido por la administración.\\n
  5. \\nEstá prohibido hacer un uso de las toallas distinto al secado corporal, quien la utilice para limpiar artículos, calzado, etc. la devuelva manchada o dañada, distinta a como la recibió deberá cubrir el precio de la toalla establecido por la administración.\\n
  6. \\nEn caso de no devolver una toalla se generara un cobro de: $150 (ciento cincuenta pesos 00/100 m.n)) pesos por toalla chica y $250 (doscientos cincuenta pesos 00/100 m.n) pesos por toalla grande.\\n

REGLAMENTO DE INSTALACIONES DEPORTIVAS

\\nEl uso de las canchas deportivas del Club estará sujeto a los reglamentos específicos de cada una de las siguientes disciplinas:\\n

REGLAMENTO DEL SQUASH

  1. \\nEs obligatorio el uso de ropa y calzado diseñado especialmente para la práctica de Squash, el calzado deberá ser de goma o el denominado “non marking”\\n
  2. Es obligatorio el uso de raqueta y pelota de squash.
  3. \\nLa asignación de canchas se realizará en Control de Canchas.
  4. \\nSe asignaran canchas de acuerdo a la disponibilidad.
  5. \\nTodos los jugadores deberán estar presentes en el momento que se asigne la cancha.
  6. \\nUna vez asignada la cancha, no podrá haber cambio de jugadores.
  7. \\nEl tiempo de tolerancia para ingresar a la cancha una vez asignada es de 10 (diez) minutos, una vez transcurrido este tiempo, Control de Canchas podrá reasignar la cancha a Usuarios en espera.\\n
  8. El tiempo de uso de la cancha es de 1 (una) hora, el cual será regulado por el Control de Canchas.
  9. \\nLas personas ajenas al juego no podrán permanecer dentro de la cancha.
  10. \\nNo se podrá hacer uso de las canchas cuando estén en mantenimiento y/o reparación.
  11. \\nLa contratación de un Instructor para entrenamientos personalizados se realizará única y exclusivamente a través del área Administrativa del Club.\\n
  12. \\nClases personalizadas y clínicas se realizarán con horario reservado en Control de Canchas, no se podrá hacer reservas consecutivas.\\n
  13. \\nLa asignación de canchas para clases, clínicas, academias, torneos y todo tipo de eventos especiales, será organizada por la Coordinación de Canchas y los Instructores de Squash.\\n
  14. Todos los eventos serán informados a los Usuarios con anticipación para la organización de sus actividades.\\n
  15. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratado, se prohíbe introducir alimentos, bebidas alcohólicas, botellas de vidrio y fumar.\\n
  16. \\nLos Instructores en general tienen la facultad de reportar a la administración del club a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  17. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar, escupir o chiflar en las canchas de Squash.\\n
  18. \\nLa administración de Altea Wellness Club podrá negar el uso del área de las Canchas de Squash en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  19. Altea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.
  20. \\nEl incumplimiento de este reglamento o mala conducta en las canchas de Squash, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n
  21. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la administración de Altea Wellness Club.\\n
  22. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  23. \\n

REGLAMENTO DE CANCHAS DE TENIS

  1. \\nEs obligatorio el uso de ropa y calzado diseñado especialmente para la práctica de Tennis, el calzado deberá ser de goma o el denominado “non marking”\\n
  2. Es obligatorio el uso de raqueta y pelota de Tenis
  3. \\nLa asignación de canchas se realizará en Control de Canchas.
  4. \\nSe asignarán canchas de acuerdo a la disponibilidad.
  5. \\nTodos los jugadores deberán estar presentes en el momento que se asigne la cancha.
  6. \\nUna vez asignada la cancha, no podrá haber cambio de jugadores.
  7. \\nEl tiempo de tolerancia para ingresar a la cancha una vez asignada es de 10 (diez) minutos, una vez transcurrido este tiempo, Control de Canchas podrá reasignar la cancha a Usuarios en espera.\\n
  8. El tiempo de uso de la cancha es de 1 (una) hora, el cual será regulado por el Control de Canchas.
  9. \\nLas personas ajenas al juego no podrán permanecer dentro de la cancha.
  10. \\nDe lunes a domingo se jugará en modalidad de dobles en cualquier horario si se cuenta con la disponibilidad de canchas. Se podrá jugar singles mediante solicitud a Control de Canchas.\\n
  11. \\nNo se podrá hacer uso de las canchas en caso de lluvia, superficie mojada o cuando estén en mantenimiento y/o reparación.\\n
  12. \\nLa contratación de un Instructor para entrenamientos personalizados se realizará única y exclusivamente a través del área Administrativa del Club.\\n
  13. \\nClases personalizadas y clínicas se realizarán con horario reservado en Control de Canchas, no se podrá hacer reservas consecutivas.\\n
  14. \\nLa asignación de canchas para clases, clínicas, academias, torneos y todo tipo de eventos especiales, será organizada por la Coordinación de Canchas y los Instructores de Tenis.\\n
  15. Todos los eventos serán informados a los Usuarios con anticipación para la organización de sus actividades.\\n
  16. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratado, se prohíbe introducir alimentos, bebidas alcohólicas, botellas de vidrio y fumar.\\n
  17. \\nLos Instructores en general tienen la facultad de reportar a la administración del club a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  18. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar, escupir o chiflar en las canchas de Tenis.\\n
  19. \\nLa administración de Altea Wellness Club podrá negar el uso del área de las Canchas de Tenis en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  20. Altea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.
  21. \\nEl incumplimiento de este reglamento o mala conducta en las canchas de Tennis, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n
  22. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n
  23. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  24. \\n

REGLAMENTO DE CANCHAS DE PÁDEL

  1. \\nEs obligatorio el uso de ropa y calzado diseñado especialmente para la práctica de Pádel.
  2. \\nLa asignación de canchas se realizará en Control de Canchas.
  3. \\nSe asignaran canchas de acuerdo a la disponibilidad.
  4. \\nTodos los jugadores deberán estar presentes en el momento que se asigne la cancha.
  5. \\nUna vez asignada la cancha, no podrá haber cambio de jugadores.
  6. \\nEl tiempo de tolerancia para ingresar a la cancha una vez asignada es de 10 (diez) minutos, una vez transcurrido este tiempo, Control de Canchas podrá reasignar la cancha a Usuarios en espera.\\n
  7. El tiempo de uso de la cancha es de 1 (una) hora, el cual será regulado por el Control de Canchas.
  8. \\nLas personas ajenas al juego NO podrán permanecer dentro de la cancha.
  9. \\nDe lunes a domingo se jugará en modalidad de dobles en cualquier horario si se cuenta con la disponibilidad de canchas. Se podrá jugar singles mediante solicitud a Control de Canchas.\\n
  10. \\nNo se podrá hacer uso de las canchas en caso de lluvia, superficie mojada o cuando estén en mantenimiento y/o reparación.\\n
  11. \\nLa contratación de un Instructor para entrenamientos personalizados se realizará única y exclusivamente a través del área Administrativa del club.\\n
  12. \\nClases personalizadas y clínicas se realizarán con horario reservado en Control de Canchas, no se podrá hacer reservas consecutivas.\\n
  13. \\nLa asignación de canchas para clases, clínicas, academias, torneos y todo tipo de eventos especiales, será organizada por la Coordinación de Canchas.\\n
  14. Todos los eventos serán informados a los Usuarios con anticipación para la organización de sus actividades.\\n
  15. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratado, se prohíbe introducir alimentos, bebidas alcohólicas, botellas de vidrio y fumar.\\n
  16. \\nQueda estrictamente prohibido el uso y permanencia en canchas de Pádel a menores de 13 años sin la supervisión de un adulto.\\n
  17. \\nLos Instructores en general tienen la facultad de reportar a la Administración del Club a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  18. \\nQueda prohibido el uso de palabras altisonantes y/o expresiones corporales obscenas, así como gritar o chiflar en las canchas de Pádel.\\n
  19. \\nLa administración de Altea Wellness Club podrá negar el uso del área de las Canchas de Pádel en caso de incumplimiento de cualquiera de las normas señaladas.\\n
  20. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  21. \\n
  22. Altea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.
  23. \\nEl incumplimiento de este reglamento o mala conducta en el área de Canchas de Pádel, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n
  24. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n
  25. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  26. \\n

REGLAMENTO DE ALBERCA

REGLAMENTO GENERAL DEL ÁREA

  1. El uso de la Alberca es exclusivo para Usuarios activos e Invitados.
  2. \\nEl uso de sandalias y calzado antiderrapante, es obligatorio para entrar al área de Alberca.
  3. \\nLos horarios de cada actividad estarán visibles para los Usuarios.
  4. \\nSolo se podrá hacer uso de la Alberca en los horarios establecidos que son:
    1. Lunes a viernes de 6:00 am a 9:30 pm\\n
    2. Sábados de 7:00 am a 4:30 pm
    3. Domingos y días festivos de 7:00 am a 1:30 pm
  5. \\nAtender las indicaciones del personal a cargo.
  6. Respetar las áreas asignadas para clases y entrenamientos.
  7. \\n
  8. \\nEn horarios de alta demanda de aforo se compartirá carril, por lo que se debe respetar el nado en circuito y el tiempo máximo de nado será de 45 minutos.\\n
  9. La tolerancia para ingresar a una clase una vez iniciada, es de 10 (diez) minutos.
  10. \\nPara el préstamo de material dirigirse con el encargado en turno y devolverlo al término de su uso.
  11. \\nAl salir de la Alberca el uso de bata es obligatorio para desplazarse al área de Vestidores.
  12. \\nAltea Wellness Club se reserva el derecho para determinar el número de clases que se impartirán.
  13. \\nAltea Wellness Club se reserva el derecho de disminuir actividades de acuerdo a sus políticas de aforo.
  14. \\nSiempre dirigirse y actuar respetuosamente hacia el Staff y Usuarios.
  15. \\nEn caso de presentar alguna lesión, cirugía o embarazo se deberá notificar al Instructor a cargo y es responsabilidad del Usuario el uso de las instalaciones.\\n
  16. \\nLa venta de cualquier tipo de artículo queda prohibida, al igual que la promoción de otro negocio o servicio dentro del área.\\n
  17. \\nToda sugerencia con respecto a las actividades y del área, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración de Club.\\n
  18. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n
  19. La empresa no se hace responsable por lesiones provocadas por el uso de los equipos y/o instalaciones.
  20. \\n

HIGIENE

  1. \\nLos vestidores es el único lugar donde se permiten cambios de ropa.
  2. \\nEs obligatorio ducharse antes de ingresar a la alberca, para ello se cuenta con regaderas dentro del área.
  3. \\nQueda prohibido el uso de productos corporales o faciales (crema, bronceador, bloqueador, etc.)
  4. \\nPara ingresar al área Alberca es obligatorio el uso de: bata, sandalias, gorro, goggles, traje de baño especial para natación (licra) y toalla.\\n
  5. Por ningún motivo se puede entrar, permanecer o desplazarse descalzo en el área de alberca.
  6. \\nSe prohíbe el acceso a Usuarios que tengan enfermedades infecciosas.
  7. \\nSe prohíbe el uso de la alberca a Usuarios con raspones, heridas o vendajes.
  8. \\nSe prohíbe orinar dentro de la Alberca.
  9. Para los Bebes el uso de pañal especial para natación es obligatorio.\\n

RESTRICCIONES

  1. \\nDentro y fuera de la alberca se prohíbe correr, gritar o empujar.
  2. \\nPara ingresar a la alberca no está permitido el uso de short, playera o cualquier otra prenda que no esté diseñada para la práctica de natación.\\n
  3. En el caso de mujeres no está permitido el uso de traje de baño de dos piezas.
  4. \\nEl uso de aretes y piercing está prohibido dentro de la alberca.
  5. \\nLa Administración de Altea Wellness Club podrá negar el uso del área de alberca en caso de incumplimiento de las normas señaladas.\\n
  6. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratados, se prohíbe introducir alimentos, bebidas alcohólicas y envases de vidrio.\\n
  7. \\nPor seguridad los menores a 15 (quince) años podrán realizar natación de manera libre, siempre y cuando estén bajo la supervisión de un adulto.\\n
  8. Queda prohibido pisar o sentarse en el área de jardineras.
  9. \\nLas maletas, bolsos, mochilas y backpacks deberán colocarse en el área asignada.
  10. \\nQueda prohibido organizar eventos o competencias sin autorización de Altea Wellness Club.
  11. \\nQueda prohibido subirse o jalar los carriles anti turbulencia.
  12. \\nLos Instructores en general tienen la facultad de reportar a la Administración del Club a todo aquel Usuario que presente conductas negativas que afecten a la moral y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  13. \\nEl incumplimiento de este reglamento o mala conducta en el área de Alberca, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n

ASISTENCIA A CLASES

  1. Llegar puntual.
  2. \\nUna vez iniciada la clase y habiendo transcurridos 10 (diez) minutos, él instructor se reserva el derecho de aceptar el ingreso del Usuario a la actividad que se esté llevando a cabo.\\n
  3. Evitar comidas en exceso mínimo 2 (dos) horas antes de la clase de natación.
  4. \\nSe recomienda ir al baño antes de ingresar a clases para evitar interrupciones.
  5. \\nEn las clases para menores, el padre o tutor no podrá dar indicaciones al menor cuando éste se encuentre en clase.
  6. \\n
  7. Se prohíbe introducir juguetes y/u objetos ajenos dentro de la clase.
  8. \\nSe prohíbe tirar basura dentro y fuera del área de Alberca.

SEGURIDAD

  1. La alberca tiene un cupo limitado y bajo ninguna circunstancia podrá ser superado.
  2. \\nAltea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.

\\nREGLAMENTO DEL JACUZZI

  1. \\nEl uso del Jacuzzi es exclusivo para Usuarios activos e Invitados.
  2. \\nPor seguridad no se permite el ingreso a Menores de 15 (quince) años al Jacuzzi.
  3. \\nSolo se podrá hacer uso del Jacuzzi en los horarios establecidos que son:
  4. Lunes a viernes de 6:00 am a 9:30 pm\\n
  5. Sábados de 7:00 am a 4:30 pm
  6. Domingos y días festivos de 7:00 am a 1:30 pm
  7. \\nEl tiempo máximo dentro del Jacuzzi será de 30 minutos.
  8. \\nAl salir del Jacuzzi el uso de bata y toalla es obligatorio para desplazarse al área de Vestidores.
  9. \\nEs obligatorio ducharse antes de ingresar al Jacuzzi, para ello se cuenta con regaderas dentro del área.
  10. \\nQueda prohibido el uso de productos corporales o faciales (crema, bronceador, bloqueador, etc.)
  11. \\nPara ingresar al área Jacuzzi es obligatorio el uso de: sandalias y traje de baño.
  12. \\nSe prohíbe el acceso al Jacuzzi a Usuarios que tengan enfermedades infecciosas.
  13. \\nSe prohíbe el uso del Jacuzzi a Usuarios con raspones, heridas o vendajes.
  14. \\nSe prohíbe orinar dentro del Jacuzzi.
  15. Se prohíben los clavados en el Jacuzzi.
  16. \\nDentro y fuera del Jacuzzi se prohíbe correr, gritar o empujar.
  17. \\nPara ingresar al Jacuzzi no está permitido el uso de short, playera o cualquier otra prenda que no esté diseñada para actividades dentro del agua.\\n
  18. En el caso de mujeres no está permitido el uso de traje de baño de dos piezas.
  19. \\nEl uso de aretes y piercings está prohibido dentro del Jacuzzi.
  20. \\nLa Administración de Altea Wellness Club podrá negar el uso del Jacuzzi en caso de incumplimiento de las normas señaladas.\\n
  21. Queda prohibido introducir alimentos, bebidas alcohólicas y envases de vidrio al Jacuzzi.
  22. \\nQueda prohibido pisar o sentarse en el área de jardineras.
  23. \\nLas maletas, bolsos, mochilas y backpacks deberán colocarse en el área asignada.
  24. \\nSe prohíbe tirar basura dentro y fuera del Jacuzzi.
  25. \\nLa empresa no se hace responsable de lesiones por el uso de los equipos y/o instalaciones.
  26. \\nAltea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo dentro y fuera del Jacuzzi.\\n
  27. \\nLos Instructores en general tienen la facultad de reportar a la Administración del Club a todo aquel Usuario que presente conductas negativas que afecten a la moral y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  28. \\nEl incumplimiento de este reglamento o mala conducta en el Jacuzzi, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n

REGLAMENTO DE CLASES FITNESS

GENERALES

  1. El acceso a las Clases Fitness es exclusivo para Usuarios activos e invitados.
  2. \\nEl uso de ropa y calzado deportivo es obligatorio en todos los salones de Clases Fitness.
  3. \\nTodas las Clases Fitness tienen una duración de 50 minutos.
  4. \\nLa tolerancia para ingresar a una Clase Fitness una vez iniciada es de 10 (diez) minutos.
  5. \\nLos horarios de cada actividad estarán visibles para los Usuarios.
  6. \\nLa Coordinación de Clases Fitness se reserva el derecho de cambiar sin previo aviso: instructor, programa, horario y salones.\\n
  7. Siempre dirigirse y actuar respetuosamente hacia el Staff y Usuarios.
  8. \\nAtender las indicaciones del personal a cargo de cada salón.
  9. \\nEn caso de presentar alguna lesión, cirugía o embarazo, notificar al instructor a cargo.
  10. \\nLa venta de cualquier tipo de artículo queda prohibida, al igual que la promoción de otro negocio o servicio dentro de los salones de Clases Fitness.\\n
  11. Altea Wellness Club se reserva el derecho para determinar el número de clases que se impartirán.
  12. \\nAltea Wellness Club se reserva el derecho de disminuir actividades en periodos vacacionales de acuerdo a sus políticas de aforo.\\n
  13. \\nToda sugerencia con respecto a las actividades y del área, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración del Club.\\n

HIGIENE

  1. \\nEl uso de toalla es obligatorio en todas las Clases Fitness.
  2. \\nLos vestidores es el único lugar donde se permiten cambios de ropa.
  3. \\nSe prohíbe el acceso a Usuarios que tengan enfermedades infecciosas y/o heridas abiertas.

\\nRESTRICCIONES

  1. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de mantenerse hidratados durante la clase, se prohíbe introducir alimentos y botellas de vidrio.\\n
  2. Se prohíbe introducir maletas o mochilas de gran tamaño a los salones de Clases Fitness.
  3. \\nDurante la clase se prohíbe tener bolsas o prendas de ropa (chamarras, sudaderas, etc.) en el espacio o equipo de trabajo, deberán colocarse en el área asignada.\\n
  4. \\nEl instructor a cargo de la clase tiene la facultad de negar el acceso a las actividades a Usuarios que no cumplan las observaciones sobre ropa y calzado, así como aquellos que pudieran presentarse en estado inconveniente.\\n
  5. \\nPor seguridad queda prohibida la permanencia de menores de 15 (quince) años en los salones cuando se imparten Clases Fitness.\\n
  6. \\nLos Instructores en general tienen la facultad de reportar a la Administración del Club a todo aquel Usuario que presente conductas negativas y/o antideportivas, que pongan en riesgo la seguridad e integridad del Staff de Altea Wellness Club o de los Usuarios.\\n
  7. \\nEl incumplimiento de este reglamento o mala conducta en los salones de Clases Fitness, será sancionada dentro de los estatutos y lineamientos establecidos en el reglamento general de Altea Wellness Club.\\n

ASISTENCIA A CLASES

  1. \\nLas Clases Fitness son únicamente para mayores de 15 años.
  2. \\nLas Clases Fitness inician a la hora y 10 (diez) minutos tal como se señala en el cronograma y terminan a la hora en punto para garantizar condiciones de limpieza.\\n
  3. \\nUna vez iniciada la clase y habiendo transcurridos 10 (diez) minutos, él instructor se reserva el derecho de aceptar el ingreso del Usuario a la actividad que se esté llevando a cabo.\\n
  4. \\nLos Usuarios que ingresen a la clase ya iniciada NO podrán colocarse en la parte frontal del salón, excepto en la sala de “My ride”, siempre que se encuentren en esta zona maquinas libres.\\n
  5. El acceso a las clases está sujeto a cupo disponible.
  6. Está prohibido apartar lugares dentro del salón.\\n
  7. \\nLa Administración de Altea Wellness Club se reserva el derecho para determinar la capacidad máxima de cada actividad y salón.\\n
  8. \\nEs responsabilidad de cada usuario recoger los equipos, accesorios y materiales que utilice durante la clase y colocarlos en los lugares asignados para su resguardo al término de la actividad.\\n
  9. \\nEn aquellas clases que así lo ameriten, el instructor a cargo tendrá la facultad de solicitar el uniforme o accesorios correspondientes.\\n
  10. Únicamente se puede mantener descalzo en las actividades que lo requieran o a solicitud del instructor.
  11. \\n
  12. \\nEn atención a los demás Usuarios, se prohíbe promover que el instructor incremente el tiempo de duración de la actividad.\\n
  13. \\nPara casos especiales, en el que el Usuario deba suspender su participación, se deberá dar aviso al instructor al iniciar la clase.\\n

SEGURIDAD

  • \\nTodas las Clases Fitness tienen cupo limitado y bajo ninguna circunstancia podrá ser superado.
  • \\nAltea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.
  • \\nREGLAMENTO DE JUEGOS INFANTILES

    1. \\nEl horario de servicio será el estipulado por la Administración en lugar visible.
    2. \\nLos usuarios deberán respetar los avisos e indicaciones generales en el área para el buen uso de los juegos.
    3. \\nEl área de juegos está disponible para uso y recreación de los niños menores de diez años de edad y se recomienda que estén supervisados por el padre o tutor.\\n
    4. El Club no se hace responsable por accidentes y/o lesiones provocadas por el mal uso de los juegos.
    5. \\nEs responsabilidad del padre o tutor el correcto uso de los juegos así como de la seguridad del menor.

    \\nREGLAMENTO ACADEMIA ALTEA

    GENERALES

    1. \\nEl acceso a clases de Academia Altea es exclusivo para Usuarios activos de 3 (tres) a 15 (quince) años.
    2. \\nLa programación de clases de Academia Altea se realizara de manera cuatrimestral.
    3. \\nLos horarios de cada actividad estarán visibles para los Usuarios.
    4. \\nLos Menores podrán ser inscritos a 3 (tres) actividades por cuatrimestre, con opción a cambio de actividad al concluir este periodo.\\n
    5. \\nLas inscripciones deberán realizarse en la supervisión de Academia Altea ubicada en la recepción de la Estancia Infantil.\\n
    6. \\nÚnicamente las personas registradas como responsables podrán entregar a los menores al inicio de clase y recogerlos al término de la misma.\\n
    7. \\nUna vez que los menores sean inscritos a sus actividades, no se podrá realizar cambio de actividad hasta concluir el periodo cuatrimestral.\\n
    8. \\nLos menores podrán tomar las clases de Academia Altea que se tengan disponibles en el grupo que les corresponda de acuerdo a su edad, quedando de la siguiente manera:\\n
      1. De 3 a 5 años 11 meses
      2. De 6 a 9 años 11 meses
      3. De 10 a 12 años 11 meses
      4. De 13 a 15 años\\n
    9. El uso de uniforme para cada actividad es obligatorio.
    10. \\nSe realizarán evaluaciones cuatrimestrales de todas las clases de Academia Altea para medir el avance de los alumnos.\\n
    11. \\nLos menores podrán ingresar a las Clases de Academia Altea, solo en los horarios establecidos, siempre y cuando el padre o tutor se encuentre dentro de las instalaciones de Altea Wellness Club y deberán proporcionar datos para su localización.\\n
    12. Siempre dirigirse y actuar respetuosamente hacia el Staff y Usuarios.
    13. \\nAtender las indicaciones del personal a cargo de cada salón.
    14. \\nLa Administración de Altea Wellness Club se reserva el derecho para determinar el número de clases que se impartirán en Academia Altea.\\n
    15. \\nLa Administración de Altea Wellness Club se reserva el derecho de disminuir actividades de acuerdo a sus políticas de aforo.\\n
    16. \\nToda sugerencia con respecto a las actividades y del área, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración del Club.\\n
    17. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n

    HIGIENE

    1. \\nLos vestidores es el único lugar donde se permiten cambios de ropa.
    2. \\nEn atención y por seguridad de los demás Usuarios de clases de Academia Altea, no se permitirá el acceso a clases a menores que presenten enfermedades infecciosas, fiebre, diarrea, tos, dolor de cabeza, náuseas, alergias y heridas abiertas, etc.\\n

    RESTRICCIONES

    1. \\nLos Instructores a cargo de cada disciplina están capacitados para el trabajo con los menores, por ello los padres, tutores o responsables NO podrán permanecer dentro de los salones durante las clases de Academia Altea.\\n
    2. \\nEl personal e Instructor a cargo tienen la facultad de negar el acceso a la clase a los menores que no cumplan las observaciones sobre ropa, calzado y accesorios, así como aquellos que pudieran presentar algún padecimiento antes mencionado.\\n
    3. \\nÚnicamente se pueden introducir botellas de plástico con tapa a efecto de que los menores se mantengan hidratados durante las clases de Academia Altea, se prohíbe introducir todo tipo de alimentos y botellas de vidrio.\\n
    4. Dentro y fuera de los salones de clases se prohíbe correr, gritar o empujar y tirar basura.

    \\nASISTENCIA A CLASES

    1. \\nTodas las clases inician a la hora en punto y tienen una duración de 50 (cincuenta) minutos, por lo que se pide puntualidad al entregar y recoger a los menores.\\n
    2. \\nPor seguridad una vez iniciada la clase y habiendo transcurridos 10 (diez) minutos, él Instructor se reserva el derecho de aceptar el ingreso del menor a la clase.\\n
    3. \\nLos menores deberán ser entregados a los profesores a cargo de la clase por el padre, tutor o responsable (mayor de edad) y recogerlos al finalizar.\\n
    4. Todos los menores deberán presentarse con el uniforme solicitado de acuerdo a su actividad.
    5. \\nPara los menores inscritos en las clases de Natación, el uso de bata al finalizar las clases es Obligatorio.
    6. \\nSi por algún motivo el menor se va ausentar 3 veces consecutivas de sus clases, el padre, tutor o responsable deberá notificarlo al área de Academia Altea, de lo contrario se dará de baja de la actividad.\\n
    7. \\nSi un menor presentara algún malestar durante su clase, se notificará al padre, tutor o responsable y deberán acudir por él.\\n

    SEGURIDAD

    1. \\nTodas las Clases de Academia Altea tienen cupo limitado y bajo ninguna circunstancia podrá ser superado.
    2. \\nAltea Wellness Club no se hace responsable de la pérdida o extravío de cualquier artículo.

    \\nCAPÍTULO VIII

    REGLAMENTO ESTANCIA INFANTIL

    GENERALES

    1. El uso de la Estancia Infantil es para Usuarios activos de 3 (tres) meses a 6 (seis) años.
    2. \\nPara hacer uso de la Estancia Infantil, el padre o tutor deberá presentarse con la credencial del Club así como con la credencial del menor (ambas vigentes), para hacer los trámites correspondientes.\\n
    3. \\nSe podrá hacer uso de la Estancia Infantil solo en los horarios establecidos siempre y cuando el padre o tutor se encuentre dentro de las instalaciones de Altea Wellness Club y deberán proporcionar datos para su localización.\\n
      1. Lunes a Viernes de 8:00 am a 8:50 pm
      2. Sábados de 8:00 am a 4:00 pm
      3. \\nDomingos y días festivos de 8:00 am a 1:00 pm
    4. \\nÚnicamente las personas registradas como responsables podrán entregar y recoger a los menores en la Estancia Infantil.\\n
    5. Todos los menores deberán ser registrados al ingresar y salir de la Estancia Infantil.
    6. \\nLos menores podrán hacer uso de la Estancia Infantil 4 (cuatro) horas diarias, 2 (dos) por la mañana y 2 (dos) por la tarde, en caso de exceder este tiempo, el costo por hora adicional será determinado por la Administración de Altea Wellness Club.\\n
    7. \\nSi los menores presentan algún malestar durante su permanencia en la Estancia Infantil, el padre, tutor o responsable deberá acudir por ellos, eximiendo a Altea Wellness Club de todo tipo de responsabilidad.\\n
    8. \\nNingún miembro de Altea Wellness Club está facultado para el cuidado de menores fuera de la Estancia Infantil y del horario que se tiene establecido.\\n
    9. En caso de que el menor requiera cuidados especiales, se valorará la posibilidad de su permanencia.
    10. \\nAltea Wellness Club se deslinda de toda responsabilidad por enfermedades presuntamente contraídas dentro de la Estancia Infantil.\\n
    11. Siempre dirigirse y actuar respetuosamente hacia el Staff y Usuarios.
    12. \\nToda sugerencia con respecto a las actividades y del área, podrán ser depositadas en el buzón de sugerencias ubicado en la Administración del Club.\\n
    13. \\nLos puntos no considerados o previstos en este reglamento serán atendidos en la Administración de Altea Wellness Club.\\n

    HIGIENE

    1. \\nEn atención y por seguridad de los demás Usuarios de la Estancia Infantil, no se permitirá el acceso a menores que presenten enfermedades infecciosas, fiebre, diarrea, tos, dolor de cabeza, náuseas, alergias, heridas abiertas, enfermedades virales, etc.\\n
    2. Los usuarios menores a 3 (tres) años, deberán presentarse siempre con:
      1. Ropa, pañal y cabello limpio.\\n
      2. Peinados
      3. Uñas cortas de manos y pies.
      4. \\nPañales y toallitas húmedas (suficientes para su estancia)
      5. \\nMochila con: Biberón, cambio de ropa, babero y cojín para cambio de pañal, todo lo anterior marcado con su nombre.
      6. \\n

    RESTRICCIONES

    1. \\nLos menores podrán hacer uso de la Estancia Infantil siempre y cuando el padre o tutor se encuentre dentro de las instalaciones de ALTEA WELLNESS CLUB por la cual el padre o tutor no podrá ausentarse por ningún motivo de ALTEA WELLNESS CLUB.\\n
    2. Es obligación del padre o tutor el proporcionar datos de contacto directo y de emergencia y/o alternos.
    3. \\n
    4. \\nEl personal a cargo de la Estancia Infantil por ningún motivo puede administrar medicamento a los menores, si este lo requiere el padre o tutor deberá presentarse en la Estancia Infantil para administrarlo.\\n
    5. Queda estrictamente prohibido ingresar alimentos y golosinas a la Estancia Infantil.
    6. \\nLos menores no podrán salir solos de la Estancia Infantil, únicamente las personas registradas como responsables podrán recogerlos, para ello deberán presentar credencial o identificación.\\n
    7. Se podrá negar el acceso del menor de forma temporal, en caso de incumplimiento del reglamento.
    8. \\nEl tiempo que los menores permanezcan en la Estancia Infantil estarán a cargo y atendidos por personal capacitado para su cuidado, por lo cual los padres, tutores o nanas no podrán permanecer acompañando a los menores.\\n
    9. No se reciben ni se entregan niños dormidos.

    ASISTENCIA A CLASES

    1. \\nLos menores de 3 (tres) a 35 (treinta y cinco) meses podrán asistir a las clases diseñadas especialmente para su edad, siempre acompañados del padre, tutor o responsable.\\n

    SEGURIDAD

    1. \\nNo nos hacemos responsables por objetos olvidados.
    2. \\nPor seguridad la Estancia infantil cuenta con cupo limitado y bajo ninguna circunstancia podrá ser superado.
    \\n

    REGLAMENTO DE SERVICIOS ENFERMERÍA

    1. \\nEs obligación para todos los usuarios, pasar un examen médico antes de disfrutar de los servicios que ofrece ALTEA WELLNESS CLUB en sus instalaciones deportivas. Este examen deberá hacerse anualmente con el médico de confianza del usuario y presentarse en las oficinas administrativas del Club.\\n
    2. \\nSi como consecuencia del examen médico practicado, resulta necesaria la presentación de análisis u otros estudios clínicos a juicio médico, será obligación de los usuarios el efectuarlos y presentarlos en la administración del Club.\\n
    3. \\nCon objeto de asegurar las condiciones de salud de los usuarios, no se permitirá el acceso a los servicios proporcionados en las instalaciones deportivas si no se entrega el certificado médico antes mencionado.\\n
    4. \\nEl servicio enfermería se ofrece con el objeto de asistir a los usuarios en situaciones de accidentes o causas de fuerza mayor, por lo que de manera habitual no se da consulta, diagnostica o se receta.\\n
    5. \\nSi el usuario solicita que se le aplique una inyección ó algún tratamiento invasivo será a criterio del titular de este servicio y se realiza bajo riesgo del usuario, dejando a ALTEA WELLNESS CLUB libre de cualquier responsabilidad.\\n

    CAPÍTULO IX
    DE LAS SANCIONES


    \\nEn general la falta a cualquiera de las disposiciones establecidas en este reglamento y cualquier otra circunstancia que a criterio del Consejo de Administración lo amerite estará sujeta a alguna de estas sanciones:\\n

    AMONESTACIÓN

    \\nEl Consejo de Administración amonestará al usuario, sin pérdida de sus derechos de utilización de las instalaciones o servicios del Club a sus familiares, invitados o visitantes mediante un comunicado por escrito, entregado personalmente, dirigido al domicilio o correo electrónico del sancionado en cualquiera de los siguientes casos:\\n
    1. \\nPor faltas al presente reglamento, así como a los reglamentos anexos que hacen referencia al uso de las distintas áreas del Club.\\n
    2. Una falta que no tenga señalada sanción especial conforme a este reglamento.
    3. \\nCuando el socio, sus familiares, dependientes o visitantes violen las disposiciones del presente reglamento, no otorguen a los otros socios, empleados y trabajadores del Club un trato adecuado o digno.\\n
    4. \\nCualquier falta no descrita en este reglamento y que el Consejo de Administración estime procedente formular una amonestación.\\n

    SUSPENSION TEMPORAL

    \\nSerá motivo para que un socio sea suspendido temporalmente de sus derechos de utilización de las instalaciones o servicios del Club cuando él o sus familiares, dependientes y visitantes incurran en:\\n
    1. La acumulación de dos o más amonestaciones.
    2. \\nPor falta de pago oportuno en sus cuotas después del seis de cada mes.
    3. \\nPor faltas al presente reglamento, así como a los reglamentos anexos que hacen referencia al uso de las distintas áreas del Club y consideradas graves a criterio del Consejo de Administración.\\n
    4. \\nPor faltas a la moral o a las buenas costumbres y consideradas graves a criterio del Consejo de Administración.
    5. \\n
    6. \\nSi un usuario o sus invitados son sorprendidos extrayendo o hurtando objetos, equipo, o valores propiedad del club o de cualquiera de sus usuarios.\\n
    7. \\nPor falta de respeto o maltrato a los empleados de ALTEA WELLNESS CLUB, consideradas graves a criterio del Consejo de Administración.\\n
    8. Por actitud negativa del usuario, familiares o invitados del mismo hacia los intereses de ALTEA WELLNESS CLUB\\n
    9. \\nPor faltas graves en contra del derecho o buen nombre de ALTEA WELLNESS CLUB o en contra del honor o dignidad de los demás usuarios.\\n
    10. Por condenación a causa de delitos o antecedentes penales.
    11. \\nPor destrucción o maltrato a las instalaciones o equipos de ALTEA WELLNESS CLUB de forma deliberada.
    12. \\nPor introducir toda clase de alimentos, frutas o bebidas, bebidas alcohólicas, armas y en general cualquier sustancia o artículo que pueda ocasionar daño o lesiones a los usuarios o a las instalaciones de ALTEA WELLNESS CLUB.\\n
    13. \\nSi acontece cualquier hecho no descrito en los incisos anteriores y el Consejo de Administración considera procedente imponer una suspensión.\\n
    14. \\nEl Consejo de Administración, es la instancia correspondiente para determinar y vigilar el cumplimiento de la suspensión de un usuario de ALTEA WELLNESS CLUB o de sus invitados.\\n
    15. \\nLa suspensión es aplicable a todos los integrantes de la membresía, por lo tanto, ninguno de ellos podrá hacer uso de las instalaciones del Club mientras dure la sanción impuesta.\\n
    16. \\nCualquier amonestación o suspensión temporal o definitiva deberá ser notificada al infractor por la vía que se considere más eficaz.\\n
    17. \\nCualquier socio suspendido temporal o definitivamente NO tendrá derecho de apelación ante ninguna instancia u autoridad de ALTEA WELLNES CLUB.\\n
    18. \\nLa suspensión del uso de las instalaciones del Club por faltas al reglamento ó acumulación de amonestaciones, no exime al socio del pago de las cuotas de mantenimiento y adeudos pendientes, la falta de pago de cuotas en este supuesto dará origen a una cancelación de membresía y exclusión automática del club.\\n
    19. \\nSi ocurre una falta de respeto a los miembros del Consejo de Administración, empleados y servidores del Club que a juicio del Consejo de Administración o sus órganos auxiliares amerite tal suspensión.\\n

    SUSPENSION DEFINITIVA O EXPULSIÓN

    \\nEl Consejo de Administración tiene la facultad de cancelar la membresía de cualquier usuario y excluirlos del club de acontecer cualquiera de los siguientes supuestos:\\n
    1. \\nSerá causa de suspensión definitiva y cancelación de la membresía, la falta de pago de TRES meses consecutivos de mantenimiento.\\n
    2. Si se dictan en contra de un usuario dos o más sanciones.
    3. \\nSi algún usuario o sus invitados causan perjuicios intencionales graves a las instalaciones, establecimientos, locales y demás activos de ALTEA WELLNESS CLUB, a juicio del Consejo.\\n
    4. \\nSi la conducta de algún usuario de ALTEA WELLNESS CLUB es de tal manera ofensiva y grave a juicio del Consejo de Administración, que hubiese herido la dignidad de algún otro usuario, sus invitados o visitantes; o sea contraria a las buenas costumbres establecidas por la comunidad que integran los usuarios dentro de ALTEA WELLNESS CLUB.\\n
    5. \\nLa suspensión definitiva y cancelación de la membresía, no exime al socio del pago de las cuotas de mantenimiento y sus adeudos pendientes.\\n
    6. \\nEn los casos de suspensión o cancelación acordados por el Consejo de Administración, a que se refieren los artículos anteriores, el usuario sancionado estará impedido de entrar a las instalaciones, establecimientos, locales y demás activos de ALTEA WELLNESS CLUB y de hacer uso de los servicios que éste presta incluso en la calidad de invitado.\\n
    7. La imposición de las sanciones que previene este reglamento corresponde al Consejo de Administración.
    8. \\nEl Consejo de Administración tendrá facultad para amonestar a quienes infrinjan las disposiciones de este reglamento y las resoluciones que el propio Consejo dicte, y podrá decretar la amonestación, suspensión temporal o definitiva de sus derechos como usuario.\\n
    9. \\nLos casos en que el consejo de administración tenga que aplicar una suspensión temporal o definitiva a un usuario por violaciones a las reglas ó por las causas antes señaladas, no se reembolsará cuota o pago alguno recibido por parte de los usuarios.\\n

    CAPÍTULO X
    HORARIOS DE SERVICIO

    \\nLa Administración de ALTEA WELLNESS CLUB determinará los horarios en que se otorgarán los diversos servicios, siendo obligación de los usuarios observar en forma estricta los horarios establecidos, así como las actividades y profesores que se asignen. LUNES A VIERNES DE 6:00 A 22:00 HRS. SÁBADOS DE 7:00 A 17:00 HRS., DOMINGOS Y DÍAS FESTIVOS DE 7:00 A 14:00 HRS. LOS DÍAS 25 DE DICIEMBRE Y EL PRIMERO DE ENERO EL CLUB PERMANECERÁ CERRADO.\\n

    CAPÍTULO XI
    MODIFICACIONES AL REGLAMENTO

    1. \\nEl presente reglamento podrá reformarse total o parcialmente por resolución del Consejo de Administración de ALTEA WELLNESS CLUB sin previo aviso, según las circunstancias o condiciones que así lo demanden.\\n
    2. \\nEl Consejo de Administración de ALTEA WELLNESS CLUB, podrá expedir avisos o circulares con disposiciones, mismas que serán obligatorias y de aplicación general e inmediata para todos los usuarios.\\n
    3. El presente reglamento interno, entra en vigor a partir de la fecha de su publicación.
    \\n\\n
    Fecha: {{vm.data.date| date: \\'dd/MM/yyyy\\'}}Membresía: {{vm.data.dueName}}Nombre titular: {{vm.data.partnerName}}
    Recibí reglamento interno de usuarios de Altea Wellness Club
    \\nAVISO DE PRIVACIDAD. ALTEA FITNESS, S.A. DE C.V., también con conocida como ALTEA WELLNESS CLUB, S.A. DE C.V. con domicilio en Boulevard Ramón G. Bonfil, número 1800, Colonia Venta Prieta, en la Ciudad de Pachuca de Soto, Estado de Hidalgo, C.P. 42084 utilizará sus datos personales recabados para: Verificar y confirmar su identidad. Estableces los datos de contacto. Comercialización de productos y servicios que ofrecemos. Datos respecto de sus características y su condición física. Elaboración y expedición de comprobantes fiscales. Dar atención al cliente. Atender y dar seguimiento a dudas, aclaraciones, quejas, sugerencias y reclamaciones. Tratándose de trabajadores o aspirantes que deseen trabajar en ALTEA WELLNESS CLUB los datos recabados se utilizarán para comprobar las cualidades manifestadas por el aspirante, para elaborar el contrato de trabajo y para conformar el expediente laboral. Para más información sobre el tratamiento y los derechos que puede ejercer puede acceder al aviso de privacidad integral en la página de internet https://alteawellnessclub.com/privacidad/\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/contract/contract-default.html\",\"
    ImprimirGuardar\\nFirmar\\nEnviar por email\\nObtener datos nuevamente
    LAYOUT DE CONTRATO VACIO
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/contract/contract-omada.html\",\"
    ImprimirGuardar\\nFirmar\\nEnviar por email\\nObtener datos nuevamente
    CONTRATO NÚMERO: \\n{{vm.data.folioMembresia}}

    \\nCONTRATO DE MEMBRESÍA Y SERVICIOS DE USO DE UN CLUB DEPORTIVO QUE CELEBRAN POR UNA PARTE DEPORTIVO ÓMADA SOCIEDAD DE RESPONSABILIDAD LIMITADA DE CAPITAL VARIABLE POR CUENTA DEL CLUB DEPORTIVO DENOMINADO “ÓMADA CLUB DEPORTIVO” (EN ADELANTE INDISTINTAMENTE COMO “OMADA CLUB DEPORTIVO” O “EL CLUB”), REPRESENTADA EN ESTE ACTO POR EL SEÑOR RAMÓN BERRA DE LA VEGA; Y POR LA OTRA PARTE EL(LA) SEÑOR(A) \\n{{vm.data.razonSocial}}\\n - POR SU PROPIO DERECHO (EN ADELANTE EL “CLIENTE”), CONFORME A LAS SIGUIENTES DECLARACIONES Y CLÁUSULAS.

    DECLARACIONES

    \\nI. DECLARA ÓMADA CLUB DEPORTIVO
    \\na) Ser una empresa legalmente constituida conforme a las leyes mexicanas para prestar los servicios de Club Deportivo.\\n
    \\nb)\tQue el Sr. Ramón Berra de la Vega, como su representante legal, tiene plenas facultades para celebrar el presente Contrato, mismas que a la fecha no les han sido modificadas, revocadas ni restringidas en forma alguna.\\n
    c)\tQue su nombre para identificación fiscal es DEPORTIVO ÓMADA S. DE R.L. DE C.V. y su RFC es DOM240416VB0\\n
    \\nd)\tQue va a operar un Club Deportivo al que comercialmente se le denominará ÓMADA CLUB DEPORTIVO el cual se ubicará en Av. De La Pradera #3, Lomas de Angelópolis, Municipio de Santa Clara Ocoyucan Puebla, CP 72865, Puebla; en el Lote Comercial 15 del complejo inmobiliario denominado Barrio Cascatta y que será operado, diseñado y constituido para este fin.\\n
    \\ne)\tQue la intención del presente Contrato es acordar los términos y condiciones en los cuales se otorgará al Cliente el servicio de membresía del Club Deportivo, una vez que el mismo se encuentre en operación, por lo que el presente Contrato quedará sujeto a las condiciones suspensivas que se incluyen en su clausulado.\\n
    \\nf)\tQue manifiesta su voluntad con la firma del presente Contrato, obligándose en los términos y condiciones que aparece en sus cláusulas.\\n
    II.\tDECLARA EL CLIENTE.
    \\na)\tSer una persona física mayor de edad con capacidad plena para contratar y obligarse a cumplir los términos del presente Contrato y hace como suyos todos los datos personales que en este momento incorpora y se incluyen en la solicitud adjunta como Anexo “A”, cuyos datos y menciones se reproducen en este acto como si a la letra se insertase en este Contrato, ya que serán los datos que el Club Deportivo tomará en cuenta como proporcionados por el Cliente para la prestación del Servicio, en la inteligencia que cualquier cambio o actualización deberá realizarse en el Anexo “A”.\\n
    \\nb)\tQue tiene toda la intención de pagar por el derecho de uso y disfrute temporal que le otorga ser titular de la membresía del Club Deportivo así como de respetar todos y cada uno de los Reglamentos que el Club Deportivo ha expedido y expida en un futuro para regular la correcta interacción en el mismo, incluyendo obligarse y obligar a sus familiares incluidas en su membresía, así como a sus correspondientes invitados, a cumplir con los términos y condiciones señalados en el presente Contrato.\\n
    \\nc)\tQue en caso de tener una membresía familiar o de pareja, se obliga a dar a conocer a cada uno de sus familiares o personas que haya asignados como usuarios incluidos en su membresía (en adelante los usuarios) del Club Deportivo, todas y cada una de las reglas que deben de ser cumplidas por ellos durante el uso del Club Deportivo, haciéndose responsable directo el Cliente de todos los actos que estos usuarios realicen, por lo que en todos los términos del Contrato que involucren conductas o actividades u obligaciones serán entendidas que por Cliente abarca el compromiso de todos los usuarios asignados en una membresía, con lo que manifiesta su conformidad en este acto el Cliente.\\n
    \\nd)\tQue conoce y acepta que los derechos y obligaciones del presente Contrato, no pueden ser cedidos por el Cliente o los usuarios, salvo las excepciones que marca el presente Contrato, pero que en principio quedan al arbitrio exclusivo del Club Deportivo.\\n
    \\ne)\tQue es su voluntad celebrar el presente Contrato en los términos y condiciones señalados en declaraciones y cláusulas de este.\\n
    Una vez hechas las declaraciones anteriores, ambas Partes se otorgan las siguientes:
    CLÁUSULAS

    PRIMERA.- CONTRATO – MEMBRESÍA.\\n En virtud del Presente Contrato, las Partes acuerdan y pactan la forma, tiempo, modo y circunstancias en que el Club Deportivo otorgará al Cliente un derecho revocable para la prestación del servicio de uso de instalaciones del Club Deportivo denominado ÓMADA CLUB DEPORTIVO, Contrato que una vez suscrito hará las veces de membresía.\\n
    I.\tLUGAR DE SERVICIOS Y HORARIOS DE PRESTACIÓN DE ESTOS.\\n Los servicios se suministrarán exclusivamente en la dirección que se señala al rubro y en los siguientes horarios:
      \\n
    • Lunes a viernes es: De 6:00 a 23:00 horas.
    • Sábado: De 7:00 a 21:00 horas.
    • \\nDomingo: De 7:00 a 19:00 horas.
    • Días Festivos: Según programación anticipada del Club Deportivo.
    \\n
    \\nII.\tToda modificación a los horarios será avisada anticipadamente por el CLUB DEPORTIVO, mediante anuncios fijados en el establecimiento, salvo causas de fuerza mayor.\\n
    SEGUNDA.- PAGO POR MEMBRESÍA.\\n Las Partes acuerdan que en la fecha de firma del presente Contrato, el Cliente se obliga a pagar por concepto de pago de membresía la cantidad de $30,000.00 (Treinta mil pesos 00/100 Moneda Nacional) más IVA(Con las excepciones de promoción de preventa y promociones mensuales subsecuentes), lo cual le otorgará al Cliente la calidad de miembro del Club Deportivo y en un futuro a gozar del uso de las instalaciones, uso que quedará sujeto a las condiciones suspensivas que se establecen en la Cláusula Tercera siguiente. El Club Deportivo se obliga a emitir comprobante fiscal digital (CFDI) del pago que se realice por dicho concepto.\\n
    TERCERA.- CONDICIONES SUSPENSIVAS.\\n El uso y disfrute de las instalaciones del Club Deportivo estará sujeto a las siguientes condiciones suspensivas: (i) La conclusión total de las obras del Club Deportivo; y, (ii) Que el Club Deportivo abra sus puertas y entre en Operación; en este orden e ideas, el Club Deportivo se obliga a notificarle al Cliente con 15 días de anticipación la fecha en la cual se realice la apertura que marque el inicio de operaciones del Club Deportivo para que en el siguiente mes inicie con el pago de las cuotas de mantenimiento a que se refiere la cláusula cuarta siguiente.\\n
    \\nCUARTA.- TIPOS DE MEMBRESIAS, PAGO POR MANTENIMIENTOS E INCREMENTO AL PAGO DE MANTENIMIENTO.
    1.\tTIPOS DE MEMBRESÍAS.\\n El Cliente, a través del Anexo “A” realizó la solicitud de ser miembro del Club Deportivo y éste ha aceptado que el Cliente esté en la capacidad de utilizar de forma temporal y revocable las instalaciones del Club Deportivo, una vez cumplidas las Condiciones Suspensivas arriba citadas. El Cliente ya ha seleccionado su membresía tal como aparece en el propio Anexo “A”, de entre las membresías que ofrece el Club Deportivo conforme a la siguiente clasificación y conforme al tipo de ésta será el pago de las cuotas de mantenimiento mensual que el Cliente deberá realizar al Club Deportivo:\\n
    I.\tMEMBRESÍA INDIVIDUAL.\\n Esta membresía le otorga al Cliente solamente su membresía de titular.
    II.\tMEMBRESÍA DE PAREJA.\\n Esta membresía le otorga al Cliente una membresía de titular y 1 (un) usuario adicional al Cliente.
    III.\tMEMBRESÍA FAMILIAR.\\n Esta membresía es otorgada al Cliente que ha manifestado su deseo de inscribir a su familia en el Club Deportivo y éste le otorga al Cliente la membresía de titular y dependiendo de la modalidad(Familiar 3, Familiar 4, Familiar 5) hasta 4 (cuatro) registros de diferentes usuarios adicionales al Cliente que deberán ser: esposa y descendientes directos menores de 30 años (hijos); con la opción para que el Cliente pueda incluir a otros 2 (dos) usuarios adicionales por un costo extra en el pago de la mensualidad a ser establecido discrecionalmente por el Club Deportivo. III.I MENORES DE EDAD. Sin perjuicio a lo establecido en el Reglamento se observará lo siguiente: Para el registro e inscripción de menores de edad, estos deberán presentar petición por escrito de puño y letra de los padres o tutor, donde deslindan a la empresa y se obligan solidariamente a reparar cualquier daño ocasionado por el menor referido, asimismo el titular de la inscripción es responsable en todo momento por su seguridad y conducta.\\n
    IV.\tMEMBRESÍA FAMILIAR EXTENDIDA.\\n Será aquella membresía Familiar que incluya a un máximo de 2 (dos) ascendientes directos (abuelos paternos o maternos) por membresía familiar. En este caso el costo de la membresía sufrirá un incremento total en $5,000.00 ( Cinco mil pesos 00/100 Moneda Nacional) más IVA, adicionales al pago de la membresía señalado en la cláusula segunda anterior.\\n
    V.\tMEMBRESÍA ESTUDIANTE.\\n Esta membresía le otorga al Cliente solamente su membresía de titular. Mismo que deberá acreditar tener 15(Quince) años cumplidos y menos de 26(Veintiséis), además ser estudiante de un programa oficial con validez en la Secretaría de Educación Pública.\\n
    VI.\tMEMBRESÍA MÁSTER.\\n Esta membresía le otorga al Cliente solamente su membresía de titular. Mismo que deberá acreditar tener 60(Sesenta) Años cumplidos en la fecha de su registro.\\n
    2.\tPAGO POR MANTENIMIENTOS.\\n El Cliente se obliga a pagar al Club Deportivo de forma mensual y dentro de los primeros cinco días hábiles de cada mes, el pago de las cuotas de mantenimiento anteriormente señalado, dependiendo el tipo de membresía con la que cuente y de acuerdo a la siguiente tabla(Vigente durante 2025).\\n
    \\n\\n
    CUOTA MENSUAL
    TIPO2025OBSERVACIONES
    INDIVIDUAL$ 2,320.00UNA PERSONA\\n
    PAREJA$ 3,063.00\\nDOS PERSONAS CON RELACIÓN INDISTINTA
    FAMILIAR 3$ 4,060.00\\nPADRE Y/O MADRE CON 1-2 HIJOS
    FAMILIAR 4$ 4,500.00\\nPADRE Y/O MADRE CON 2-3 HIJOS
    FAMILIAR 5$ 5,000.00\\nPADRE Y/O MADRE CON 3-4 HIJOS
    FAMILIAR EXTENDIDA$ 7,250.00\\nNÚCLEO FAMILIAR DE HASTA 5 + 2 ABUELOS
    ADICIONAL INVITADO\\n$ 1,320.00\\n4o. HIJO O FAMILIAR INVITADO
    UNIVERSITARIO HASTA 24 AÑOS\\n$ 1,320.00\\nINDIVIDUAL ESTUDIANDO PROGRAMA OFICIAL
    MÁSTER 60+$ 1,320.00\\nINDIVIDUAL CON 60 AÑOS CUMPLIDOS

    \\n3.\tEL PAGO POR CUOTAS DE MANTENIMIENTOS.\\notorga el derecho al Cliente de usar las instalaciones del Club Deportivo, en los horarios de funcionamiento de este y adicionalmente a dichos pagos por cuotas de mantenimiento invariablemente deberán seguir las siguientes reglas:\\n
    \\n(i)\tEl costo de cada uno de los pagos por mantenimiento, variarán dependiendo el tipo de membresía contratada y el costo de la cuota de mantenimiento mensual, será notificada por el Club Deportivo, en el mismo momento en que se notifique la apertura de este.\\n
    \\n(ii)\tSólo se aceptarán transferencias electrónicas, pago con cheques o con pago de tarjeta de crédito o débito en las terminales punto de venta que en su momento se encuentren en las oficinas administrativas del Club Deportivo. Queda acordado por las Partes que sólo se aceptarán pagos en efectivo directamente depositados en ventanilla bancaria.\\n
    \\n(iii)\tLos pagos mensuales de cuotas de mantenimiento deberán pagarse a la cuenta bancaria que será proporcionada por el Club Deportivo al Cliente.\\n
    \\n(iv)\tEl Cliente podrá realizar pagos anticipados anuales o mensuales, sin que exista un cargo adicional por este hecho; por su parte el Club Deportivo podrá, a su libre criterio, otorgarle un beneficio de conformidad con las políticas y presupuesto que tenga para ese año. No aplica ningún beneficio cuando el Cliente se ponga al corriente cuando haya existido un atraso en sus cuotas de mantenimiento y los pagos anticipados obedezcan también a ponerse al corriente.\\n

    BENEFICIOS POR PRONTO PAGO.
    • \\nPor el pago anticipado de TRES cuotas mensuales de mantenimiento el CLUB DEPORTIVO obsequia el 5% (Cinco por ciento)de descuento.\\n
    • \\nPor el pago anticipado de SEIS cuotas mensuales de mantenimiento el CLUB DEPORTIVO obsequia el 7% (Siete por ciento) de descuento.\\n
    • \\nPor el pago anticipado de DOCE cuotas mensuales de mantenimiento el CLUB DEPORTIVO obsequia el 10% (Diez por ciento) de descuento.\\n
    • \\nLos puntos 4.1, 4.2 y 4.3 aplican solo para pagos anticipados en una sola exhibición de contado, para promociones de pagos a meses sin intereses, aplica la promoción al 50%, en otros casos consultar los términos y condiciones.\\n
    \\n(v)\tAmbas Partes acuerdan que los pagos por cuotas de mantenimiento solamente incluyen el uso común y cotidiano de las instalaciones del Club Deportivo, por lo que los servicios optativos tales como: clases privadas, entrenadores privados o profesores privados, consumo de bebidas y alimentos, renta de espacios y salones para eventos privados, alquiler de instalaciones del Club Deportivo para fines privados y otros que defina el Club Deportivo, serán cobrados por éste, como adicionales y con la tarifa que el Club Deportivo señale o fije para cada caso.\\n
    \\n(vi)\tCualquier falta de pago de las cuotas de mantenimiento, dará derecho al Club Deportivo a suspender temporalmente el uso de sus instalaciones al Cliente y a sus usuarios, hasta que se confirme el pago total de las cantidades adeudadas.\\n
    \\n(vii)\tLa falta de pago puntual de las cuotas de mantenimiento dará derecho al Club Deportivo de cobrar una penalización o comisión por concepto de mora equivalente al 10% mensual por cada uno de los pagos vencidos, misma que será obligatoria cubrir por el Cliente para que se reinstalen los servicios de uso.\\n
    4.\tINCREMENTOS AL PAGO DE MANTENIMIENTO.\\n. Las Partes acuerdan que el Club Deportivo se reserva el derecho de incrementar de forma anual o en su caso de tiempo en tiempo, el monto establecido como pago de cuotas de mantenimiento tomando en consideración: (i) los aumentos que llegue a presentar el salario mínimo general de la zona en que se encuentra ubicado el Centro Deportivo; (ii) el índice Nacional de Precios al Cliente (INPC); y, (iii) los incrementos a los costos de operación del propio Centro Deportivo. Todos los incrementos a las cuotas de mantenimiento deberán ser notificados por el Club Deportivo al Cliente con una anticipación de 30 (treinta) días naturales de anticipación, siendo publicados en las pantallas y pizarrones del club y enviado al correo electrónico del Cliente, proporcionado en el Anexo “A” del presente Contrato.\\n
    QUINTA.- VIGENCIA DEL CONTRATO Y LA MEMBRESÍA.\\nEl presente Contrato como membresía, tendrá una vigencia de 5 (cinco) años contados a partir de los siguientes momentos: (i) la Fecha en que el Club Deportivo abra sus puertas y entre en Operación; o, (ii) a partir de la firma del presente Contrato, en caso de que ya se encuentre en operación el Club Deportivo.\\n
    SEXTA.- CASO FORTUITO Y FUERZA MAYOR.\\n Ambas Partes convienen que si durante la vigencia del presente Contrato, se llegare a presentar un caso fortuito y/o fuerza mayor que sea declarado por las autoridades competentes, que haya impedido o impida la prestación del servicio de uso de las instalaciones del Club Deportivo materia del presente Contrato, las actividades del Club Deportivo deberán limitarse de conformidad con las indicaciones de las autoridades correspondientes y si es el caso, permanecer cerradas durante el tiempo en que ésta circunstancia de caso fortuito y/o fuerza mayor se presente, con lo que está de acuerdo el Cliente, por lo cual este último se abstendrá de exigir el acceso al mismo o bien, este caso fortuito y/o fuerza mayor prorrogará la apertura de la operación del Club y la vigencia del contrato se prorrogará en automático el mismo tiempo en que haya durado dicho caso fortuito y/o de fuerza mayor. Para el cumplimiento de las obligaciones de pago a cargo del Cliente, las Partes pactan que no aplicará por ningún motivo la aplicación de caso fortuito y/o fuerza mayor o cualquier otra circunstancia que el Cliente alegue como una forma para no cumplir y/o prorrogar el cumplimiento de las obligaciones de pago a su cargo contraídas a través del presente Contrato y solamente si el caso fortuito y/o fuerza mayor llegue a durar más de 90 (noventa) días naturales, el Club Deportivo notificará por correo electrónico al Cliente las medidas que se tomarán al respecto.\\n
    SÉPTIMA.- OBLIGACIONES DEL CLUB DEPORTIVO.\\n Ambas Partes pactan que serán obligaciones del Club Deportivo las siguientes:
    \\na)\tMantener las instalaciones del Club Deportivo en las condiciones adecuadas para su funcionamiento y cumplir las finalidades para las cuales fueron diseñadas.\\n
    \\nb)\tBrindar el servicio de uso de las instalaciones del Club Deportivo de forma profesional, empleando gente capacitada para cada área del Club Deportivo.\\n
    \\nc)\tLlevar un expediente del Cliente y cumplir en todo momento con las estipulaciones de la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, para lo cual señala la siguiente liga, en donde se encuentra el Aviso de Privacidad aplicable al Club Deportivo, por ser un Fideicomiso de Grupo Proyecta: https://www.grupoproyecta.com/privacidad.html?prefetchDate=1636469915505.\\n
    \\nd)\tEmitir al Cliente, cuando así lo solicite por los canales señalados, las facturas por el pago de la membresía y las cuotas de mantenimiento correspondientes.\\n
    \\ne)\tMantener constante comunicación con el Cliente respecto de la reglamentación del uso, horarios y actividades del Club Deportivo.\\n
    \\nf)\tEl club se compromete a brindar al usuario una oferta de actividades deportivas, recreativas y culturales que estarán incluidas en su cuota mensual, dichas actividades estarán publicadas en los pizarrones dispuestos para tal efecto y señaladas como actividades abiertas para los usuarios.\\n
    Dichas actividades excluyen:
    • Clases de natación grupales.
    • \\nActividades y clases señaladas como particulares o personalizadas.
    • \\nEntrenamientos personalizados de toda naturaleza.
    • Clases especiales.
    • Cursos.
    • Talleres.
    • \\nClínicas
    • Torneos
    • Exhibiciones.
    • \\nClases brindadas por instructores o entrenadores externos o especializados.
    \\ng)\tPara que el cliente pueda ingresar a las clases o actividades deberá registrarse en los formatos y/o plataformas digitales establecidas para tal efecto o en el caso de infantes menores de edad ser parte del programa de entrenamiento o de la propia actividad.\\n
    OCTAVA.- OBLIGACIONES DEL CLIENTE.
    \\na)\tRealizar el pago de las cuotas de mantenimiento, dentro de los primeros cinco días naturales de cada mes, a partir de que sea notificada la apertura del Club Deportivo o bien, a partir de la firma del presente Contrato en caso de que éste ya se encuentre en operación para cuando se verifique la fecha de firma del presente Contrato.\\n
    \\nb)\tUna vez pagada la inscripción y la cuota mensual de mantenimiento que proceda, el CLUB DEPORTIVO dotará al CLIENTE de una clave, credencial o registrará sus datos biométricos de identificación, que deberá utilizar para lograr su acceso y permanencia en las instalaciones. El CLUB DEPORTIVO podrá inhibir el registro del CLIENTE y negar el acceso a las instalaciones, en caso de falta de pago de una o más cuotas mensuales de mantenimiento, o por suspensión temporal o definitiva de sus derechos, o por mal uso de esta.\\n
    \\nc)\tCumplir cabalmente con cualquier obligación contenida en cualquier norma, reglamento o aviso oficial emitido por el Club Deportivo, que rija el correcto uso de las instalaciones y de las diferentes áreas específicas del Club Deportivo.\\n
    d)\tUSO DE LAS INSTALACIONES, RIESGOS Y PROHIBICIONES:\\n Sin perjuicio a lo establecido en el Reglamento correspondiente, el CLIENTE estará sujeto a lo siguiente.
    \\nI.\tEL CLIENTE podrá utilizar las instalaciones y equipos dentro de los horarios establecidos.
    \\nII.\tEl CLIENTE o sus beneficiarios deslindan a la empresa y/o a sus empleados, de toda responsabilidad legal, económica o de cualquier tipo, derivada de las lesiones o muerte que pueda sufrir por el desempeño de su actividad deportiva.\\n
    \\nIII.\tCon relación a lo anterior, el CLIENTE asegura estar en óptimas condiciones de salud para el desempeño de su actividad deportiva. En caso de tener alguna condición física especial deberá presentar a la empresa el o los certificados médicos correspondientes para mantener una supervisión más cercana del personal, pero finalmente será su responsabilidad abstenerse a realizar actividades recreativas o deportivas que llegaren afectarlos o causarles la muerte.\\n
    \\nIV.\tEl CLIENTE pagará todo daño parcial o total que provoque a las instalaciones o los equipos por el uso inadecuado o negligente que haga de los mismos.\\n
    e)\tPROHIBICIONES PARA EL CLIENTE DENTRO DE LAS INSTALACIONES.
    \\nI.\tNo podrá circular sin zapatos, sin camisa o en general con vestimenta que sea inadecuada para el área específica en que se encuentre.\\n
    \\nII.\tNo podrá entrar al club bajo el efecto de bebidas alcohólicas, psicotrópicos, drogas o en general de cualquier sustancia tóxica o nociva, o consumirlas en las instalaciones.\\n
    III.\tIntroducir vasos, botellas o cualquier otro recipiente de vidrio.
    \\nIV.\tFumar(Salvo en las áreas específicamente señaladas).
    \\nV.\tIntroducir armas, explosivos, objetos punzo cortantes o de cualquier forma o material que pueda causar lesiones a él mismo o a terceros.\\n
    VI.\tIntroducir animales o mascotas.
    VII.\tIntroducir alimentos o bebidas a las instalaciones.
    \\n
    \\nVIII.\tAdoptar conductas verbales o físicas, injuriosas, lascivas, o de cualquier índole que riñan contra la moral, las buenas costumbres o la seguridad física de los clientes o los empleados de la empresa.\\n
    \\nIX.\tOfrecer, vender, comprar, suministrar o suministrarse por sí o con ayuda, cualquier tipo de sustancia en la presentación que sea, excepto tratándose de medicamentos con la prescripción médica correspondiente y para su uso personal.\\n
    \\nf)\tLos incumplimientos a dichas prohibiciones serán materia de sanción por parte del CLUB DEPORTIVO, mismas que serán:\\n
    I.\tLlamada de atención verbal y amonestación por escrito por parte del personal facultado de la empresa.\\n
    II.\tLa suspensión temporal de acceso a las instalaciones.
    \\nIII.\tLa cancelación definitiva de acceso a las instalaciones dando por terminado el contrato.
    \\nIV.\tLo anterior sin perjuicio de avisar a las autoridades competentes cuando así proceda.
    \\ng)\tEl Cliente y sus usuarios, deberán conducirse dentro de las instalaciones del Club, con buena conducta, evitando poner en peligro su integridad física, así como la de otros Clientes, de sus propios familiares o invitados y de cualquier persona que se localice dentro de las instalaciones del Club Deportivo, incluyendo, desde luego, cualquier trabajador del Club Deportivo.\\n
    NOVENA.- TRANSFERENCIA DE DERECHOS.\\n L. Las Partes pactan que los derechos y las obligaciones de la membresía que se generan en este Contrato son intransferibles para el Cliente. Por lo que respecta al Club Deportivo, los derechos y las obligaciones podrán ser cedidos, enajenados o transferidos a voluntad del Club Deportivo a cualquier persona física o moral y basta la notificación con 30 (treinta) días de anticipación al Cliente, para conocimiento de éste.\\n
    \\nEl Club Deportivo solamente puede aceptar la transferencia de los derechos y obligaciones de esta membresía cuando el cliente lo solicite por escrito y justifique de buena voluntad la necesidad de dicha transferencia, en este caso la transferencia queda sujeta a la aprobación por parte del área Jurídica del Club Deportivo y al pago de los derechos correspondientes por un monto de $5,000.00 (Cinco mil pesos 00/, en el caso de que se presente el fallecimiento del Cliente. En este caso, el usuario asignado por el Cliente, en M.N.)primer lugar señalado en la solicitud adjunta como Anexo “A”, deberá comprobar el fallecimiento del Cliente, presentando la correspondiente acta de defunción, para que el Club haga la transferencia de derechos a dicho usuario, o bien, se lleve a cabo la baja total de la membresía, en caso de que no sea del interés de dicho usuario, continuar con la vigencia del Contrato.\\n
    DÉCIMA.- SUSPENSIÓN DE LA MEMBRESÍA POR AUSENCIA DECLARADA.\\n\\n. Las Partes acuerdan que en caso de que el Cliente tenga la necesidad imperiosa de ausentarse temporalmente, éste deberá dar aviso al Club Deportivo de la ausencia (la Ausencia Declarada), Personalmente, a través de un tercero y confirmando mediante un correo electrónico con 15 (quince) días de anticipación en el que señale la fecha de inicio y de final de la Ausencia Declarada, con el objeto de que el Club Deportivo suspenda por este tiempo la prestación de los servicios de uso al Cliente. La Ausencia Declarada solo podrá presentarse por un período mínimo de 2 (dos) meses y máximo de 1 (un) año; y será durante este período en que el Cliente sólo deberá pagar el 30% (treinta por ciento) el monto de su cuota de mantenimiento, durante la Ausencia Declarada. Dicha Ausencia declarada no podrá realizarse en los meses de diciembre, Julio, agosto y el mes que corresponda al periodo vacacional de semana santa, salvo en los casos de acreditar causa medica de fuerza mayor.\\n
    RESTRICCIONES A LA AUSENCIA DECLARADA:
    \\na)\tLa Ausencia Declarada solo puede durar como máximo 1 (un) año, y en caso de que se prorrogue esta temporalidad el Club Deportivo cancelará definitivamente la membresía y rescindirá el presente Contrato.\\n
    \\nb)\tDurante la Ausencia Declarada, ninguno de los usuarios y/o el Cliente podrá hacer uso de las instalaciones del Club Deportivo.\\n
    \\nc)\tSi la Ausencia Declarada es igual o menor a 2 (dos) meses, el Cliente deberá pagar completamente el monto de las cuotas de mantenimiento.\\n
    \\nd)\tNo podrá solicitarse otra Ausencia Declarada en el término de un año, contado a partir del regreso de la última Ausencia Declarada.\\n
    \\ne)\tCualquier otro caso especial, será directamente tratado con la Administración del Club Deportivo y su decisión será determinante e inapelable.\\n
    \\nDÉCIMA PRIMERA.- TERMINACIÓN DEL CONTRATO Y MEMBRESÍA; PENA CONVENCIONAL.
    \\nI.\tLas Partes pactan que son causales de rescisión del presente Contrato por responsabilidad del Cliente, las siguientes causas:\\n
    \\na)\tLa falta de pago por parte del Cliente de 3 (tres) mensualidades consecutivas o de (4) cuatro mensualidades alternas sin pago.\\n
    \\nb)\tLa transgresión de cualquier regla o norma que el Club Deportivo haya impuesto que haya sido cometida por el Cliente y/o sus usuarios y/o sus invitados.\\n
    c)\tProlongar por más de un año la Ausencia Declarada.
    \\nd)\tCualquier demanda judicial, jurisdiccional o administrativa presentada en contra del Club Deportivo, cualquiera que sea su causa.\\n
    \\ne)\tRealizar propaganda negativa al Club Deportivo, por cualquier medio de comunicación que, a discreción del Club Deportivo, le cause un daño reputacional.\\n
    \\nDe presentarse los casos antes señalados, la terminación del Contrato será inmediata y dará derecho al Club Deportivo a cancelar la membresía del Cliente para disponer de ella a su libre criterio, sin que ninguna de las Partes tenga que acudir a autoridad alguna a solicitar la rescisión judicial del mismo. En este sentido el Cliente perderá su lugar como usuario y no tendrá derecho alguno a la exigencia de devolución del pago de: (i) su membresía; (ii) pagos por cuotas de mantenimiento, aún aquellos que hayan sido pagados de forma anticipada; y, (iii) cualquier otro concepto pagado al Club Deportivo de forma anticipada, así como de reclamar el pago de interés alguno, o cantidad alguna o cualquier otro concepto, con lo que desde ahora está de acuerdo el Cliente.\\n
    DÉCIMA SEGUNDA. - RENOVACIÓN DE LA MEMBRESÍA.\\n La renovación de la membresía será un derecho que el Club Deportivo le concede al Cliente para que una vez que haya terminado la vigencia del presente Contrato, éste tenga acceso directo a renovar su membresía con los siguientes requisitos y derechos preferenciales.\\n
    \\na)\tEl Cliente podrá renovar su membresía con un beneficio económico consistente en el 50% del costo de una membresía nueva.\\n
    b)\tEl Cliente deberá estar al corriente en el pago de sus cuotas de mantenimiento y nunca haberse atrasado.\\n
    c)\tEl Cliente no debió haber sido sancionado de forma alguna por el Club Deportivo.
    \\nd)\tLa renovación de la membresía será por el plazo de 5(Cinco años)a partir de la fecha de dicha renovación o que el Club Deportivo indique a su entera discreción.\\n
    DÉCIMA TERCERA.- PROMOCIONES Y COSTOS ADICIONALES.\\n. El Club Deportivo se reserva el derecho de poner a disposición del Cliente y sus respectivos usuarios, las promociones en los términos y vigencias que considere convenientes, así como de retirarlas, incluso sin previo aviso. De igual forma el Club Deportivo se reserva el derecho a reservar para el uso exclusivo propio, las áreas e instalaciones del Club Deportivo, para llevar a cabo cualquier tipo de eventos que considere convenientes para la promoción tanto del Club Deportivo, como del Desarrollo Inmobiliario Lomas de Angelópolis.\\n
    \\nSe considerarán como costos adicionales no incluidos en la cuota de mantenimiento, todas aquellas actividades que se desarrollen en el Club Deportivo y que tengan un costo unitario por servicios o productos que se vendan o arrenden dentro del Club Deportivo, los cuales, de forma enunciativa y no limitativa se señalan: las cuentas de los restaurantes y cafetería, los productos de las tiendas o boutiques que, en su caso, existan dentro del Club Deportivo, los servicios y/o honorarios de maestros particulares, la renta de cualquier área, salón, instalación, lockers o equipo del Club Deportivo para uso exclusivo de algún Cliente.\\n
    DÉCIMA CUARTA.- DOMICILIOS Y NOTIFICACIONES.\\n. Las Partes convienen en que todos los avisos, notificaciones y requerimientos que deban realizarse bajo el presente Contrato, deberán hacerse por escrito con acuse de recibo, por medio de entrega personal, correo electrónico o mensajería especializada, a las direcciones que aparecen en el Anexo “A” del presente Contrato.\\n
    El Club Deportivo:
    Av. De La Pradera #3, Barrio Cascatta.
    Colonia Lomas de Angelópolis\\n
    Santa Clara Ocoyucan, Puebla.
    Código Postal 72865
    Correo electrónico: administracion@omada.city
    \\no a cualquier otro domicilio que por escrito notifiquen a la otra parte en los términos antes previstos, en la inteligencia de que cualquier cambio de domicilio que notifiquen, estará vigente al siguiente día hábil de efectuada la notificación correspondiente.\\n
    DÉCIMA QUINTA.- ENCABEZADOS, RECLAMACIONES Y VALORES.\\n
    I.\tDE LOS ENCABEZADOS.\\nCada una de las Cláusulas del presente Contrato son empleados únicamente como mera referencia y bajo ningún concepto deberán interpretarse por sí mismos como constitutivos de obligaciones entre las partes o en cualquier forma alterar o sustituir el contenido de su clausulado o utilizarse en la interpretación de este.\\n
    II.\tRECLAMACIONES.-\\n En caso de reclamaciones, el CLIENTE se dirigirá al personal asignado para dicho efecto, quién le proveerá del formulario correspondiente, que una vez llenado y firmado lo devolverá, dándose atención y respuesta en un plazo no mayor a setenta y dos horas, por el conducto que la empresa estime pertinente. No se atenderán reclamaciones vagas, ociosas o imprecisas, por lo que el CLIENTE deberá suministrar a detalle la razón de esta.\\n
    III.\tDE LOS VALORES.\\n EL CLUB DEPORTIVO no se hace responsable por la perdida, extravío o robo de los bienes del CLIENTE. En caso de olvido de objetos que eventualmente sean encontrados por personal del CLUB DEPORTIVO, serán custodiados los mismos hasta por 30 días naturales y vencido este plazo, se donarán a casas de asistencia, sin mayor responsabilidad para la empresa. Para proceder a la devolución del objeto encontrado, será necesario que el CLIENTE describa correctamente al mismo y, en su caso, presente documento que acredite la propiedad, levantándose acta de entrega.\\n
    DÉCIMA SEXTA.– ACUERDO TOTAL E INTEGRIDAD DEL CONTRATO.\\n
    \\nEste Contrato contiene el acuerdo total entre las Partes con respecto al objeto y clausulado del mismo y substituye cualquier pacto, convenio o entendimiento anterior existente entre ellas, ya fuere oral o escrito, salvo el Anexo “A”, el cual es integrante del presente Contrato. Todas y cada una de las declaraciones o compromisos hechos por empleados, agentes o representantes de cualquiera de las Partes que no se contengan en este Contrato, no producirán efecto legal alguno.\\n
    DÉCIMA SÉPTIMA.- LEGISLACIÓN APLICABLE Y JURISDICCIÓN.\\n
    \\nEl presente Contrato se rige e interpreta de acuerdo con la legislación aplicable al Estado de Puebla y cualquier controversia en relación con el mismo será resuelta por los tribunales competentes de la ciudad de Puebla, por lo que las Partes en este acto renuncian irrevocablemente a cualquier otra jurisdicción que pudiere corresponderles en razón de sus domicilios presentes o futuros o por cualquier otra causa.\\n
    \\nLeído que fue el presente Contrato por las Partes y estando enteradas éstas de su valor y fuerza legal, lo firman por duplicado en la Ciudad de Santa Clara Ocoyucan, Puebla, el día {{vm.data.date|date:\\'dd\\'}} de {{vm.data.date|date:\\'MMMM\\'}} de {{vm.data.date|date:\\'yyyy\\'}}.\\n
    EL CLIENTE

    ________________________________________________

    {{vm.data.partnerName}}

    ÓMADA CLUB DEPORTIVO\\n
    (Representado por)

    ________________________________________________

    \\nRAMÓN BERRA DE LA VEGA

    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/contract/contract-operactive.html\",\"
    ImprimirGuardar\\nFirmar\\nEnviar por email\\nObtener datos nuevamente
    \\nContrato que celebran, por una parte OPERADORA ACTIVE PH, S. A. de C. V; denominado en lo sucesivo \\n“EL PRESTADOR”y por la otra parte {{vm.data.razonSocial}}\\n quién por su propio derecho, en lo sucesivo, el “USUARIO TITULAR”, al tenor de las siguientes declaraciones y cláusulas:\\n

    DECLARACIONES:

    I. Declara “EL PRESTADOR”\\n, por conducto de su representante legal que:
    (a)\\n Es una sociedad anónima de capital variable, constituida de conformidad con las leyes de los Estados Unidos Mexicanos y estar legalmente facultada para la celebración del presente contrato, para otorgar el uso de las instalaciones deportivas denominadas ACTIVE CLUB ubicada en Av. Universidad 1883, Col. Oxtopulco Universidad, Alcaldía Coyoacán, C.P. 04318, mismas que en lo sucesivo se denominarán “EL CLUB”.\\n
    (b)\\n Su representante cuenta con todas las facultades necesarias para la celebración del presente contrato, mismas que no le han sido revocadas ni limitadas en forma alguna a la fecha de firma.\\n
    II. Declara el “USUARIO TITULAR”, por su propio derecho, que:
    \\n(a)\\n Es una persona física, con plena capacidad legal para celebrar este Contrato y que tiene su domicilio en \\n{{vm.data.addressStreet}}, {{vm.data.addressColony}}, {{vm.data.addressMunicipio}}, {{vm.data.addressState}}\\n
    (b) Es su voluntad inscribirse como “USUARIO TITULAR”\\n de una membresía: en las instalaciones del club Active Club ubicadas en Av. Universidad 1883, Col. Oxtopulco Universidad, Alcaldía Coyoacán, C.P. 04318, cuyos derechos y obligaciones le han sido ampliamente explicados y que manifiesta son de su entero conocimiento.\\n
    (c)\\n Toda la información establecida en este contrato, incluyendo la carátula es verdadera y correcta.
    \\n(d)\\n Que a la firma del presente contrato ha hecho el pago de la cuota de membresía (cuyo término se define más adelante) correspondiente y que elige pagar la cuota de mantenimiento en la forma establecida en el presente contrato.\\n
    (e) Que ha recibido y leído el REGLAMENTO\\n (según dicho término se define más adelante, que forma parte integral del presente contrato, mismo que se obliga a cumplir y a hacer cumplir por los \\n“USUARIOS DEPENDIENTES” (según dicho término se define más adelante).

    \\nDeclaran las partes que es su voluntad celebrar el presente contrato con sujeción a las siguientes cláusulas:
    CLÁUSULAS:
    \\nPRIMERA:
    DEFINICIONES.\\n Para efectos del presente contrato, se entenderá por:
    1. EL CLUB.-\\n Establecimiento/centro de acondicionamiento físico ubicado en Av. Universidad 1883, Col. Oxtopulco Universidad, Alcaldía Coyoacán, C.P. 04318 al cual tendrán derecho.\\n
    2. MEMBRESÍA.- Membresía que ACTIVE CLUB, otorga al “TITULAR”\\n del contrato, el derecho de hacer uso de las instalaciones de “EL MISMO\\n” y a designar a sus “DEPENDIENTES” de las instalaciones de “EL CLUB”\\n como contraprestación del pago de las cuotas de membresía y mantenimiento:
    A. TIPOS DE MEMBRESÍA.-\\n\\n Clasificación de las membresías con base en el número de personas que bajo el amparo de ésta, tendrán el acceso a \\n“EL CLUB”\\n de acuerdo a la clase de la misma definidas: familiar, pareja, individual, grupal y empresarial.
    \\nPOBLACIÓN ESPECIAL.-\\n Considerados como aquellos usuarios que padezcan alguna enfermedad crónica odegenerativa. Quedan comprendidas también en esta definición aquellas personas con discapacidad física, mental o músculo esquelético parcial o total y cuyas condiciones especiales están comprendidas en las definiciones que establecen las leyes aplicables para estas materias. Manifestando que \\n“EL CLUB”\\n no cuenta con el personal especializado, así como la atención personalizada para dicha población.
    \\n4. VIGENCIA.-\\n El presente contrato tendrá una vigencia indefinida a partir de su suscripción, siempre y cuando mantenga pagadas sus cuotas de mantenimiento teniendo el \\n“USUARIO TITULAR” el derecho a colocar su membresía en los siguientes estatus: \\nINACTIVO TEMPORAL CON AVISO Y BAJA DEFINITIVA cuando ya no les interesen los servicios ofrecidos. Cuando el \\nUSUARIO TITULAR\\n desee reactivar su membresía pagará el porcentaje que se asienta en el formato donde solicita el respectivo estatus\\n
    5. CUOTA DE MEMBRESÍA.- Monto que deberá pagar el “TITULAR”\\n como contraprestación por la adquisición de la membresía en el tipo y/o clase que elija.
    \\n6. CUOTA DE MANTENIMIENTO.- Monto que debe pagar para tener acceso el “TITULAR” y/o los “DEPENDIENTES”\\n\\n que integran la membresía en el tipo elegida, esta cuota puede ser anual, semestral y/o mensual de acuerdo a la opción de precios\\n
    7. INVITADO.- Persona física que en compañía de un “TITULAR” o \\n“DEPENDIENTE”,acude en forma esporádica y eventual a “EL CLUB”\\n para hacer uso de las instalaciones del mismo, previo pago de la cuota por invitación que al efecto determine \\n“EL PRESTADOR”.
    8. TITULAR.-\\n Persona física mayor de edad (o persona moral que suscribe el contrato y a nombre de quien se recibe el pago de las cuotas de membresía y mantenimiento). En el caso de la membresía junior, el padre o tutor será el quién realice los trámites administrativos, quedando este como responsable del menor ante el “EL PRESTADO”\\n
    9. USUARIO DEPENDIENTE.-\\n Persona física mayor de 1 año en adelante que sin ser el suscriptor del contrato es registrado como usuario parte de una membresía de pareja, grupal, familiar, etc.\\n
    10. VISITA EFECTIVA.- Ingreso del usuario a las instalaciones de “EL CLUB”\\n registrado por medio de los sistemas establecidos por “EL PRESTADOR” para tales efectos.
    \\n11. AUSENCIA.-\\n Derecho que tiene el usuario y que deberá ser solicitados por escrito con fecha máxima del día 25 de cada mes, previo al mes de su aplicación, realizando el trámite específico en la Recepción del \\n“EL CLUB”.
    12. CUOTA DE AUSENCIA.-\\n Todas la membresías que se encuentren al corriente de pago tienen el derecho de solicitar ausentarse de \\n“EL CLUB” contemplandose los siguientes esquemas:
    12.1. DOMICILIADO:
    \\na.-\\n Si el pago es domiciliado y el usuario solicita por escrito, de acuerdo a lo establecido en este contrato una ausencia no mayor a los 3 meses deberá de pagar lo correspondiente al 33% adicional de su cuota de mantenimiento al momento de su reactivación. En este tipo de pago si se ausenta del club sin dar aviso a la Administración se le cobrará un 66% sobre su cuota de mantenimiento al momento de su reactivación\\n
    b.-\\n Si el pago es domiciliado y el usuario solicita por escrito, de acuerdo a lo establecido en este contrato una ausencia no mayor a los 3 meses deberá de pagar lo correspondiente al 33% adicional de su cuota de mantenimiento al momento de su reactivación. En este tipo de pago si se ausenta del club sin realizar el trámite respectivo a la Administración se le cobrará un 66% sobre su cuota de mantenimiento al momento de su reactivación.\\n
    c.-\\n En el caso de que el cargo domiciliado para el cobro de su pago mensual de mantenimiento no sea aceptado por el banco respectivo dentro de los primeros 5 días naturales del mes, la administración realizará el cobro en la Recepción del club, aplicándose la tarifa de caja, negándose el acceso al(os) usuario(s) a las instalaciones a partir del 6º. día del mes.\\n
    d.-\\n En las reactivaciones el usuario esta obligado a llenar su nuevo domiciliado, ya que el club por medida de seguridad y uso de datos confidenciales destruye el formato firmado inicialmente.\\n
    12.2. SEMESTRE:
    a.-\\n En este tipo de cuota de mantenimiento el usuario no podrá aplicar ningún periodo de AUSENCIA en el periodo de vigencia de la misma.\\n
    b.-\\n No aplicarán cancelaciones, sustituciones y/o reembolsos de pago de los meses que no se hayan utilizado, siendo requisito indispensable para este producto el firmar el cargo automático el cuál se aplicará al término de la vigencia del mismo en el caso de que no renovar en esta forma de pago.\\n
    12.3. ANUALIDADES:
    a.-\\n El usuario tendrá el derecho de solicitar hasta 3 ausencias durante la vigencia de su periodo cubierto.
    \\nb.-\\n Las ausencias no tendrán ninguna penalización al momento de su reactivación, abonándose dicha ausencia al final de su periodo cubierto..\\n
    c.- No se requiere firmar el formato de cargo domiciliado.
    d.-\\n En caso de cancelación de esta forma de pago se bonificarán los montos de los meses pagados y no disfrutados, aplicándose una penalización adicional del 20%, realizándose el reembolso a los 60 días calendario de realizado este trámite.\\n

    \\nLos mantenimientos SEMESTRALES y ANUALES deberán de notificar a la Administación del Club con 15 días antes de la conclusión de su periodo adquirido el interés de renovar, cambiar de forma de pago o cancelar su membresía.\\n
    13. REGLAMENTO.-\\n Conjunto de normas específicas que regulan los términos y condiciones de la prestación del servicio por parte de \\n“EL PRESTADOR”\\n y el comportamiento de los usuarios, el cual formará parte integral del presente contrato.
    \\n14. AMONESTACIÓN.-\\n Penalización que se impone a los usuarios que incumplen con las obligaciones establecidas en el presente contrato y/o reglamento que no sean consideradas graves. La cual consistirá en la advertencia para que en caso de reincidencia se suspenda de manera provisional el uso de las instalaciones o la rescisión del contrato.\\n
    15. SUSPENSIÓN PROVISIONAL.-\\n Penalización que se impone a los usuarios que incumplen con las obligaciones establecidas en el presente contrato o en su reglamento, que no sean consideradas graves, consistente en el impedimento temporal de acceso a \\n“EL CLUB”. Sin suspender los pagos de mantenimiento correspondientes.
    16. RESCISIÓN:\\n Terminación de la vigencia del presente contrato/membresía por una causa imputable al “TITULAR”\\n o alguno de sus “DEPENDIENTES”.
    17. TERMINACIÓN VOLUNTARIA.-\\n Forma de terminación del presente contrato por parte del “TITULAR”\\n, sin responsabilidad para las partes, previa solicitud por escrito que haga a “EL PRESTADOR”\\n con 30 (treinta) días naturales de anticipación.
    18. AVISO.- Todo comunicado que \\n“EL PRESTADOR”\\n difunda entre la generalidad de los usuarios y que para ser válido, efectivo y aplicable, bastará con que se coloque en lugares visibles de \\n“EL CLUB”.
    SEGUNDA:
    OBJETO:\\n En virtud de la celebración del presente contrato “EL PRESTADOR” pone a disposición del \\n“TITULAR” y “USUARIOS DEPENDIENTES”\\n que este designe, en los términos y condiciones que correspondan a la clase y/o tipo de membresía elegida por el \\n“TITULAR”, el acceso a las instalaciones y a los servicios que se prestan en “EL CLUB”\\n\\n y que se encuentran incluidos en tipo de membresía especificados en el presente contrato, a cambio de la contraprestación señalada en la carátula del presente contrato.\\n
    TERCERA:
    OBLIGACIONES DE LOS USUARIOS: Los “TITULARES”\\n y los “DEPENDIENTES” tendrán a su cargo, las siguientes obligaciones:
    1.\\n\\n A la firma del presente contrato y la carátula, deberá realizar el pago del tipo de membresía elegida, así como el pago de la cuota de mantenimiento correspondiente, pudiéndolo realizar en efectivo, transferencia, cargo a tarjeta de crédito o débito.\\n
    La cuota de mantenimiento puede ser anual, semestral y/o mensual.
    \\nEn el caso del pago de cuota domiciliada el pago deberá realizarse dentro de los 5 (cinco) primeros días del mes.
    \\n
    En caso de que el “TITULAR”\\n no haga el pago del mantenimiento dentro de los 5 (cinco) primeros días del mes “EL PRESTADOR”\\n se reserva el derecho de negarle a éste o a los usuarios dependientes de su membresía el acceso a las instalaciones hasta que lleve a cabo el pago del mantenimiento correspondiente.\\n
    En virtud del presente contrato el “TITULAR”\\n queda obligado al pago de la membresía de la forma que haya elegido aunque no haga uso de las instalaciones, de suceder esto último, gozará de los beneficios que se describen en la cláusula décima quinta del presente contrato.\\n
    “EL PRESTADOR”\\n podrá incrementar el precio de las cuotas de mantenimiento y de servicios de manera anual, para lo cual dará aviso con 30 (treinta) días de anticipación a los usuarios en las instalaciones de \\n“EL CLUB”\\n, por lo que en caso de aceptación de los usuarios, se obligarán a pagar los incrementos que se registren en las cuotas de mantenimiento y servicios a partir del momento que para tal efecto determine \\n“EL PRESTADOR”\\n. Los usuarios gozarán de un plazo de 30 (treinta) días naturales para manifestar su consentimiento con las nuevas cuotas o para dar por terminado el contrato sin ninguna responsabilidad.\\n
    \\nEl uso de las instalaciones es bajo la responsabilidad de cada usuario, los usuarios se comprometen y obligan a usar y hacer que sus invitados usen las instalaciones, equipos y demás bienes propiedad de \\n“EL PRESTADOR”\\n de acuerdo a su naturaleza, siguiendo en todo momento las instrucciones de uso que consten en los mismos o que les sean señaladas por el personal de \\n“EL CLUB”\\n, por lo tanto, el uso de todas las instalaciones, equipos y demás bienes lo realizarán bajo su única y exclusiva responsabilidad, asumiendo la responsabilidad por los daños y perjuicios que sufran en sus personas o bienes o que causen a terceros en sus personas y bienes derivados del mal uso que le den a los mismos, liberando a \\n“EL PRESTADOR” de cualquier responsabilidad por los daños y perjuicios causados.
    \\nEn caso de reclamación presentada por algún usuario, invitado o cualquier tercero, derivada de daños y perjuicios sufridos por el mal uso de las instalaciones y equipos, por parte el \\n“TITULAR” o alguno de sus “DEPENDIENTES”\\n o invitados, la responsabilidad es asumida por el “TITULAR” de la membresía.
    2.\\n El “TITULAR”, los “DEPENDIENTES”\\n y los invitados de estos, tendrán la obligación de respetar y hacer respetar en todo momento las disposiciones del reglamento de \\n“EL CLUB”.
    3.\\n Los usuarios deberán registrar su entrada y salida para tener acceso a las instalaciones de “EL CLUB”\\n a través del sistema de reconocimiento facial o cualquier otro sistema puesto en funcionamiento por \\n“EL PRESTADOR”, por lo que se comprometen y obligan a otorgar todas las facilidades que al efecto requiera \\n“EL PRESTADOR”\\n para el registro y captura de sus datos y huellas digitales, ya que la finalidad de este sistema es la seguridad de todos los usuarios.\\n
    El hecho de que el “TITULAR” o “DEPENDIENTE”\\n no otorgue las facilidades para cumplir con los requisitos del sistema de ingreso a “EL CLUB”\\n será causa justificada suficiente para negarle el acceso, hasta que cumpla con dichos requisitos.
    \\n\\\"EL PRESTADOR”\\n se reserva el derecho de poner en funcionamiento en forma adicional o en sustitución del sistema actual, cualquier procedimiento o sistema de regulación y registro de la entrada y salida de usuarios a las instalaciones.\\n
    \\nLos usuarios deberán facilitar al personal de ventas de membresías sus datos completos, estos son: nombre, dirección, teléfonos y correo electrónico. Para efectos de lo anterior, \\n“EL PRESTADOR”, el “TITULAR” y los “DEPENDIENTES”\\n observarán en todo momento lo dispuesto en la Ley Federal de Datos Personales en posesión de los Particulares, dando su consentimiento en este acto para el tratamiento de sus datos personales conforme al aviso de privacidad que se encuentra en el domicilio de \\n“EL CLUB”, así como en los demás documentos que sean puestos a su vista para su suscripción.
    \\n
    CUARTA:
    CESIÓN DE MEMBRESÍAS:
    a.- El \\n“TITULAR”\\n no podrá ceder o transmitir los derechos derivados de su membresía a ningún tercero; por lo que cualquier cesión de derechos llevada a cabo en contra de esta práctica, no será reconocida, negándose el acceso a las instalaciones a los supuestos cesionarios.\\n
    b.-\\n Solo se encuentran autorizadas las cesiones entre consanguíneos o afines en línea recta y en línea colateral en primer grado (cónyuges, padres, hijos y hermanos), previo pago de la cuota que determine \\n“EL PRESTADOR”.
    Acuerdan las partes que “EL PRESTADOR”\\n puede ceder o transmitir en todo momento los derechos y obligaciones derivados del presente contrato.
    \\nQUINTA:
    CAMBIO DE MEMBRESÍA:
    \\nLa clase y/o tipo de la membresía elegida al suscribir el presente contrato podrá ser motivo de cambio a solicitud expresa del \\n“TITULAR”\\n, siendo necesario para la procedencia del cambio requerido, que además de hacer el pago correspondiente, ya sea un incremento o una reducción dependiendo del tipo y clase de membresía que se elija, se cumplan con los requisitos señalados en el reglamento.\\n
    SEXTA:
    DEL TITULAR:\\n Será el único facultado para llevar a cabo la tramitación de cambios de clase y/o tipo de membresía, ausencias temporales, terminaciones voluntarias y cualquier otro tramite relativo a la membresía contratada.\\n
    SÉPTIMA:
    DE LOS INVITADOS:
    \\nEn beneficio de los demás usuarios y para evitar la saturación en el uso de las instalaciones, “EL PRESTADOR”\\n\\n se reserva el derecho de limitar el número de invitados por día o en horarios determinados. En todos los casos el invitado deberá estar en compañía del \\n“TITULAR” o “DEPENDIENTE” que le haya invitado.
    OCTAVA:\\n
    SEGURO DE RESPONSABILIDAD CIVIL:
    \\\"EL PRESTADOR”\\n tiene contratado y en todo momento mantendrá vigente, un seguro de responsabilidad civil.
    NOVENA:\\n
    MANIFESTACIÓN DE ESTADO DE SALUD:
    A la firma del presente contrato el \\n“TITULAR” manifiesta bajo protesta de decir verdad, que tanto el mismo como los “DEPENDIENTES”\\n por él designados, gozan de buen estado de salud, por lo que libera a “EL PRESTADOR”\\n de cualquier responsabilidad derivada de la afectación a su salud por el uso de las instalaciones y equipo, así como por las afecciones de cualquier índole que los \\n“TITULARES” o “DEPENDIENTES”\\n pudieran tener antes, al momento o con posterioridad a la suscripción del presente contrato; asimismo, acepta que por razones de higiene y siempre que las actividades de \\n“EL CLUB” lo requieran, “EL PRESTADOR”\\n podrá solicitarle, en caso de no contar con personal acreditado para tal efecto en sus instalaciones, un certificado médico para el acceso a la alberca o en caso de que \\n“EL PRESTADOR”\\n cuente con dicho personal, permita una revisión de su estado de salud e higiene y el de sus usuarios dependientes e invitados.\\n
    Asimismo, el “TITULAR” acepta que, para el caso de que alguno de los \\\"DEPENDIENTES”\\n\\n por él designados, o bien, alguno de sus invitados padezca de alguna discapacidad física, será el único y directamente responsable de las consecuencias que pudieran llegar a presentarse en virtud del uso de las instalaciones por parte de las personas mencionadas.\\n
    DÉCIMA:
    EVENTOS:
    \\nESPECIALES, ORGANIZACIÓN Y MANTENIMIENTO:
    Los usuarios e invitados expresamente aceptan que \\n“EL PRESTADOR” lleve a cabo, dando aviso para tal efecto a los usuarios en las instalaciones de \\n“EL CLUB”\\n con 7 (siete) días naturales de anticipación, la organización de torneos y eventos dentro de las instalaciones de \\n“EL CLUB”\\n y que en virtud de ello se podrá restringir en forma parcial y temporal el acceso a algunas áreas y equipos de \\n“EL CLUB”.
    Del mismo modo, expresamente aceptan que “EL PRESTADOR”\\n se reserva el derecho de establecer métodos y procedimientos para la utilización de las áreas que por su naturaleza tienen capacidad para un número limitado de usuarios sin generar responsabilidad alguna para \\n“EL PRESTADOR”\\n por el hecho de que algún usuario no pueda hacer uso de la instalación o equipo, precisamente en el momento en que así lo requiera.\\n
    \\nLas restricciones en el uso de áreas y equipos sujetos a mantenimiento, eventos y/o cualquier mejora o remodelación que determine \\n“EL PRESTADOR”\\n, no otorga derecho alguno de reducción, reembolso o bonificación de cuotas de membresía o mantenimiento.
    \\nDÉCIMO PRIMERA:
    DAÑOS Y PÉRDIDAS DE BIENES:
    \\nPor ningún motivo y bajo ninguna condición “EL PRESTADOR”\\n se hace responsable de daños o pérdidas de bienes y valores propiedad de los usuarios o de sus invitados.
    \\nDÉCIMO SEGUNDA:
    DÍAS Y HORAS DE SERVICIO:
    “EL CLUB”\\n\\n y sus instalaciones estarán abiertas en los días y en el horario establecidos de acuerdo al calendario que disponga \\n“EL PRESTADOR” y que previo aviso se hará de conocimiento en las instalaciones de “EL CLUB”\\n\\n con 24 (veinticuatro) horas de anticipación; en cuanto a los horarios de apertura y cierre de las instalaciones, siendo señalados en el acceso del mismo.\\n
    \\\"EL PRESTADOR”\\n podrá cerrar las instalaciones generales o áreas específicas o restringir los horarios en días festivos y en los días que el mantenimiento de instalaciones lo requiera, para lo cual deberá dar aviso con por lo menos 24 (veinticuatro) horas de anticipación, mediante avisos que se coloquen en lugares visibles de \\n“EL CLUB”.
    En los casos en que “EL PRESTADOR”\\n deba suspender los servicios y clases por causa de fuerza mayor o caso fortuito, no se reembolsará cuota o pago alguno recibido por parte de los usuarios.\\n
    DÉCIMA TERCERA:
    PROFESORES, ENTRENADORES Y CLASES:
    \\n\\\"EL PRESTADOR”\\n se reserva el derecho de contratar y designar a los profesores y entrenadores que impartirán las clases y proporcionarán entrenamiento personal a los usuarios, pudiendo estos elegir entre aquellos disponibles en \\n“EL CLUB”\\n, con la única limitante del espacio en las áreas y el tiempo de los profesores y entrenadores; por lo tanto, los usuarios no tendrán derecho a indemnización o reclamación alguna para el caso de que estos profesores o entrenadores sean sustituidos.\\n
    \\\"EL PRESTADOR”\\n se reserva el derecho de señalar los horarios y duración de las clases de grupo impartidas en “EL CLUB”\\n\\n; por lo tanto, los usuarios no tendrán derecho a indemnización o reclamación alguna para el caso de que estos profesores o entrenadores o las clases que estos impartan sean sustituidos.\\n
    DÉCIMO CUARTA:
    TERMINACIÓN VOLUNTARIA:
    El \\n“TITULAR”\\n es el único facultado para realizar el trámite de terminación voluntaria en cualquier momento, para lo cual deberá dar aviso por escrito a \\n“EL PRESTADOR”\\n con por lo menos 30 (treinta) días naturales de anticipación, haciendo devolución y entrega de los bienes que son propiedad de \\n“EL PRESTADOR”\\n y que le fueran entregados para que los usuarios de la membresía tuvieran acceso e hicieran uso de las instalaciones y equipos.\\n
    DÉCIMO QUINTA:
    AMONESTACIÓN:\\n En caso de que algún usuario incurra en una violación del contrato o su reglamento que sea considerada una falta leve, se le hará una amonestación escrita en la cual conste la violación cometida, apercibiéndole para que en caso de reincidencia, pueda ser suspendido temporalmente o podrá rescindirse su contrato.\\n
    En forma enunciativa, se enumeran las siguientes causas de amonestación:
    \\nA. Incumplir con cualquier obligación asumida en el contrato o en el reglamento.
    \\nB. Omitir el pago oportuno de cualquier cuota o cargo a la membresía
    \\nC. No dar las facilidades requeridas para su registro como usuario de “EL CLUB”.
    \\nD. Evadir en forma alguna los sistemas de registro de ingreso y egreso de las instalaciones de “EL CLUB”\\n.
    E. Introducir a “EL CLUB”\\n comida, vasos u objetos de vidrio, así como armas de fuego o armas blancas.
    \\nF. Violar los horarios de salida o estancia en “EL CLUB”.
    En caso de amonestación, \\n“EL PRESTADOR”\\n deberá dar aviso escrito en el cual se especifique la causa. El aviso escrito se hará mediante entrega al usuario amonestado en las instalaciones de \\n“EL CLUB”, también podrá hacerse vía correo electrónico.
    DÉCIMO SÉXTA:\\n
    SUSPENSIÓN TEMPORAL:
    \\nEn caso de que algún usuario incurra en una violación del contrato o su reglamento que sea considerada no grave, se le comunicará su suspensión temporal de las instalaciones de \\n“EL CLUB”\\n de manera escrita en la cual conste la violación cometida, apercibiéndolo en caso de reincidencia, podrá rescindirse su contrato.\\n
    En forma enunciativa, más no limitativa se enumeran las siguientes causas de suspensión temporal:
    \\nA. Reincida por mas de una ocasión en las causas de amonestación antes referidas;
    \\nB. Otorgar o recibir entrenamientos personales entre usuarios, es decir, con independencia de los entrenadores reconocidos por el \\n“EL PRESTADOR”.
    C. Comercializar cualquier tipo de productos en el interior de \\n“EL CLUB”, o en el área de estacionamiento, cuando sea propiedad de “EL PRESTADOR”.
    \\n
    D. Violar las reglas de uso y acceso a cada una de las diferentes instalaciones de “EL CLUB”.\\n
    E. Fumar dentro de las instalaciones del “EL CLUB”.
    \\nF. Circular en áreas generales de “EL CLUB”\\n sin zapatos, sin camiseta o en forma inapropiada para llevar a cabo la actividad a la que están destinadas las áreas de \\n“EL CLUB”.
    G. Violar la reglamentación relativa al ingreso.
    \\nEn caso de suspensión temporal del contrato “EL PRESTADOR”\\n deberá dar aviso escrito en el cual se especifique la causa de la suspensión y el periodo de la misma; tratándose de membresías de pareja o familiares, dicha sanción afectará exclusivamente al usuario responsable de la violación, permitiendo el acceso a los otros usuarios de dicha membresía.\\n
    \\nEl aviso escrito, ya sea de manera impresa o digital, se hará mediante entrega al usuario suspendido en las instalaciones de \\n“EL CLUB”.
    En caso de suspensión temporal, “EL PRESTADOR”\\n no hará reembolso alguno por concepto de cuotas de membresía o mantenimiento.
    DÉCIMO SEPTIMA. \\n
    RESCISIÓN DEL CONTRATO:
    “EL PRESTADOR”\\n podrá rescindir el presente contrato a cualquier usuario que incumpla las obligaciones asumidas en el contrato o que viole lo establecido en el reglamento de \\n“EL CLUB”.
    \\nEn caso de que la falta sea considerada grave se rescindirá el contrato sin necesidad de amonestación o suspensión temporal previa a dicha rescisión, considerando graves las causas siguientes:\\n
    A. La reincidencia por más de una ocasión en las causas de suspensión temporal;
    \\nB. Agredir física o verbalmente a otro usuario o al personal de “EL PRESTADOR”;
    \\nC. Participar como sujeto provocador o no, en una riña en el interior de las instalaciones de “EL CLUB”\\n;
    D. Cometer alguna conducta que pudiera ser considerada como delito dentro de las instalaciones de \\n“EL CLUB”;
    \\nE. Realizar actos contrarios a la moral, a las buenas costumbres o inapropiados al interior de “EL CLUB”\\n.
    F. Portar armas de cualquier tipo dentro de “EL CLUB”.
    \\nG. Asistir bajo el efecto o usar dentro de “EL CLUB”\\n bebidas alcohólicas, toxicas, enervantes o drogas.
    H. Introducir a las instalaciones de “EL CLUB”\\n bebidas alcohólicas, toxicas, enervantes o drogas de cualquier tipo.
    \\nI. Proporcionar datos falsos o inexactos al realizar cualquier trámite en “EL CLUB”.
    \\nJ. Adquirir una membresía o cualquier otro servicio de los que ofrece “EL PRESTADOR”\\n a personas no autorizadas, y/o ajenas a “EL CLUB”\\n, y pretender hacer uso de las instalaciones o servicios con base en documentos apócrifos u obtenidos con dolo, engaño o mala fe. Se presumirá que existe lo anterior, cuando el \\n“USUARIO TITULAR”\\n no ingrese el pago o los pagos realizados por dichos conceptos en las cajas instaladas en “EL CLUB”\\n para la recepción de cualquier tipo de pago.
    \\nK. Omitir el pago del mantenimiento de más de 6 (seis) meses que corresponda a la membresía contratada.
    \\nEn caso de rescisión del contrato “EL PRESTADOR”\\n deberá dar aviso escrito en el cual se especifique la causa de la misma. En caso de tratarse de membresías de pareja o familiares, dicha sanción afectará exclusivamente al usuario responsable de la violación, permitiéndose el acceso a los demás usuarios de dicha membresía. En caso de que la rescisión del contrato sea hecha al \\n“USUARIO TITULAR”, la membresía podrá quedar a nombre de quien éste designe.
    \\nEl aviso escrito, ya sea de manera impresa o digital, se hará mediante entrega al usuario suspendido definitivamente en las instalaciones de \\n“EL CLUB”.
    “EL PRESTADOR”\\n no hará reembolso alguno por concepto de cuotas de membresía o mantenimiento.
    “EL USUARIO”\\n podrá rescindir el presente contrato a “EL PRESTADOR”\\n sin responsabilidad alguna, cuando se den las siguientes causas de incumplimiento:
    \\n1. En caso de que el usuario no acepte el cambio de concepto a que se refiere la cláusula vigésima tercera del presente contrato.\\n
    2. En caso de cierre de “EL CLUB” por causas imputables a “EL PRESTADOR”\\n que no deriven de una causa de fuerza mayor o de una orden de carácter judicial que determine dicha situación.
    \\n
    3. En caso de que el mantenimiento de algún área de “EL CLUB”\\n se extienda por más de 3 (tres) meses.
    \\n4. Que el usuario haya presentado más de 3 (tres) inconformidades debidamente sustentadas por la misma causa.
    \\n
    En este caso “EL PRESTADOR”\\n hará las devoluciones del pago de mantenimientos no devengados y pagados anticipadamente conforme a Ley Federal de Protección al Consumidor, consistente en el 20% (veinte por ciento) de dichos conceptos.\\n
    DÉCIMO OCTAVA:
    TARIFAS VIGENTES DE MANTENIMIENTO:
    \\n“EL PRESTADOR”\\n podrá incrementar el precio de las cuotas de mantenimiento y servicios de manera anual y/o al término del periodo correspondiente al mantenimiento anual pagado y devengado por los usuarios, para lo cual dará aviso con 30 (treinta) días naturales de anticipación a los usuarios en las instalaciones de \\n“EL CLUB”\\n que corresponda de dicho incremento, por lo que en caso de aceptación tácita de los usuarios se obligarán a pagar los incrementos que se registren en las cuotas de mantenimiento a partir del momento que para tal efecto determine \\n“EL PRESTADOR”
    \\nLos usuarios gozarán de un plazo de 30 (treinta) días naturales para manifestar su consentimiento con las nuevas cuotas o para dar por terminado el contrato sin ninguna responsabilidad.\\n
    DECIMA NOVENA
    FIRMA ELECTRÓNICA:
    El “TITULAR”\\n manifiesta que es su deseo hacer uso de la firma electrónica elegida por “EL PRESTADOR”\\n para generar derechos y obligaciones en su carácter de “TITULAR”\\n, indicando a su vez que aprueba y reconoce el contenido del presente
    \\ninstrumento y los mensajes de datos generados con la herramienta mencionada, para que produzcan todos los efectos legales a que haya lugar, con los mismos efectos que las leyes otorgan a la firma autógrafa física en términos de lo dispuesto por los artículos 96 al 99 del Código de Comercio.\\n
    El “TITULAR”\\n reconoce y acepta que el presente instrumento legal firmado por él, mediante el uso de Firma Electrónica, así como los mensajes de datos, podrán ser conservados de manera digital por las partes, junto con sus certificados o mecanismos digitales, como prueba en cualquier procedimiento legal derivado de la relación entre ellas. No obstante, cada parte será responsable del tratamiento y destino que se les dé a dichos documentos y/o mensajes de datos una vez descargados.)\\n
    VIGÉSIMA.
    SOLIDARIDAD:
    \\nPara todos los efectos derivados del presente contrato y su reglamento, los usuarios dependientes designados por el \\n“USUARIO TITULAR”, se constituyen en obligados solidarios ante “EL PRESTADOR”\\n, respecto del pago de las cuotas de membresía y mantenimiento, así como de la responsabilidad derivada del mal uso de las instalaciones y equipos propiedad de \\n“EL PRESTADOR”.
    VIGÉSIMA PRIMERA.
    \\nAUTORIZACIÓN DE USO DE DATOS PARA FINES COMERCIALES:
    Por medio del presente “EL PRESTADOR”\\n\\n pone a su consideración el consentimiento para usar los datos personales hechos de su conocimiento para efectos del envío de sus promociones comerciales o las de sus empresas filiales y/o subsidiarias.\\n
    VIGÉSIMA SEGUNDA.
    JURISDICCIÓN Y COMPETENCIA:
    \\nEn caso de conflicto entre las partes acuerdan irrevocablemente someterse a la jurisdicción de la procuraduría federal del consumidor y renuncian en forma expresa a cualquier otro fuero que por razón de domicilio, presente o futuro, o que por cualquier otra causa pudiere corresponderles, dejando a salvo sus derechos para el caso de no poder dirimir la controversia respectiva ante esta instancia, se ejerza ante los tribunales competentes a la entidad federativa que corresponda al lugar de prestación de los servicios contratados.\\n
    VIGÉSIMA TERCERA.
    ATENCIÓN A QUEJAS O SUGERENCIAS:
    \\nPara el caso de quejas o sugerencias, “EL PRESTADOR”\\n pone a su disposición el teléfono 55 68 13 67 36en un horario de lunes a viernes de 8:00 a 18:00 horas y sábado y domingo de 8:00 a 14:00 horas. \\n“EL PRESTADOR”\\n dará respuesta a las quejas o sugerencias de los usuarios en un lapso de hasta 5 (cinco) días hábiles contados a partir de la fecha de su recepción.\\n

    \\n________________________________________________

    \\nGERENTE GENERAL ANTONIO HERNANDEZ

    EL PRESTADOR


    ________________________________________________

    {{vm.data.partnerName}}

    TITULAR

    \\n
    \\n


    AVISO DE PRIVACIDAD

    \\nEn cumplimiento a lo previsto en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (en lo sucesivo “la Ley”), nos permitimos informarle lo siguiente:\\n

    \\n1.- RESPONSABLE DE LOS DATOS PERSONALES OPERADORA ACTIVE PH S.A. de C.V., (en lo sucesivo “ACTIVE CLUB\\\"), señalando para efectos del presente Aviso de Privacidad el domicilio ubicado en Avenida Universidad 1883, Colonia Oxtopulco Universidad, Delegación Coyoacán, C.P. 04318 CDMX, será el responsable de los datos personales que le sean proporcionados por las personas físicas a quienes correspondan los mismos (en lo sucesivo el “Titular” o los “Titulares”)\\n

    \\n2.- DATOS PERSONALES QUE SE SOLICITAN DEL TITULAR Para las finalidades señaladas en el presente Aviso de Privacidad, ACTIVE CLUB podrá recabar los datos personales del Titular interesado en contratar alguno de los servicios de ACTIVE CLUB como son: nombre (identificación oficial así como la imagen del Titular al ingresa a las instalaciones de ACTIVE CLUB a través de las cámaras de videovigilancia y seguridad), domicilio, teléfono fijo, teléfono celular, nacionalidad, fecha de nacimiento, estado civil, información general de aptitudes físicas, padecimientos o enfermedades, Registro Federal de Contribuyentes (RFC), Clave Única de Registro de Población (CURP), número de cuenta bancaria y ocupación o actividad profesional. Por otra parte, para aquellas personas que tengan el carácter de Avales u Obligados Solidarios de un Titular interesado en contratar alguno de los servicios de ACTIVE CLUB se les informa que éste último únicamente requiere sus Datos Personales correspondientes a: nombre (identificación oficial así como la imagen del Titular al ingresar a las instalaciones de ACTIVE CLUB a través de las cámaras de videovigilancia y seguridad), domicilio, estado civil, información general de aptitudes físicas, padecimientos o enfermedades, Registro Federal de Contribuyentes (RFC) e información patrimonial (relación de bienes). Datos Personales de los que los Avales u Obligados Solidarios son Titulares en términos del presente Aviso de Privacidad. Los Datos Personales de los Titulares se podrán recabar de las siguientes formas: i) cuando el Titular los proporcione personal o directamente, ii) cuando ACTIVE CLUB los obtenga de forma indirecta, iii) cuando el Titular utilice el sitio de internet o los servicios en línea de ACTIVE CLUB y/o iv) cuando se obtengan por ACTIVE CLUB a través de las fuentes permitidas por la legislación. Es responsabilidad del Titular de los Datos Personales, el garantizar que los datos que facilite personal o directamente a ACTIVE CLUB sean veraces y completos, así como de notificar a ACTIVE CLUB cualquier modificación a los mismos para dar cumplimiento a la obligación de mantener la información actualizada.\\n

    \\n3.- FINALIDADES PARA LAS QUE SE RECABAN LOS DATOS PERSONALES La información de Datos Personales, que es recolectada por ACTIVE CLUB del Titular interesado en contratar alguno de los servicios de ACTIVE CLUB tendrá el uso que se describe a continuación: i) para la relación correspondiente a la prestación de los servicios ofrecidos por ACTIVE CLUB (en adelante y en su conjunto los Servicios), ii) para el cumplimiento de los contratos que celebre ACTIVE CLUB con el Titular, iii) para la identificación del Titular, iv) para la administración de los Servicios, v) para el análisis de los Servicios, vi) para la actualización de datos del Titular, vii) proporcionar seguridad a las instalaciones de ACTIVE CLUB y a los Titulares que ingresen a éstas últimas, finalidades que son necesarias para cumplir las obligaciones derivadas de la relación jurídica que tenga ACTIVE CLUB con el Titular. Asimismo, dentro del uso que ACTIVE CLUB dará a la información del Titular interesado en contratar alguno de los servicios está: i) el ofrecimiento y promoción de bienes, productos y servicios y/o prospección comercial así como ii) evaluar la calidad de los Servicios, finalidades que no necesariamente se requieren para cumplir con las obligaciones derivadas de la relación jurídica que tenga ACTIVE CLUB con el Titular, por lo que, en caso de que el Titular no esté de acuerdo en que ACTIVE CLUB utilice sus Datos Personales para dichas finalidades deberá manifestar su oposición de acuerdo a lo dispuesto en la sección cinco (5) del presente Aviso de Privacidad, ya que, en caso de que el Titular no manifieste su oposición se entenderá que otorga su consentimiento a ACTIVE CLUB. En relación a los Datos Personales que recaba ACTIVE CLUB de aquellos Titulares que tienen el carácter de Avales u Obligados Solidarios de los Titulares interesado en contratar alguno de los servicios de ACTIVE CLUB se les informa que las finalidades para las que este último utiliza sus Datos Personales son únicamente las contenidas en los puntos (i) a () del primer párrafo de la presente sección finalidades que son necesarias para cumplir las obligaciones derivadas de la relación jurídica que tenga ACTIVE CLUB con dichos Titulares derivadas de su designación como Avales u Obligados Solidarios. En relación a los Datos Personales de aquellos Titulares que en el pasado otorgaron sus datos a ACTIVE CLUB y que actualmente ya no tienen una relación con éste último así como de los Avales y/o Obligados Solidarios, se les informa que ACTIVE CLUB únicamente conserva sus Datos Personales de conformidad a lo dispuesto por el artículo 25 de la Ley, es decir, durante el periodo de bloqueo1 establecido en dicho ordenamiento legal, por lo que, una vez transcurrido dicho periodo de bloqueo sus Datos Personales serán suprimidos.\\n

    \\n4.- TEMPORALIDAD, REMISIONES Y TRANSFERENCIAS La temporalidad del manejo de los Datos Personales de los Titulares, dependerá de la relación jurídica que se tenga celebrada con ACTIVE CLUB, así como de las obligaciones exigidas por la legislación vigente las autoridades competentes y las políticas internas de ACTIVE CLUB, sin embargo, en relación a los Datos Personales correspondientes a la imagen de los Titulares que es captada por las cámaras de videovigilancia, dicha información es conservada por ACTIVE CLUB únicamente por un plazo de 30 (treinta) a 60 (sesenta) días hábiles posteriores a la fecha en la que se obtiene. La información que sea entregada a ACTIVE CLUB, será resguardada, conservada y protegida, por éste último de acuerdo a lo dispuesto por la legislación vigente y las políticas internas de ACTIVE CLUB para efecto de mantener la confidencialidad de dicha información. De acuerdo a lo dispuesto por la Ley, ACTIVE CLUB dará acceso a los Datos Personales de los Titulares (a través de remisiones) a aquellas personas que tengan el carácter de Encargados2 como pueden ser prestadores de servicios, socios de negocios o terceros, que tengan una relación jurídica con ACTIVE CLUB, que derivado de dicha relación jurídica necesiten conocer la información y asuman el compromiso de mantenerla bajo un estricto orden de confidencialidad y seguridad reconociendo además conocer los términos y condiciones del presente Aviso de Privacidad y comprometiéndose a dar cumplimiento a los mismos. En caso de que los Datos Personales resguardados sean requeridos por una autoridad de cualquier índole o deban ser entregados a ésta última de acuerdo a la legislación vigente, estos datos se pondrán a su disposición dentro del estricto cumplimiento a la Ley, transferencia que no requiere del consentimiento de los Titulares de acuerdo a lo dispuesto en el artículo 37 de dicho ordenamiento legal.\\n

    \\n5.- DERECHOS DE ACCESO, RECTIFICACIÓN, CANCELACIÓN, OPOSICIÓN, REVOCACIÓN Y LIMITACIÓN DE LOS DATOS PERSONALES. Los Titulares de la información tendrán derecho a solicitar el acceso, rectificación, revocación, cancelación u oposición así como limitar el uso o divulgación de sus datos, mediante: a.- Solicitud escrita dirigida al Departamento de Datos Personales de ACTIVE CLUB al siguiente domicilio: Avenida Universidad 1883, Colonia Oxtopulco Universidad, Alcaldía Coyoacán, C.P. 04318 en CDMX, de las 10:00 a las 17:00 horas, en días hábiles, o b.- Solicitud formulada al correo electrónico contacto@active-club.mx ACTIVE CLUB, dará respuesta a las solicitudes del Titular de la información, siempre y cuando no se actualice alguna de las excepciones contenidas en la Ley, y el solicitante cumpla con lo dispuesto en el artículo 29 de dicho ordenamiento legal que establece los requisitos que debe contener las solicitudes presentadas por los Titulares. Para que ACTIVE CLUB de trámite a la solicitud de un Titular referente al acceso, rectificación, revocación, cancelación, oposición y/o limitación del uso o divulgación de sus datos, éste último deberá adjuntar a su solicitud la siguiente información y documentación: i. Nombre del Titular y domicilio u otro medio para que ACTIVE CLUB le comunique la respuesta a su solicitud. ii. Los documentos con los que acredite su identidad o su personalidad en caso de la representación legal del Titular (identificación oficial del titular o del representante legal y poder de éste último). iii. La descripción clara y precisa de los Datos Personales respecto de los que se busca ejercer el derecho de acceso, rectificación, revocación, cancelación, oposición, limitación del uso o divulgación, así como cualquier otro dato o documento que pueda facilitar la localización de los Datos Personales. ACTIVE CLUB dará respuesta a la solicitud de un Titular referente al acceso, rectificación, revocación, cancelación, oposición y/o limitación del uso o divulgación de sus datos dentro de los plazos establecidos en la Ley, es decir, dentro de los veinte (20) días siguientes contados a partir de que reciba la solicitud del Titular, plazo que podrá ser ampliado por ACTIVE CLUB de acuerdo a lo dispuesto por el artículo 32 de la Ley. La obligación de acceso a la información se dará por cumplida por ACTIVE CLUB cuando, en caso de que sea solicitado por el Titular, se ponga a disposición de éste último sus Datos Personales en el domicilio de ACTIVE CLUB durante el plazo de 15 (quince) días hábiles siguientes a que se le comunique al Titular la respuesta a su solicitud o bien a través de alguna de las formas establecidas en el artículo 33 de la Ley, mismas que en la respuesta a su solicitud se le notificarán al Titular.\\n

    \\n6.- MODIFICACIONES AL AVISO DE PRIVACIDAD En el supuesto, de que ACTIVE CLUB, requiera usar sus Datos Personales con fines distintos a los pactados o convenidos al tenor de la relación jurídica que se tiene con el Titular y/o en el presente Aviso de Privacidad o bien requiera del Titular Datos Personales distintos a los señalados en el presente Aviso de Privacidad, se notificará al Titular en forma escrita, telefónica, electrónica, o por cualquier medio óptico, sonoro, visual u otro que la tecnología permita ahora o en lo futuro explicando los nuevos usos que pretenda darle a dicha información a fin de obtener su consentimiento en términos de la Ley. Con el presente Aviso de Privacidad, los Titulares de la información quedan debidamente informados de los datos que se recabaron de ellos y con qué fines así como del hecho de que el Aviso de Privacidad podrá en todo momento ser consultado en el domicilio de ACTIVE CLUB arriba señalado. ACTIVE CLUB, se reserva el derecho a modificar el presente Aviso de Privacidad para adaptarlo a novedades legislativas o jurisprudenciales así como a prácticas comerciales. En dichos supuestos, se anunciarán en el domicilio de ACTIVE CLUB, arriba señalado, los cambios de referencia. El presente Aviso de Privacidad, así como el manejo en general de la Ley que haga ACTIVE CLUB, se rige por la legislación vigente y aplicable en los Estados Unidos Mexicanos, cualquier controversia que se suscite con motivo de su aplicación deberá ventilarse ante el Instituto Federal de Acceso a la Información y Protección de Datos (IFAI) o ante los Órganos Jurisdiccionales competentes en la Ciudad de México, Distrito Federal.\\n

    \\n________________________________________________

    \\nGERENTE GENERAL ANTONIO HERNANDEZ

    EL PRESTADOR


    ________________________________________________

    {{vm.data.partnerName}}

    TITULAR

    \\n
    \\n

    \\nPara efectos del presente Reglamento “Active Club” significa la persona moral encargada de operar las instalaciones.\\n

    SOCIOS Y MEMBRESÍAS:
    \\n1) El presente Reglamento es de aplicación para todos los usuarios de Active Club, así mismo todos los usuarios e invitados estarán obligados a cumplir con los reglamentos internos o de área, así como cualquier disposición operativa o administrativa y las políticas que en su momento se pudieran emitir.\\n
    2) Los tipos de membresías que se pueden contratar son las siguientes:
    Membresía Individual:
    \\nPermite el uso de la membresía para una sola persona mayor a 18 años. Conformada por un usuario titular.
    \\nMembresía de Pareja:
    \\nIntegrada por dos personas sin necesidad de justificar parentesco. Compuesta por un usuario titular y un agregado.\\n
    Membresía Familiar:
    \\nEstá integrada como base por una pareja, los hijos o familiares directo de éstos. Este tipo de membresía tiene derecho a máximo 6 integrantes.\\n
    Membresía Individual 60 años y más:
    \\nEstá integrada por una persona que debe de comprobar una edad de 60 años en adelante teniendo una cuota mensual de mantenimiento preferencial, este tipo de membresía no tiene derecho a agregado familiar, debiendo de presentar credencial de INE, INAPAM y/o pasaporte.\\n
    Membresía de Pareja 60 años y más:
    \\nEstá integrada por una pareja que puede estar conformada por dos personas sin importar parentesco, debiendo de comprobar una edad de 60 años en adelante teniendo una cuota mensual de mantenimiento preferencial, debiendo de presentar credencial de INE, INAPAM y/o pasaporte.\\n
    Grupal:
    \\nConformada por un usuario titular y 3 agregados, no necesitan comprobar parentesco.
    Junior:
    \\nMembresías para niños y adolescentes sin la presencia de padre o tutor en la misma a partir de los 6 años y hasta 14 años y 11 meses. Entre 6 y 10 años solo podrán ingresar al club con nana u otro personal de servicio.\\n
    \\n•\tPara los casos en los que el usuario titular se encuentre entre los 15 y 18 años, será necesaria una carta responsiva por parte del padre o tutor, así como la firma del contrato de este mismo. Este tipo de usuario ingresa en modalidad individual y con cargo\\n
    \\n3) El titular de la membresía tendrá que ser mayor de 18 años y tendrá la obligación de proporcionar la información verídica solicitada al momento de realizar la compra de la misma.\\n
    \\n4) El usuario podrá hacer uso de las instalaciones a partir del momento que ha realizado su pago, es decir, asista o no, el pago cubre a partir del mes corriente. En caso que el usuario eligiera hacer uso posteriormente de las instalaciones deberá tener autorización por parte de la Gerencia y esta no podrá exceder más de 2 meses después de realizada la compra.\\n
    \\n5) Para cambiar el tipo de membresía y poder admitir un mayor número de usuarios, el titular de ésta deberá cubrir una cuota que será determinada por la Gerencia. En caso contrario, es decir, disminuir el número de usuarios, sólo se realizará el trámite de baja de los que lo soliciten. Este trámite se deberá hacer antes del día 25 de cada mes, siendo necesario tener como comprobante la copia del formato que se le entrega al momento de realizar el mismo.\\n
    \\n6) Para traspasar una membresía el titular de ésta deberá de conseguir un tercero al cual se le traspasará, así mismo deberá cubrir una cuota que será determinada por la Gerencia y no presentar ningún tipo de adeudo. Este traspaso solo contará con la membresía como tal y no con los beneficios que ésta pudo haber adquirido por motivos de preventa y/o algún caso similar. En el caso de una inscripción activa con mantenimiento anual, la cuota de traspaso se descontará del total del pago de la anualidad y el saldo restante se aplicara al nuevo titular. Este trámite se deberá hacer antes del día 25 de cada mes.\\n
    7) Active Club se reserva el derecho de rechazar cualquier solicitud de membresía.
    \\n8) Para poder adquirir una membresía de cualquier tipo es requisito ser mayor de edad y cubrir la cuota de inscripción que esté vigente a la fecha de la transacción.\\n
    \\n9) La documentación que todos los usuarios de las nuevas inscripciones deben proporcionar al comprar será la siguiente:\\n
    Membresía individual. -\\n Copia fotostática de identificación oficial (acta de nacimiento o credencial del INE o Pasaporte o Cédula profesional o Licencia de manejo).\\n
    Membresía de pareja.-\\n Copia fotostática de identificación oficial de cada socio (acta de nacimiento o credencial del INE o Pasaporte o Cédula profesional o Licencia de manejo).\\n
    Membresía familiar.-\\n Copia fotostática de identificación oficial de cada socio incluyendo niños (acta de nacimiento o credencial del INE o Pasaporte o Cédula profesional o Licencia de manejo).\\n
    Menores.-\\n Copia fotostática de identificación (Cartilla de vacunación o Acta de nacimiento o credenciales escolares o Permiso de conducir o acta tutorial o de adopción).\\n
    Membresía grupal. -\\n Adicional a los documentos de la inscripción es necesario agregar copia de la credencial del corporativo o empresa a la que pertenece.\\n
    Nota\\n: En caso de no entregar estos documentos en un lapso de 10 días, la Gerencia quedará facultada para restringir al acceso de todos los integrantes de la membresía.\\n

    CUOTAS:
    \\n10) Todos los usuarios antes descritos pagarán una cuota que deberá realizarse de manera mensual o anual en las diferentes formas de pago que designe la Gerencia, esta cuota se define como cuota de mantenimiento.\\n
    \\n11) En el caso de los usuarios que al aumentar de edad cambie la cuota de mantenimiento, ésta se ajustará, según sea el caso, al mes siguiente de haber cambiado a la edad de la nueva categoría de tipo de usuario.\\n
    12) Las formas para realizar los pagos de las cuotas de mantenimiento de manera mensual son:
    \\n
    Cargo Mensual Direccionado y/o Domiciliado.\\n Es la cuota vigente que se cobra de manera automática por Active Club y puede ser cargada a una tarjeta de crédito o débito. El usuario reconoce que el cargo mensual direccionado tiene cuotas preferenciales sobre las cuotas convencionales o de caja. En caso de que el usuario desee cancelar su membresía o desee transformar la forma de pago de su cuota a cargo convencional, éste deberá acudir a la recepción del Club para realizar los trámites correspondientes. El usuario acepta que la modalidad de cargo direccionado podrá ser cancelada en cualquier momento por Active Club.\\n
    Cargo Mensual Convencional.\\n Es la cuota vigente que se cobra mediante el pago del usuario directamente en caja y puede ser con cheque, efectivo, tarjeta de crédito o débito. En caso de que el usuario desee cancelar su membresía, éste deberá acudir a la recepción del Club para realizar los trámites correspondientes.\\n
    13) El cargo direccionado tendrá cuotas preferenciales sobre el pago convencional o caja.
    \\n14) En caso de que el usuario, haya elegido el pago de la cuota de mantenimiento mediante cargo direccionado, expresamente autoriza a Active Club para que, automáticamente y sin necesidad de algún otro proceso, cargue mensualmente la cuota vigente a cuenta de la tarjeta de crédito y/o débito mencionado en el formato específico.\\n
    \\nEl usuario autoriza que Active Club realice el cargo de la cuota de mantenimiento direccionado a partir del primer (1) día hábil de cada mes. Si por insuficiencia de fondos o crédito imputables al usuario no se puede realizar el cargo en dicho plazo, el usuario deberá de realizar el pago en la caja del Club con precio convencional.\\n
    \\n15) Para direccionar los cargos de mantenimiento es necesario realizar el trámite por escrito en el área de Recepción proporcionando la información que contiene el formato específico.\\n
    \\n16) Las membresías pueden realizar el pago de mantenimiento anual. Es la cuota anual vigente que se cobra en una exhibición y puede ser pagada en tarjeta de crédito o débito. En este caso no se podrá solicitar la devolución sobre la cantidad pagada, descontándose los meses disfrutados y al monto restante se le aplicará una penalización del 20%.\\n
    \\n17) Durante los últimos meses del año la Gerencia publicará las nuevas cuotas que estarán vigentes a partir del primer día del mes de enero, dándolas a conocer en las pantallas informativas del club, así como por nuestras redes sociales (Facebook e Instagram)\\n
    \\n18) El pago de las cuotas de mantenimiento de una membresía deberán de realizarse en una sola exhibición, quedando prohibido los pagos parciales.\\n
    \\n19) Para solicitar un comprobante fiscal o factura de servicios distintos al pago de mantenimiento y membresía
    \\n
    \\n(invitados, entre otros), el usuario deberá de solicitar su comprobante fiscal al momento de realizar su pago, de no hacerlo la empresa estará imposibilitada para emitirlo con posterioridad.\\n
    \\n20) Para solicitar un cambio de factura o comprobante fiscal del pago de mantenimiento o membresía, esta deberá de ser dentro del mismo mes en que la misma fue expedida.\\n
    \\n21) En caso de devolución de un cheque por parte del banco, el usuario estará obligado a cubrir el cargo que el banco le genere a Active Club, en caso de que la causa sea por falta de fondos se cobrará el 20 % del monto del cheque.\\n
    \\n22) Todos los pagos de cualquier servicio que ofrece Active Club deberán ser realizados en la caja ubicada en la recepción del Club.\\n
    \\n23) En caso de una membresía nueva, ésta deberá de cubrir la cuota de mantenimiento proporcional según el día en que se realice la misma: durante los primeros 6 días del mes deberá cubrir la cuota de mantenimiento completa, a partir del día 7 pagará la proporción que resulte de dividir el monto total de la cuota de mantenimiento entre el número de días del mes en cuestión, por el número de días vigentes o a correr del mes. Si la membresía es adquirida después del día 24, es decir a partir del día 25 del mes, el monto de pago de estos últimos días será de cortesía. El usuario tiene la opción de realizar este cargo con cuota direccionada, siempre y cuando haya realizado ya el trámite para direccionar sus futuros pagos de mantenimiento.\\n
    \\n24) La Gerencia está facultada para negar el acceso a todos los integrantes de la membresía en caso de que presente un adeudo de la cuota de mantenimiento o algún otro adeudo, tomándose esta medida según la opción de pago que haya elegido:\\n
    Pago de mantenimiento mensual direccionado.\\n Se negará el acceso a partir del día 6 del mes corriente que no se haya pagado. Es decir; si hoy es 6 de marzo y no ha sido cubierta la cuota de mantenimiento del mes de marzo, la Gerencia estará facultada para negar el acceso hasta recibir el pago de dicho mes.\\n
    Pago de mantenimiento mensual convencional.\\n Se negará el acceso a partir del día 6 del mes corriente, es decir, si hoy es día 6 de febrero y no ha sido cubierta la cuota de mantenimiento del mes de febrero, la Gerencia estará facultada para negar el acceso hasta recibir el pago correspondiente.\\n
    Pago de mantenimiento semestral y anual.\\n Se negará el acceso a partir del primer día del mes siguiente al que se haya vencido la anualidad y/o semestre.
    \\n
    \\n25) En caso de que todos los integrantes de la membresía requieran ausentarse por un lapso mínimo de tres meses, se podrá solicitar la cuota de ausencia. Esta cuota corresponde a un porcentaje del mantenimiento individual. Si el pago de mantenimiento es direccionado y/o convencional será del 33% del monto que paga la persona o integrante. El trámite debe realizarlo el titular de la membresía en la Recepción del Club llenando el formato pertinente. La membresía deberá estar al corriente en sus cuotas de mantenimiento, debiendo de entregar las credenciales de los integrantes de la membresía. Esta cuota aplicará al mes siguiente de haber realizado el trámite, aplicando la cuota de ausencia vigente.\\n
    \\n26) La Gerencia no se hace responsable por situaciones o acontecimientos sociales, desastres naturales, contingencia ambiental, sanitaria o cualquier otro incidente fuera de nuestra responsabilidad, que afecte la operación regular de nuestra unidad, y nos impida ofrecer nuestros servicios, parcial o totalmente, deslindándonos de cualquier tipo de devolución, compensación, reposición o bonificación en pagos de mantenimiento, inscripción y servicios. En caso de cierre por pandemia los pagos anticipados que estén pendientes por devengar (anualidades, semestres) se congelarán, reactivándose al momento de la reapertura.\\n

    USO DE LAS INSTALACIONES:
    \\n27) El horario de servicio de Active Club estará colocado en el reglamento del área de recepción, página de internet y en caso de surgir alguna duda o de requerir mayor información del mismo, podrá consultar esta información con el personal del Club.\\n
    \\n28) La Gerencia está facultada para hacer cambios en el horario de operación de Active Club con previo aviso a los usuarios mediante comunicados que serán colocados en las pantallas informativas que se encuentran en diversas áreas del Club, así como en las redes sociales oficiales de Active Club (Facebook e Instagram).\\n
    \\n29) Para efectos de días festivos o días especiales, Active Club notificará de forma anticipada a los usuarios el horario del Club por medio de comunicados en las pantallas informativas, así como en las redes sociales oficiales de Active Club (Facebook e Instagram).\\n
    30) Los días 1º de Enero y 25 de diciembre\\n Active Club no dará servicio permaneciendo sus instalaciones cerradas.
    \\n31) Los servicios de vapor y sauna permanecerán abiertos desde la apertura del Club hasta 30 minutos antes del cierre del mismo, el servicio de regaderas se suspenderá a partir de las 22:45 hrs; las luces serán apagadas de lunes a viernes a las 23:00 hrs, sábado y domingo a las 17:00 hrs. y días festivos a las 15:00 hrs. El área de alberca permanecerá abierta desde la apertura del Club hasta las 22:00 hrs; de lunes a viernes, sábados y domingos hasta las 16:00 hrs; y días festivos desde la apertura hasta las 14:00 hrs.\\n
    \\n32) Para poder acceder a las instalaciones de Active Club es obligatorio estar registrado y deberá portar la credencial en caso de requerirla para situaciones extraordinarias.\\n
    \\n33) El uso de la credencial y gafetes de acceso es personal e intransferible, el mal uso de éstos será sancionado por la Gerencia pudiendo llegar hasta la expulsión definitiva de Active Club.\\n
    34) La reposición de credencial tendrá el costo determinado por la Gerencia.
    \\n35) Los niños menores de 11 años 11 meses, deberán acceder, permanecer y salir del Club con algún acompañante responsable mayor de edad.\\n
    \\n36) La Gerencia podrá disponer de las diversas instalaciones y/o servicios que Active Club brinda, en el momento y tiempo necesario para mantenimiento u otros eventos relacionados con la operación del club.\\n
    \\n37) Todos los integrantes de las inscripciones y que sean mayores 4 años tendrán derecho a la realización de la valoración de la aptitud física sin costo alguno, para obtener dicho beneficio los usuarios nuevos deberán tramitar su cita en Sistema Deportivo Trainingym, así como para las revaloraciones.\\n
    \\n38) Para cancelar la membresía definitivamente es necesario realizar el trámite el mes anterior en el área de Recepción, siendo requisito indispensable no presentar ningún tipo de adeudo, así como entregar las credenciales de todos los integrantes. Este trámite se puede realizar hasta el día 25 del mes anterior a la cancelación de la membresía (citando como ejemplo que si la cancelación se solicita sea efectiva para el mes de Octubre el trámite se debe de realizar durante el mes de Septiembre).\\n
    \\n39) Para realizar el alta de un usuario se debe llenar el formato respectivo en el área de Recepción por parte del titular de la membresía. Este trámite puede realizarse cualquier día del mes siempre y cuando la membresía esté al corriente en sus cuotas de mantenimiento y deberá cubrir la parte proporcional de la cuota de mantenimiento del nuevo integrante, los siguientes pagos de mantenimiento se realizarán en una sola exhibición. Dentro de los siguientes 10 días hábiles el nuevo usuario deberá de entregar su documentación completa, además de realizarse la valoración de la aptitud física.\\n
    \\n40) Para realizar la baja de un usuario es necesario llenar el formato respectivo en el área de Recepción por parte del titular de la membresía, La baja se realizará al mes siguiente de que fue recibido el formato, es decir si la carta fue recibida en el mes de septiembre, la baja se registrará en el mes de octubre (durante este mes ya no se pagará la cuota del integrante dado de baja). Para poder realizar este trámite la inscripción debe de estar al corriente de sus cuotas de mantenimiento y entregar la credencial (es) de (l) la(s) persona(s) dada(s) de baja. Todo movimiento relacionado con este punto deberá realizarse antes del día 25 del mes previo a la aplicación de la baja.\\n
    \\n41) Los usuarios podrán tener invitados que hagan uso de las instalaciones de Active Club siempre y cuando paguen la cuota que determine la Gerencia y estén acompañados en todo momento por algún integrante de la membresía en la cual se registra el invitado. El titular de la membresía se hace responsable por el buen comportamiento de su(s) invitado(s), así como cubrir los daños y consumos que hagan. Active Club se reserva el derecho de negar el acceso a cualquier invitado.\\n
    \\n42) El familiar o persona que acompañen al menor que está inscrito al club Active Club deberá de reportarse en la recepción para entregar una identificación oficial, donde recepción le entregara un gafete que debe portar en todo momento estando en el club.\\n
    \\nEs necesario agregar al expediente los datos de las personas que estarán autorizadas para acompañar al menor para mayor seguridad de los socios y control interno, estos documentos son:\\n
    a) Copia de Identificación oficial
    \\nb) Formato de carta responsiva.
    \\n43) Active Club se reserva el derecho de negar el acceso al usuario que se presente en estado de ebriedad, con aliento alcohólico o bajo la influencia de cualquier estupefaciente o psicotrópico, también se le negará el acceso a cualquier persona que represente algún riesgo para el resto de los usuarios o empleados.\\n
    \\n44) Toda credencial no entregada por el usuario al realizar movimientos de membresía que así lo requieren (baja, ausencia, cancelación) tendrá que ser sustituida por el pago de la cuota de reposición de credencial, de lo contrario no se podrá realizar el movimiento solicitado.\\n
    \\n45) Ninguna persona ajena al staff puede ejercer la función como instructor, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado, de reincidir será expulsado.\\n
    \\n46) Todas las quejas y sugerencias deberán hacerse por escrito dirigidas a la Gerencia de Active Club y se depositarán en un buzón que estaré colocado cerca de la recepción, así como en las redes sociales oficiales de Active (Facebook e Instagram)\\n

    SANCIONES:
    \\n47) Cualquier falta al reglamento o comportamiento que altere el orden de Active Club será sancionada con una amonestación por escrito la cual se integrará al expediente de la Membresía.\\n
    \\n48) El usuario que acumule un total de 3 amonestaciones causará baja definitiva de Active Club. Si la falta lo amerita, el usuario podrá ser suspendido temporalmente de Active Club, sin que esto interfiera con los pagos del mantenimiento mensual.\\n
    \\n49) La Gerencia tiene la facultad de cancelar definitivamente una membresía si a su juicio el usuario incurre en alguna falta grave que así lo amerite: destrucción de las instalaciones o equipos, falta de respeto a cualquier integrante de Active Club, ya sea usuario o empleado, repetidas faltas al reglamento, robo, etc. En dicho caso Active Club no estará obligado a realizar reembolso alguno. En estos casos intervendrá el Comité de Honor y Justicia quién documentará los elementos para la expulsión de los usuarios.\\n
    \\n50) Cualquier daño que se ocasione a las instalaciones o equipos de Active Club por parte de cualquier integrante de la membresía o invitado será cubierto por el titular de la misma.\\n

    GENERALES:
    \\n51) Queda prohibida la venta o promoción de cualquier tipo(s) de artículo(s), evento(s) o rifa(s).
    \\n52) Se prohíbe convocar a asambleas, realizar mítines, organizar juntas, reunir firmas, volantear información o complots en contra de Active Club y su personal.\\n
    \\n53) Queda prohibido introducir cualquier tipo de alimentos y bebidas, excepto agua y bebidas hidratantes en envases de plástico.\\n
    \\n54) Active Club no se hace responsable por la pérdida total o parcial de cualquier objeto o valor, tales como celulares, documentos, joyas, dinero, entre otros, estando a su disposición las cajas de seguridad ubicadas en el acceso de vestidor de damas y caballeros. El servicio de estas cajas de seguridad es sin ningún costo adicional, pudiendo consultar el reglamento específico de las mismas.\\n
    \\n55) Queda prohibido portar e introducir a Active Club: bebidas alcohólicas, estupefacientes o cualquier clase de arma o materiales peligrosos que pudieran perjudicar o dañar a los usuarios y personal de Active Club, así como a las instalaciones del mismo.\\n
    56) Queda prohibido el acceso a las instalaciones de Active Club con cualquier clase de animal o mascota.\\n
    \\n57) Queda prohibido el uso de aparatos de sonido, bocinas, televisores portátiles o aparatos electrónicos y/o de entretenimiento sin el uso de audífonos personales.\\n
    \\n58) No está permitido el introducir a las instalaciones bicicletas, triciclos, patines u objetos similares excepto en eventos organizados por Active Club.\\n
    \\n59) Los usuarios no podrán reprender o llamar la atención a ningún empleado de Active Club, para cualquier queja, ésta deberá de formularse por escrito a la Gerencia General.\\n
    60) Queda prohibido fumar en todas las áreas del Club.
    \\n61) No se permite la toma de fotos a instalaciones, usuario o cualquier persona dentro de las instalaciones, salvo en los eventos previamente programados por la Gerencia.\\n


    REGLAMENTO CAJA:


    Horario de servicio:
    \\nDe lunes a viernes: de 6:00 a 22:00 hrs.
    \\nSábado y domingo 9:00 a 16:30 y días festivos de: 7:00 a 14:30 hrs.


    \\n1. La fecha límite para efectuar el pago oportuno de su cuota mensual es el día cinco de cada mes.
    \\n2. El personal de caja no está autorizado para recibir pagos parciales de su adeudo, tampoco podrá autoriza la entrada a las instalaciones, si su estado de cuenta manifiesta que no está al corriente de pago. Si tiene alguna duda sobre el saldo de su cuenta, favor de pasar a la Gerencia del Club quien atenderá su caso.\\n
    \\n3. Los cambios de status en su membresía (bajas, ausencias y demás), deberán notificarse por escrito a la gerencia del club a más tardar el día 25 del mes anterior a su vigencia.\\n
    FORMAS DE PAGO:
    1.- DOMICILIADO
    a) Tarjeta de crédito\\n
    b) Tarjeta de débito
    2.- CONVENCIONAL O CAJA
    a) Transferencias
    \\n
    b) Efectivo
    c) Tarjeta de débito o crédito
    b) Cheque

    \\nREGLAMENTO DE ACCESO:
    \\nHorario de acceso:
    Lunes a viernes: de 5:00 a 22:30 hrs.
    \\nSábado y domingo de 7:00 a 16:30 y días festivos: de 7:00 a 14:30 hrs.
    \\n1. Por la seguridad de todos nuestros usuarios, todas las personas que tengan acceso y salida a las instalaciones del Club es por medio de su reconocimiento facial y/o credencial, En caso de olvido de la credencial tendrá derecho a tres pases de olvido de credencial al mes, siendo responsabilidad del área de Recepción validar que la membresía se encuentre al corriente de pago. En caso de un cuarto olvido de credencial se cobrará el monto establecido por la Gerencia del Club.\\n
    \\n2. Todos los usuarios de Active Club contarán con su con su reconocimiento facial y/o credencial siéndoles útil para el rentado de toallas.\\n
    \\n3. Si por algún motivo no le es permitido el acceso, favor de pasar a la oficina de la Gerencia y/o Gerencia en turno, para aclarar el motivo. El personal de Recepción y vigilancia no está autorizado para hacer excepciones en ningún caso; evite discutir con ellos.\\n
    \\n4. Se prohíbe la introducción de alimentos, bebidas de cualquier índole, así como mascotas (animales), juguetes con ruedas como bicicletas, triciclos, patines o patinetas, ni otros que puedan causar molestias o accidentes a los demás usuarios.\\n
    \\n5. La Gerencia está facultada para negar el acceso a todos los integrantes de la inscripción en caso de que presente un adeudo de la cuota de mantenimiento o algún otro adeudo.\\n
    \\n6. La Gerencia no se hace responsable por situaciones o acontecimientos sociales, desastres naturales, contingencia ambiental, sanitaria o cualquier otro incidente fuera de nuestra responsabilidad, que afecte la operación regular de nuestra unidad, y nos impida ofrecer nuestros servicios, parcial o totalmente.\\n
    \\n7. La Gerencia está facultada para hacer cambios en el horario de operación de Active Club con previo aviso a los usuarios mediante comunicados que serán colocados en las pantallas informativas del Club, así como por las redes sociales oficiales (Facebook e Instagram).\\n
    \\n8. Para efectos de días festivos o días especiales, Active Club notificará de forma anticipada a los usuarios el horario del Club por medio de comunicados en las pantallas informativas.\\n
    \\n9. Los servicios de baño y regaderas permanecerán abiertos desde la apertura del Club hasta 15 minutos antes del cierre del mismo. Los servicios de vapor y sauna permanecerán abiertos desde la apertura hasta 30 minutos antes del cierre. El área de alberca permanecerá abierta desde la apertura hasta 60 minutos antes del cierre del Club.\\n
    10. La reposición de credencial tendrá el costo determinado por la Gerencia.
    \\n11. Active Club se reserva el derecho de negar el acceso al usuario que se presente en estado de ebriedad, con aliento alcohólico o bajo la influencia de cualquier estupefaciente o psicotrópico, también se le negará el acceso a cualquier persona que represente algún riesgo para el resto de los usuarios o empleados.\\n
    12. Queda prohibido fumar en todas las áreas del Club.
    \\n13. Todas las quejas y sugerencias deberán hacerse por escrito dirigidas a Active Club y se depositarán en los buzones de sugerencias ubicado en las diferentes áreas del Club, así como en las redes sociales.\\n
    \\n14. Los socios no podrán reprender o llamar la atención a ningún empleado de Active Club, para cualquier queja, ésta deberá de formularse por escrito a la Gerencia.\\n
    REGLAMENTO DE ACCESO:
    Horario de servicio de regaderas:
    \\nDe lunes a viernes: de 5:00 a 22:45 hrs.
    \\nSábados y domingos de 7:00 a 16:45 hrs. y días festivos de: 7:00 a 14:45 hrs.
    Horario de servicio de vapor y sauna:
    \\nDe lunes a viernes: de 5:00 a 22:30 hrs.
    \\nSábados y domingos 7:00 a 16:30 hrs. y días festivos de: 7:00 a 14:30 hrs.
    \\n1. El área de vestidores forma parte del club por lo que su uso es destinado exclusivamente para las actividades de aseo personal, resguardo de artículos deportivos y/o implementos de higiene, cualquier otro tipo de actividad diferente a éstas quedan prohibidas.\\n
    \\n2. Queda estrictamente prohibido introducir cualquier tipo de bebidas en envases de cristal y metálicos. Así como también guardar comida, snacks, latas y/o contenedores de alimentos, en cualquiera de los lockers.\\n
    \\n3. El uso de chanclas o sandalias en buenas condiciones es obligatorio en todas las áreas de vestidores y alberca. Active Club no se hace responsable por algún accidente provocado por la falta de las mismas.\\n
    \\n4. Se prohíbe realizar cualquier tipo de compra-venta de artículos tales como: ropa, zapatos, joyería, substancias anabólicas, complementos dietéticos, lociones y demás.\\n
    \\n5. Existen a disposición de los socios lockers de uso diario y sólo podrán ser usados durante el tiempo que permanezca el usuario en Active Club y sin costo alguno, de lo contrario la Gerencia podrá desalojar las pertenencias del locker. En ambos casos la Gerencia no asume ninguna responsabilidad sobre los objetos de valor (teléfonos celulares, carteras, tarjetas bancarias o comerciales, dinero en efectivo, joyas, relojes, dispositivos de música, juegos electrónicos, agendas o asistentes digitales, etc.) depositados en el locker.\\n
    \\n6. Los lockers que se ofrecen están destinados exclusivamente para resguardar artículos de aseo personal y accesorios deportivos.\\n
    \\n7. Los usuarios podrán hacer uso de los casilleros debiendo de traer su candado. En caso de dejar el candado en el locker al final del día, se romperá el mismo, retirando las pertenencias las cuáles serán colocadas en una bolsa de nylon, relacionando todo el contenido. En caso del olvido de la combinación del locker, se deberá de reportar a la Gerencia en turno quién aplicará el procedimiento correspondiente.\\n
    \\n8. Los objetos desalojados, olvidados, así como los extraviados serán resguardados por Active Club por un lapso de 7 días, después de este tiempo se donarán dichos artículos a una institución de Beneficencia.\\n
    \\n9. Para obtener el servicio de toallas en el área de recepción, es necesario realizar el pago correspondiente previamente en el área de caja y dejar en custodia la credencial del usuario que hará uso de la(s) toalla(s). En el caso de pérdida o que se manchen de grasa de zapato, tinte de cabello, etc.; se tendrá que pagar la cuota determinada por la Gerencia y deberá ser cubierta de inmediato, de lo contrario la Gerencia quedará facultada para interrumpir el acceso a las instalaciones a todos los miembros de la membresía.\\n
    \\n10. En caso de no entregar la toalla el día correspondiente a su uso, será considerado como extravío y el usuario deberá cubrir la cuota determinada para tal situación por la Gerencia General.\\n
    \\n11. Queda prohibido realizar cualquier tipo de comercio, rifas, tandas y vendimia dentro de las instalaciones de Active Club.\\n
    \\n12. Los tickets para el uso de toallas tendrán una vigencia de 45 días naturales a partir de la fecha de compra.
    \\n
    \\n13. La secadora centrífuga será de uso exclusivo para trajes de baño, en caso de usarla para otro tipo de ropa el usuario será acreedor a una sanción administrativa y de reincidir será dado de baja. En caso de dañarla, el usuario deberá cubrir el costo de reparación y la sanción administrativa correspondiente.\\n
    14. Las secadoras únicamente podrán ser utilizadas para el secado del cabello.
    \\n15. No se permite el apartado de regaderas ni vestidores.
    \\n16. La plancha de vapor será para el uso exclusivo de planchado ropa (para el uso inmediato), siendo el usuario el responsable de realizar la acción. El staff del Club no podrá realizar éstas labor.\\n
    17. Queda prohibido enjabonarse fuera de las regaderas.
    \\n18. Las regaderas podrán ser ocupadas, solamente por una persona a la vez, exceptuando la situación de los adultos\\n
    responsables con sus niños.
    \\n19. Por beneficio de TODOS, el uso del agua deberá ser de forma racional y moderada.
    \\n20. Con el fin de brindarle mayor seguridad y mantener los pasillos secos, queda prohibido usar las regaderas con la puerta abierta.\\n
    \\n21. Cualquier situación imprevista o no contemplada en este reglamento se sujeta a las resoluciones adoptadas por la Gerencia y deberá ser acatada por todos los usuarios sin excepción.\\n
    Las edades permitidas para el uso de los vestidores son las siguientes:
    \\nEn el caso de niñas y niños menores de 5 años podrán utilizar los vestidores del género de su mamá o de su papá según sea el caso.\\n
    REGLAMENTO PARA EL USO DEL VAPOR Y SAUNA (damas y caballeros):
    \\n
    Horario de servicio:
    \\nDe lunes a viernes: de 5:30 a 22:00 hrs.
    \\nSábados y domingos 7:30 a 16:00 hrs. y días festivos: de 7:30 a 14:00 hrs.
    \\n1. Queda estrictamente prohibido introducir bebidas alcohólicas, gaseosas, energizantes, así como envases de cristal y/o metálicos al vapor y sauna.\\n
    2. Se prohíbe hacer uso del vapor en estado etílico o de deshidratación.
    \\n3. Se prohíbe el uso de cremas, tratamientos cutáneos, lociones, tintes, esencias aromáticas, etc. dentro del vapor y/o sauna.\\n
    \\n4. Prohibida la entrada al vapor y sauna a menores de 15 años de edad por aspectos fisiológicos (deshidratación)
    \\n
    \\n5. La regulación de la válvula de vapor, es responsabilidad del personal del área de vestidores, quedando prohibido a los usuarios la manipulación del equipo.\\n
    6. Por seguridad de todos, queda estrictamente prohibido enjabonarse, en esta área.
    \\n7. Queda prohibido la colocación de substancias aromáticas en la estufa del sauna, así como el colocar encima de la misma ropa mojada y/o verter cualquier tipo de líquido.\\n
    \\n8. Por higiene y seguridad se prohíbe bañarse y/o aplicarse cualquier tipo de tratamiento facial o corporal (jabón, mascarillas, shampoo, aromatizantes, productos naturales, etc.) dentro del área de vapor o sauna.\\n
    \\n9. Queda prohibido introducir al sauna periódicos o revistas para la lectura de los socios, siendo esta una medida preventiva para evitar algún conato de incendio.\\n
    \\n10. Se prohíbe depilarse, rasurarse, cortarse las uñas, exfoliarse, etc. dentro del área de lockers, sauna y vapor.\\n
    \\n11. El uso de chanclas o sandalias en buenas condiciones es obligatorio en todas las áreas de vestidores y alberca. Active Club no se hace responsable por algún accidente provocado por la falta de las mismas.\\n
    \\n12. Queda estrictamente prohibido introducir cualquier tipo de prenda de vestir al sauna con la finalidad del secado de la misma.\\n
    \\n13. Para el uso de sauna y vapor se recomienda una exposición máxima de 15 min, el exceder estos tiempos es responsabilidad del usuario e implicaría un riesgo elevado para su salud.\\n
    \\n14. Queda estrictamente prohibido el uso del celular dentro del sauna y vapor así como también bocinas o cualquier tipo de artículo electrónico.\\n
    15. Por su propia seguridad, se prohíbe colocar papel mojado en el bulbo del cuarto de sauna.
    \\n16. Queda prohibido arrojar agua al sensor de temperatura del vapor y/o sauna.
    \\nREGLAMENTO DE ALBERCA:
    Horario de servicio:\\n
    Lunes a viernes de: 5:00 a 22:00hrs.
    \\nSábados y domingos 7:00 a 16:00 hrs. días festivos de: 7:00 a 14:00 hrs
    Vestimenta y/o uniforme:\\n
    • Hombres:
    \\n- Es obligatorio el uso de traje de baño (sin ropa interior) y que este sea de licra o Polibutireno teleftalano (PBT). No se podrá ingresar con traje de baño de playa u otra índole.\\n
    • Mujeres:
    \\n- Es obligatorio que el traje sea de una sola pieza y que este sea de licra o Polibutireno teleftalano (PBT).
    \\n
    • General:
    \\n1. El uso de gorra de natación es obligatorio para poder hacer uso de la alberca y deberá portarse en todo momento.\\n
    2. Se recomienda tener 2 horas de haber ingerido alimentos
    \\n3. Es obligatorio el uso de googles de natación y sandalias.
    \\n4. No se podrá hacer uso de playeras para nadar, su uso tendrá que ser respaldado por un justificante médico y ésta deberá ser una playera especializada tipo RASH GUARD de licra, PBT o poliéster de manga larga, con protector UV.\\n
    \\n5. Ninguna persona ajena al staff puede ejercer la función como instructor, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado, de reincidir podrá ser expulsado.\\n

    Medidas de higiene para el uso de la alberca:
    \\n1. Se deberá tomar una ducha en las regaderas de la alberca sin excepción alguna antes de entrar a la alberca.
    \\n
    \\n2. Queda estrictamente prohibido orinar en las duchas de alberca y dentro de la misma, en caso de que el usuario sea sorprendido, será causa de baja definitiva.\\n
    3. Queda estrictamente prohibido el uso de cremas corporales y bronceadores.
    \\n4. En el caso de las mujeres, queda estrictamente prohibido el uso de maquillaje para entrar a la alberca.
    \\n5. El usuario de la alberca deberá asegurarse que antes de entrar al agua, sus fosas nasales estén completamente libres de mucosidad.\\n
    Consideraciones generales:
    \\n1. La alberca forma parte de las instalaciones del club por lo que su uso es para la práctica de la natación en sus diferentes modalidades, otra actividad distinta a ésta, queda prohibida.\\n
    \\n2. Todo usuario que se encuentre en la zona de la alberca deberá comportarse con orden y respeto, queda prohibido expresarse con palabras altisonantes, y/o vocabulario vulgar y prosaico, así como juegos bruscos que impliquen un contacto físico exagerado (luchas, hundirse uno al otro, golpes, “caballitos”, etc.), también quedan prohibidas las muestras efusivas de afecto que pudieran incomodar a otros socios.\\n
    \\n3. El usuario que cuente con alguna lesión física, discapacidad, enfermedad deberá notificarlo al staff de la alberca.\\n
    4. Se recomienda comer 2 horas antes de realizar cualquier actividad dentro de la alberca.
    \\n5. No se podrá hacer uso de la alberca si se ingirió bebidas alcohólicas.
    \\n6. Ninguna persona deberá estar en el perímetro de la alberca, con vestimenta diferente a la propia para el uso de la alberca.\\n
    \\n7. Es obligatorio acudir con el guardavida antes de ingresar a la alberca para que éste le indique en qué carril puede hacer uso de la misma, ya que el uso de carriles y su asignación dependerá de la operación del día y hora. La operación de la alberca queda bajo estricto control de Active Club y el staff del área.\\n
    \\n8. El uso de los carriles es compartido, por lo que el nado es en circuito, circulando siempre del lado derecho del mismo.\\n
    9. Queda prohibido recargar el peso y/o subirse a los carriles.
    \\n10. Se prestará el material didáctico a todo usuario, mismo que deberá ser colocado en su lugar después de su uso.\\n
    11. Se deberá cuidar el material de la alberca; en caso de daño o desperfecto el usuario deberá pagarlo.\\n
    \\n12. Queda prohibido introducir alimentos al área de la alberca; solo se permite el uso de agua y bebidas deportivas en recipiente de platico transparente.\\n
    \\n13. No se permite introducir al área de la alberca maletas, mochilas, bolsas, etc. Solo podrán traer red de natación.\\n
    14. Queda prohibido introducir mascotas dentro del área de la alberca.
    \\n15. Las toallas como las batas de baño deberán ser colocadas en los percheros de la alberca.
    \\n16. Active Club no se hará responsable por el uso indebido de las instalaciones de la alberca sin tomar las precauciones necesarias.\\n
    \\n17. La edad mínima para que un niño pueda permanecer solo en la alberca es de 12 años, el niño tiene que saber flotar.\\n
    \\n18. Los niños de 1 año a 11 años 11 meses deben entrar a la alberca acompañados de un adulto miembro de la membresía que se haga responsable de su seguridad y de su comportamiento, un adulto podrá hacerse cargo de máximo dos menores.\\n
    19. Niños menores de tres años deben de usar pañal para alberca.
    \\n20. El staff de alberca está facultado para sancionar a los usuarios que incurran en conductas incorrectas en el área de la alberca, asentando por escrito la falta cometida y esta será entregada a la Gerencia del Club.\\n

    Uso recreativo de la alberca:
    \\n1. El horario recreativo será de 12:00 hasta las 17:00 horas de lunes a viernes. Sábados, domingos y días festivos será de 7:00 a 16:00 horas.\\n
    2. El staff de la alberca indicará cual será el carril para esta actividad.
    \\n3. Queda prohibido brincar a la alberca y/o toda clase de clavados.
    \\n4. Queda prohibido el uso de pelotas y balones.
    \\n5. El uso de juguetes será a consideración y autorización del staff de alberca.

    \\nREGLAMENTO PARA ACADEMIA DE NATACIÓN:
    \\n1. Es obligatorio acudir con el staff de alberca para registrarse en la academia de natación Active Club y agendar la evaluación técnica pertinente para que le sea asignado un grupo y nivel adecuado. De no llevar a cabo el registro y evaluación antes citados el usuario no podrá ingresar a una clase programada. El usuario tendrá la opción de hacer uso del carril asignados para nado libre.\\n
    \\n2. Los menores que asistan a la academia de natación deberán llegar acompañados sin excepción alguna de un adulto responsable.\\n
    \\n3. El staff de la academia de natación se reserva el derecho de asignar y cambiar instructores en función de la disponibilidad de éstos.\\n
    \\n4. El staff de la academia de natación están facultados para fusionar, reasignar o eliminar grupos de acuerdo a la asistencia de los usuarios.\\n
    \\n5. Los cambios de horarios se solicitarán con el guardavida, la aceptación de este se hará con base a la capacidad en los grupos.\\n
    \\n6. Para todas las clases impartidas en el área de alberca existirá un tiempo de tolerancia de 5 minutos una vez iniciada la clase (según el reloj interno de la alberca de Active Club).\\n
    7. Todos los alumnos de la academia de natación deberán respetar el reglamento de la Alberca.
    \\n8. Se deberá asistir regularmente a la clase de la academia de natación, a partir de la tercera falta en un mes o bien, en caso de acumular más de 8 faltas en el cuatrimestre se dará de baja del grupo, reasignándole otro horario según la disponibilidad.\\n
    10. Se prohíbe permanecer en las instalaciones de la alberca con ropa y calzado de vestir.
    \\n11. Los padres de los niños deberán permanecer dentro de las instalaciones del club durante el tiempo de duración de la clase.\\n
    \\n13. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia y deberá de ser acatada por todos los socios sin excepción.\\n

    SERVICIO DE NUTRICION:
    \\n1. Los Nutriólogos e instructores de piso están capacitados para atender cualquier lesión o eventualidad que pudiera sufrir algún usuario dentro de las instalaciones. El personal tiene prohibido recetar o suministrar cualquier tipo de medicamento, emitir diagnóstico o tratamiento alguno a los usuarios de Active Club.\\n
    \\n2. En el área de Nutrición, se realizará la valoración de la aptitud física, siendo necesario que el usuario de nuevo ingreso se realice la misma, posteriormente quedará a discreción del usuario realizar el seguimiento para conocer los avances obtenidos, siendo este un beneficio para todos.\\n
    3. Las citas para la valoración de la aptitud física se deberán agendar en el Sistema Deportivo Trainingym.\\n
    \\n4. La cita de la valoración de la aptitud física tendrá un tiempo de tolerancia de 5 minutos, transcurrido ese tiempo, el usuario tendrá que agendar otra cita.\\n
    \\n5. La valoración de la aptitud física se realizará a todos los usuarios que así lo deseen, esta tendrá un periodo de vigencia de 2 meses, al final del cual deberá de haber cubierto un 80% de cumplimiento del plan de acondicionamiento físico, agendando una nueva cita en la aplicación Sistema Deportivo Trainingym del gimnasio para continuar con su siguiente valoración. En caso de no cumplir el porcentaje requerido perderá el seguimiento de esta valoración, teniendo 2 opciones a) Retomar la valoración próxima pasada hasta cumplir el 80% de asistencia y la opción b) Que consiste en agendar una cita de valoración de la aptitud física con el costo marcado por la Gerencia del club. Al cumplir el porcentaje marcado su siguiente valoración no tendrá costo.\\n
    \\n6. La valoración nutricional se agendará en el Sistema Trainingym y estará condicionada al cumplimiento del 80% del plan de acondicionamiento físico.\\n

    REGLAMENTO DE USO DEL AREA DE ACONDICIONAMIENTO FÍSICO:

    \\n
    Horario de servicio:
    \\nLunes a viernes: de 5:00 a 22:45 hrs.
    \\nSábados y domingo 7:00 a 16:45 y días festivos de: 07:00 a 14:45hrs.
    Vestimenta o uniforme:\\n
    \\n1. Se permite el acceso con ropa deportiva (pants, playera, sudadera, licras, leotardo, shorts, mallas, zapatos tenis, calcetas deportivas).\\n
    \\n2. Es obligatorio utilizar toalla limpia personal para el uso del gimnasio, siendo este implemento parte del uniforme, utilizándose para secar la transpiración del cuerpo y el sudor dejado en aparatos e implementos utilizados.\\n
    3. El gimnasio brindara el servicio de renta de toalla el cual tendrá un costo.
    Reglas:\\n
    \\n1. Los instructores asignados están facultados para suspender o restringir el acceso al gimnasio a toda persona que falte al presente reglamento (por desaseo personal, lenguaje ofensivo, etc.).\\n
    2. Está prohibido colgar prendas u objetos en los aparatos y/o cualquier implemento del gimnasio.
    \\n3. El acceso al gimnasio es exclusivo para el de acondicionamiento físico, el usuario deberá de registrar su actividad realizada y validarla con los instructores para darle seguimiento a su programa en base al sistema Active Club.\\n
    4. Está prohibido apartar cualquier aparato, implemento o accesorio del gimnasio.
    \\n5. Queda prohibido el uso de mancuernas o pesas mientras se usa cualquier aparato para ejercicio cardiovascular (elíptica, caminadora, escalera sin fin, bicicleta, etc.)\\n
    6. El uso de los aparatos cardiovasculares será de 30 minutos máximo por persona sin excepción alguna.
    \\n
    \\n7. Está prohibido el uso de todo tipo de sustancias para el cuerpo (cremas, lociones, lubricantes colorantes, hot stof) así como fajas térmicas y/o chalecos para sudar, etc.\\n
    \\n8. Queda prohibido por parte de los entrenadores y profesores de clases dirigidas ofrecer entrenos personales a los usuarios o visitantes del Active Club.\\n
    9. Por seguridad del desarrollo físico se restringe el acceso a menores de 13 años.
    \\n10. Se prohíbe el acceso al gimnasio con maletas, equipos de sonido, etc.
    \\n11. Esta estrictamente prohibido fumar, ingerir alimentos y bebidas de cualquier índole (a excepción de bebidas hidratantes y agua natural en envases de plástico y/o cilindros).\\n
    \\n12. Se sancionará al usuario que retire o desplace algún equipo de esta área, así como hacer mal uso o dañarlo. Para lograr un mejor servicio e imagen del gimnasio se deberá de colocar en su lugar el equipo que se utilice (barras, mancuernas, etc.).\\n
    13. Se prohíbe utilizar los aparatos para una función que no sea estipulada en el instructivo del mismo.\\n

    Por seguridad:
    \\n1. Se recomienda realizar una consulta a su médico particular antes de iniciar cualquier programa de ejercicios. Es de importancia recordar que el club no asume responsabilidad alguna por lesiones o problemas de orden médico.\\n
    \\n2. Los instructores tienen prohibido vender o recomendar medicamentos, sustancias anabólicas y complementos dietéticos.\\n
    3. Si desconoce el uso de los aparatos pida asesoría a los instructores encargados.
    \\n4. La selección de audio y video del área del gimnasio queda estrictamente a cargo de la gerencia, no pudiendo hacer ningún cambio a petición de los usuarios.\\n
    \\n5. Todos los usuarios que realicen su entrenamiento en el gimnasio; deberán de contar con el formato de entrenamiento en el cual se incluirán los datos más relevantes de su valoración de la aptitud física (realizada previamente). Cualquier situación especial de salud o lesión deberá de ser reportada al personal del área.\\n
    \\n6. Será obligatorio el uso de una toalla facial personal, en caso contrario no se permitirá el acceso al área.
    \\n
    \\n7. Después de usar cualquier aparato es obligatorio limpiarlo con las toallas húmedas desinfectantes que se encuentran en diversos puntos del gimnasio.\\n
    \\n8. Es obligatorio que los usuarios regresen a su lugar el equipo (barras, mancuernas y equipo en general) que empleen en la ejecución de su rutina de entrenamiento.\\n
    9. Queda estrictamente prohibido el acceso al área con carriolas.
    \\n10. Ninguna persona ajena al staff puede ejercer la función como instructor, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado, de reincidir podrá ser expulsado.\\n
    \\n11. No podrán permanecer en el gimnasio las personas o usuarios que no estén realizando alguna actividad de acondicionamiento físico.\\n
    \\n12. El staff de Active Club queda facultado para hacer cumplir el reglamento a los usuarios que incurran en conductas incorrectas, reportando a la Gerencia por escrito la falta cometida, anexándose al expediente de la membresía.\\n
    \\n13. Active Club se reserva el derecho de cambiar los instructores y los horarios de los mismos cuando así lo requiera el servicio.\\n
    \\n14. Todos los usuarios deberán alternar y compartir al hacer uso de los aparatos y equipos. Queda prohibido apartar los mismos.\\n
    \\n15. Active Club no se hace responsable por objetos olvidados y/o extraviados dentro del área de acondicionamiento físico.\\n
    \\n16. Todos los socios deberán de presentarse en el área con las condiciones de aseo personal mínimas (uso de antitranspirante y/o desodorante, ropa limpia). Esto con el objetivo de generar un entorno limpio, higiénico y agradable para todos.\\n
    \\n17. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia y deberá de ser acatada por todos los socios sin excepción.\\n

    REGLAMENTO DE SPINNING:
    \\n1.Se deberá utilizar ropa adecuada para la práctica de esta actividad.
    \\n2. Para asistir a la clase deberá el usuario reservar su lugar en la aplicación del Sistema Deportivo Trainingym
    \\n
    \\n3. Todos los usuarios deberán de presentarse en el área con las condiciones de aseo personal mínimas (uso de antitranspirante y/o desodorante, ropa limpia). Esto con el objetivo de generar un entorno limpio, higiénico y agradable para todos.\\n
    4. Queda estrictamente prohibido introducir alimentos en el área de Spinning.
    \\n5. Sólo se podrán introducir agua y bebidas hidratantes en envase de plástico con tapa.
    \\n6. No se podrán introducir maletas y/o bolsas voluminosas al área de trabajo.
    \\n7. El tiempo de tolerancia para entrar a las clases una vez iniciadas será de 10 minutos, transcurrido ese tiempo no se permitirá el acceso.\\n
    8. No está permitido apartar bicicletas.
    \\n9. El acceso a las clases de Spinning se permitirá a partir de los 12 años de edad.
    \\n10. Cualquier desperfecto por maltrato a las bicicletas será responsabilidad del usuario debiendo cubrir el monto del daño ocasionado.\\n
    \\n11. Active Club se reserva el derecho de cambiar sin previo aviso, por causas de fuerza mayor, el instructor, el horario y el tipo de clase.\\n
    \\n12. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General y deberá ser acatada por todos los socios sin excepción\\n

    REGLAMENTO DE BOX:
    \\n1. Se deberá utilizar la ropa adecuada para la práctica de esta actividad, queda prohibido el acceso con zapatos de calle.\\n
    \\n2. Todos los usuarios deberán de presentarse en el área con las condiciones de aseo personal mínimas (uso de antitranspirante y/o desodorante, ropa limpia). Esto con el objetivo de generar un entorno limpio, higiénico y agradable para todos.\\n
    \\n3. Queda estrictamente prohibido introducir alimentos, permitiéndose el acceso con agua y/o bebidas hidratantes en envase de plástico con tapa, queda prohibido el acceso de cualquier accesorio que ponga en riesgo la integridad de los usuarios.\\n
    \\n4. Para la práctica de este deporte es necesario el uso de vendajes las cuales deben ser adquiridas por el usuario.\\n
    \\n5. Está prohibido el uso de todo tipo de sustancias para el cuerpo (cremas, lociones, lubricantes colorantes, hot stof) así como fajas térmicas y/o chalecos para sudar, etc.\\n
    \\n6. Ninguna persona ajena al staff puede ejercer la función como instructor, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado, de reincidir será expulsado.\\n
    \\n7. El tiempo de tolerancia para que los usuarios puedan entrar a las clases será de 10 minutos, transcurrido ese tiempo el profesor no permitirá el acceso, esto como medida de seguridad para los participantes.\\n
    \\n8. La práctica de esta actividad es exclusivamente deportiva (sin contacto), no podrá ser utilizada para otro fin
    \\n
    \\n9. El uso irresponsable del equipo que tenga como consecuencia el deterioro de los mismos será responsabilidad del usuario, quien deberá de cubrir el daño respectivo.\\n
    \\n10. Active Club queda facultado para amonestar por escrito a los usuarios que incurran en conductas incorrectas en el área donde se imparta esta actividad.\\n
    11. Active Club se reserva el derecho de cambiar horarios e instructor cuando así se requiera.
    \\n12. Los accesorios para llevar a cabo la práctica de esta disciplina deberán ser adquiridos por el usuario.
    \\n13. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia y deberá de ser acatada por todos los socios sin excepción.\\n

    REGLAMENTO DE USO DE LOS SALONES PARA ACTIVIDADES GRUPALES:
    \\n1.\tSe deberá utilizar la ropa adecuada para la práctica de la actividad impartida, queda prohibido el acceso con zapatos de calle.\\n
    \\n2.\tEs obligatorio utilizar toalla limpia personal para el uso de los salones para actividades grupales, utilizándose para secar la transpiración del cuerpo y el sudor dejado en éstos. Queda prohibido limpiarse el sudor en las paredes, cristales y/o implementos de los mismos, debiendo utilizar las toallas húmedas sanitizantes colocadas en el salón.\\n
    \\n3.\tTodos los usuarios deberán de presentarse en el área con las condiciones de aseo personal mínimas (uso de antitranspirante y/o desodorante, ropa limpia). Esto con el objetivo de generar un entorno limpio, higiénico y agradable para todos.\\n
    4.\tQueda estrictamente prohibido introducir alimentos a los salones.
    \\n5.\tSólo se podrán introducir bebidas hidratantes en envase plástico con tapa.
    \\n6.\tNo se podrán introducir maletas y/o bolsas voluminosas al salón.
    \\n7.\tEl tiempo de tolerancia para entrar a las clases será de 10 minutos, transcurrido ese tiempo no se permitirá el acceso.\\n
    8.\tNo está permitido apartar lugares o espacios en cualquiera de las clases impartidas.
    \\n9.\tAl término de cada clase los usuarios deberán abandonar el salón para permitir el acceso del personal de limpieza.\\n
    \\n10.\tEn clases que requieran el uso de equipo, cada persona se hará responsable del uso del mismo y de colocar el equipo en el lugar asignado al término de la clase.\\n
    \\n11.\tLa Gerencia determinará el cupo de cada clase y no podrá haber más participantes que los designados para cada actividad.\\n
    12.\tEl acceso a las clases dirigidas se permitirá a partir de los 12 años.
    \\n13.\tLas clases dirigidas tendrán una duración de 50 minutos.
    \\n14.\tNo se permitirá permanecer dentro del salón si no hay clase o instructor.
    \\n15.\tActive Club no se hace responsable por objetos olvidados y/o extraviados dentro de los salones.
    \\n16.\tQueda estrictamente prohibido el acceso a niños menores de 12 años, aun cuando estén acompañados por un adulto.\\n
    \\n17.\tActive Club se reserva el derecho de cambiar sin previo aviso, por causas de fuerza mayor, el instructor, horario y tipo de clase.\\n
    \\n18.\tCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia y deberá de ser acatada por todos los socios sin excepción.\\n

    REGLAMENTO DE ENTRENAMIENTO FUNCIONAL:
    \\n1. Después de usar cualquier implemento es obligatorio colocarlo en su lugar.
    \\n2. Por su seguridad e higiene es obligatorio utilizar la ropa adecuada (conjuntos deportivos de algodón, licra y/o telas sintéticas deportivas), queda estrictamente prohibido hacer ejercicio con ropa de mezclilla, gabardina, zapatos de calle, sandalias y/o cualquier calzado que no sea el adecuado.\\n
    \\n3. Todos los usuarios deberán de presentarse en el área con las condiciones de aseo personal mínimas (uso de antitranspirante y/o desodorante, ropa limpia). Esto con el objetivo de generar un entorno limpio, higiénico y agradable para todos.\\n
    \\n4. Está prohibido el uso de todo tipo de sustancias para el cuerpo (cremas, lociones, lubricantes colorantes, hot stof) así como fajas térmicas y/o chalecos para sudar, etc.\\n
    \\n5. Queda estrictamente prohibido introducir todo tipo de alimentos y envases de vidrio, bebidas calientes, en lata o en envases sin tapa para evitar derrames en el área.\\n
    6. No se podrán introducir maletas, back packs y/o bolsas voluminosas al área.
    \\n7. Se prohíbe el uso indebido del equipo o instalaciones del área; que motiven el deterioro y/o destrucción del mismo.\\n
    8. Queda estrictamente prohibido el acceso al área con carriolas.
    \\n9. Ninguna persona ajena al staff de instructores puede ejercer la función como tal, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado.\\n
    10. La edad mínima para ingresar a clases de entrenamiento funcional, de manera general, será de 12 años.\\n
    \\n11. El staff de Active Club queda facultado para hacer cumplir el reglamento a los socios que incurran en conductas incorrectas, reportando a la Gerencia por escrito la falta cometida, anexándose al expediente de la membresía.\\n
    \\n12. Active Club se reserva el derecho de cambiar los instructores y los horarios de los mismos cuando así lo requiera el servicio.\\n
    13. Queda prohibido apartar los implementos y/o accesorios.
    \\n14. Active Club no se hace responsable por objetos olvidados y/o extraviados dentro del área de entrenamiento funcional.\\n
    \\n15. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia de Active Club y deberá de ser acatada por todos los socios sin excepción.\\n

    GENERALIDADES:
    \\n1. La Gerencia establecerá las normas técnicas o deportivas para el mejor aprovechamiento de todas las instalaciones de Active Club por parte de los usuarios y de sus invitados.\\n
    \\n2. Todos los reglamentos son susceptibles de modificaciones o adiciones por parte de la Gerencia cuando se juzgue que estas reformas resulten convenientes para la mejor operación de Active Club.\\n
    \\n3. Active Club queda facultada para expedir circulares y normas internas que deben ser acatadas por los usuarios e invitados.\\n
    \\n4. La facultad de interpretación de los reglamentos y aplicación de sanciones pertenece exclusivamente a la Gerencia de Active Club.\\n
    \\n5. Las modificaciones o adiciones que se hagan a las disposiciones reglamentarias serán comunicadas a los usuarios.\\n
    \\n6. Cualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia y deberá de ser acatada por todos los usuarios sin excepción.\\n

    \\n________________________________________________

    \\nGERENTE GENERAL ANTONIO HERNANDEZ

    EL PRESTADOR


    ________________________________________________

    {{vm.data.partnerName}}

    TITULAR

    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/contract/contract-urban.html\",\"
    ImprimirGuardar\\nFirmar\\nEnviar por email\\nObtener datos nuevamente
    \\nCONTRATO DE PRESTACIÓN DE SERVICIOS QUE CELEBRAN, POR UNA PARTE, {{vm.data.partnerName}}, POR SU PROPIO DERECHO (EN LO SUCESIVO, EL \\\"USUARIO\\\"), Y POR LA OTRA PARTE GABRIELA MARQUEZ SABAG.,] REPRESENTADA EN ESTE ACTO POR GABRIELA MARQUEZ SABAG (EN LO SUCESIVO, \\\"URBAN FITNESS\\\"), AL TENOR DE LAS SIGUIENTES DECLARACIONES Y CLAUSULAS:\\n

    DECLARACIONES

    \\nI. Declara el Usuario, por su propio derecho, que:

    \\n(a) Es una persona física, con plena capacidad legal para celebrar este Contrato y cumplir con las obligaciones derivadas del mismo de conformidad con sus términos.\\n

    \\n(b) Es su voluntad contratar los servicios de Urban Fitness sujeto a los términos y condiciones de este Contrato.
    \\n
    (c) Toda la información establecida en este Contrato, incluyendo la carátula es verdadera y correcta.
    \\n
    II. Declara Urban Fitness, a través de su representante, que:

    \\n(a) Es una persona física con actividad empresarial, creada de conformidad con las leyes de los Estados Unidos Mexicanos y que cuenta con la capacidad suficiente para contratar en los términos del presente Contrato.\\n

    \\n(b) Su representante cuenta con todas las facultades necesarias para la celebración del presente Contrato, mismas que no le han sido revocadas ni limitadas en forma alguna a la fecha de firma del presente Contrato.\\n

    VIRTUD DE LO ANTERIOR\\n y en consideración de los acuerdos mutuos contenidos en el presente Contrato, las partes acuerdan y convienen conforme a las siguientes:\\n

    CLÁUSULAS:

    \\nPRIMERA. OBJETO. Urban Fitness prestará al Usuario (en lo sucesivo cualquier referencia al \\\"Usuario\\\" de la inscripción, en su caso) los servicios descritos en la Cláusula Segunda, durante la vigencia de este Contrato. El Usuario se obliga a pagar a Urban Fitness en términos de la Cláusula Tercera de este Contrato una cuota de inscripción y una cuota de mantenimiento mensual o, en su caso, anual por la prestación de dichos servicios.\\n

    \\nSEGUNDA. SERVICIOS. Urban Fitness prestará al Usuario en las instalaciones del gimnasio operado bajo la marca Urban Fitness según datos de carátula, los servicios deportivos que ofrece actualmente a sus usuarios en general, los cuales podrán ser modificados o adicionados de tiempo en tiempo (los \\\"Servicios Deportivos\\\"). Lo anterior, de conformidad con los términos y condiciones previstos en el presente Contrato\\n

    \\nTERCERA. CUOTAS. Como contraprestación por los Servicios Deportivos, el Usuario se obliga a pagar a Urban Fitness las siguientes cuotas:\\n

    \\n1. Cuota de inscripción, cuyo monto, condiciones y forma de pago se establecen en la carátula del presente Contrato.\\n

    \\n2. Cuota de mantenimiento, que deberá pagarse de manera anual o mensual, de conformidad con lo siguiente:

    \\n
    Cargo/Cuota Anual. Es la cuota anual vigente que se cobra en una sola exhibición. \\nEn esta cuota/forma de pago no existirá reembolso o devolución de cantidad alguna pagada, toda vez que se está adquiriendo/pagando una cuota preferencial, y por ende tiene dicha restricción.\\n\\n El pago de esta cuota puede realizarse mediante cheque, transferencia, depósito a cuenta de Urban Fitness (en dicho caso deberá solicitarse de forma previa datos para pago), efectivo, tarjeta de crédito o débito, o cualquier otro medio/forma \\nsiempre y cuando, así se indique por Urban Fitness para efectos de pago.\\n Lo anterior, atendiendo a las opciones de medios registrados de cobro- y que así se señale en la que el pago diga Urban Fitness y el numero de usuario.\\n

    Cargo/Cuota Mensual Direccionado.\\n Es la cuota vigente que se cobra de manera automática por Urban Fitness y es cargada a una tarjeta de crédito. El Usuario reconoce que el cargo mensual direccionado tiene cuotas preferenciales sobre las cuotas/cargos convencionales. En caso de que el Usuario desee cancelar su inscripción o desee cambiar la forma de pago de su cuota mensual direccionado a cargo/cuota mensual convencional, éste deberá acudir a la recepción (área de front) del gimnasio en cuestión para realizar los trámites correspondientes. El Usuario acepta que la modalidad de cargo mensual direccionado podrá ser cancelada en cualquier momento por Urban Fitness.\\n

    Cargo/Cuota Mensual Convencional.\\n Es la cuota vigente que tiene lugar mediante el pago por parte del Usuario en caja (área de front). El pago de esta cuota puede realizarse mediante cheque, transferencia, depósito a cuenta de Urban Fitness (en dicho caso deberá solicitarse de forma previa datos para pago), efectivo, tarjeta de crédito o débito, o cualquier otro medio/forma \\nsiempre y cuando, así se indique por Urban Fitness para efectos de pago.\\n Lo anterior, atendiendo a las opciones de medios registrados de cobro- y que diga Urban Fitness y el numero de usuario.\\n

    \\nEn caso de que el Usuario desee realizar cualquier cambio con respecto a su inscripción o medio de pago, ya sea cancelar su inscripción o desee autorizar el cargo mensual direccionado, éste deberá acudir a la recepción (área de front) de Urban Fitness y el número de usuario para realizar los trámites correspondientes.\\n

    \\nPara el caso de cargos/cuotas mensuales-el Usuario deberá pagar dichas las cuotas de mantenimiento mensual, dentro de los primeros 3 (TRES) días naturales de cada mes calendario, pudiendo gozar además, de una tarifa preferencial.- para el caso que exista y así aplique.- con respecto a la tarifa regular/ordinaria de cuota de mantenimiento vigente al momento del cobro. En caso de que el pago no se realice dentro de los primeros 3 (TRES) días del mes, Urban Fitness cobrará la cuota de mantenimiento regular/ordinaria vigente (atendiendo a precio de lista). Durante los últimos meses del año, Urban Fitness dará a conocer al Usuario, mediante comunicados que serán colocados en los pizarrones de avisos que se encuentran en diversas áreas del Gimnasio, las nuevas cuotas de mantenimiento que estarán vigentes a partir del mes de diciembre de ese mismo año. En casos extraordinarios Urban Fitness podrá determinar aumentos de cuotas de mantenimiento en otros periodos del año. Así mismo, cualquier otro ajuste de precio/tarifa con respecto a otros servicios proporcionados por Urban Fitness, serán notificados al Usuario mediante dichos comunicados.\\n

    \\nCUARTA. CARGOS A TARJETA DE CRÉDITO. En caso de que el Usuario, de conformidad con la opción seleccionada en la carátula de este Contrato, haya elegido el pago de la cuota de mantenimiento mediante cargo direccionado, en este acto el Usuario expresamente autoriza a Urban Fitness para que, automáticamente y sin necesidad de alguna otra autorización, cargue mensualmente la cuota mensual vigente a cuenta de la tarjeta de crédito mencionada en dicha carátula. El Usuario autoriza que Urban Fitness realice el cargo de la cuota de mantenimiento direccionado durante los primeros 3 (TRES) días naturales de cada mes. Si por insuficiencia de fondos o crédito, imputables al Usuario, Urban Fitness no puede realizar el cargo en dicho plazo, el Usuario autoriza a Urban Fitness a realizar el cargo de dicha cuota de mantenimiento sin beneficio alguno relativo a cuota de mantenimiento preferencial. En adición y para el caso de que Urban Fitness no pueda realizar dicho cargo en repetidas ocasiones, por causas ajenas a Urban Fitness, no se le respetará al Usuario la cuota de mantenimiento direccionada y se le cobrará la cuota de mantenimiento convencional que esté vigente al momento del cobro. El Usuario reconoce que Urban Fitness está facultado para cargar los ajustes a las cuotas de mantenimiento que sean notificadas al Usuario de conformidad con la Cláusula Tercera.\\n

    \\nQUINTA. FALTA DE PAGO. La administración de Urban Fitness está facultada para negar el acceso en caso de que presente un adeudo de la cuota de mantenimiento o algún otro adeudo, tomándose esta medida según la opción de pago que se haya elegido: Pago de mantenimiento/cuota mensual: Se negará el acceso a partir del día 4 (CUATRO) del mes corriente/calendario que no se haya pagado. Es decir; si hoy es 4 de marzo y no ha sido cubierta la cuota de mantenimiento del mes de marzo, la administración estará facultada para negar el acceso del gimnasio en cuestión, hasta recibir el pago de dicho mes.\\n

    \\nRecargos: En caso de que el usuario no realice el pago correspondiente de su mantenimiento después del día 3 de cada mes se genera un interés mensual del 5% acumulable por mes.\\n

    \\nSEXTA. REGLAMENTO Y NORMAS INTERNAS. El Usuario declara a Urban Fitness que conoce, entiende y acepta, el Reglamento \\\" Urban Fitness \\\" (en lo sucesivo, el \\\"Reglamento\\\") en su totalidad, mismo que le(s) es entregado en esta misma fecha por Urban Fitness (de forma física o digital) y cuya recepción se confirma mediante la firma del presente. El Usuario se obliga en todo momento a cumplir con las disposiciones del Reglamento, así como a cumplir con todos los términos y condiciones de circulares, políticas y normas internas que de tiempo en tiempo Urban Fitness determine para el uso de sus instalaciones y del equipo deportivo ubicado en dichas instalaciones. El Usuario reconoce y acepta que en caso de que, ocurra algún incumplimiento por parte del Usuario a las disposiciones del Reglamento, circulares, políticas y normas internas, Urban Fitness tiene el derecho de cancelar inmediatamente la inscripción y el acceso del Usuario, sin responsabilidad alguna Urban Fitness y sin que éste tenga que reembolsar cantidad alguna al Usuario.\\n

    SÉPTIMA. RESPONSABILIDAD.

    \\n(a) Urban Fitness no se hace responsable por la pérdida total o parcial de cualquier objeto o valor ocurrida dentro de sus instalaciones.\\n

    \\n(b) El Usuario reconoce y declara que se encuentra en buen estado de salud y asume cualquier riesgo derivado de enfermedades o problemas de salud presentes o futuros.\\n

    \\n(c) El Usuario reconoce y acepta que las instalaciones del gimnasio en cuestión y el equipo deportivo ubicado en dichas instalaciones son peligrosos por sí mismos (por su naturaleza) y, por lo tanto, existen riesgos inherentes a la participación del Usuario en actividades deportivas. El Usuario acepta, bajo su propia y exclusiva responsabilidad, su participación en dichas instalaciones.\\n

    \\n(d) El Usuario se obliga a responder del daño que éste provoque a cualquier tercero, obligándose, a su propio costo, a sacar en paz y a salvo a Urban Fitness, sus afiliadas, subsidiarias, accionistas, consejeros, directores, empleados y/o asesores, de cualquier demanda y/o reclamación presentada en su contra, liberándolos en este acto de toda responsabilidad por dicho daño.\\n

    \\n(e) Asimismo, el Usuario asume el riesgo total (incluyendo riesgos previsibles y no previsibles) y la responsabilidad derivada de su participación, así como el daño, lesión o enfermedad causados a los mismos por participar en eventos deportivos organizados por Urban Fitness, así como por sus afiliadas o subsidiarias fuera de las instalaciones de Urban Fitness, liberando en este acto de toda responsabilidad de cualquier naturaleza a Urban Fitness, así como a sus afiliadas, subsidiarias, accionistas, consejeros, directores, empleados y/o asesores por dicho daño, derivada de dicho daño, lesión o enfermedad.\\n

    \\nOCTAVA. SEGUROS. Seguro de Responsabilidad Civil. Urban Fitness cuenta con un seguro de responsabilidad civil por daños y perjuicios ocasionados a terceros, dentro de las instalaciones del gimnasio en cuestión, conforme a la legislación aplicable en materia de responsabilidad civil vigente en los Estados Unidos Mexicanos. Lo anterior, de conformidad con la cobertura, monto asegurado, alcances y demás términos y condiciones establecidos en la póliza de seguro que para tales efectos tenga contratada Urban Fitness con una compañía de seguros.\\n

    \\nNOVENA. DURACIÓN. El Usuario podrá hacer uso de las instalaciones y de los Servicios Deportivos proporcionados por Urban Fitness mientras se encuentre al corriente en el pago de las cuotas de mantenimiento correspondientes y cualesquier otras cantidades adeudadas a favor de Urban Fitness, de conformidad con lo establecido en este Contrato.\\n

    \\nDÉCIMA. AUSENCIA. En caso de que el Usuario requiera ausentarse por un lapso de al menos UN mes, éste podrá solicitar la aplicación para pago de la \\ncuota de ausencia.\\n Lo anterior de conformidad con lo establecido para tales efectos en el Reglamento. La solicitud en cuestión deberá realizarse en la recepción (área de front) del gimnasio a más tardar el día 25 de cada mes calendario, en la inteligencia de que, la cuota de ausencia aplicará/será efectiva, en el mes calendario inmediato siguiente.\\n

    \\nDÉCIMA PRIMERA. RELACIÓN ENTRE LAS PARTES. El presente Contrato es un contrato de prestación de servicios y de ninguna manera deberá considerarse que el mismo crea o constituye una relación laboral, coinversión, asociación, sociedad o acuerdo similar entre las partes, por lo que cada parte es y deberá ser independiente y únicamente responsable por sus obligaciones frente a terceros (incluyendo a sus respectivos empleados), así como por cualquier obligación de carácter civil, laboral, administrativo o fiscal.\\n

    \\nDÉCIMA SEGUNDA. NOTIFICACIONES Y AVISOS. Toda notificación u otra comunicación requerida o permitida conforme al presente Contrato se realizará por escrito. En caso de que la notificación sea dirigida a Urban Fitness, ésta se entregará personalmente por el Usuario en la recepción (área de front) del gimnasio, a la atención de Urban Fitness como lo indica en la carátula de este Contrato.\\n

    \\nDÉCIMA TERCERA. CESIÓN. Urban Fitness tiene el derecho de ceder en cualquier momento todos sus derechos y obligaciones bajo el presente Contrato. El Usuario no podrá ceder sus derechos y obligaciones bajo el presente Contrato, salvo en el caso de fallecimiento del Usuario titular, en cuyo caso sus derechos bajo el presente Contrato podrán cederse al cónyuge o alguno de los hijos integrantes de la inscripción, requiriendo realizar los trámites indicados por la administración de Urban Fitnes.\\n

    \\nDÉCIMA CUARTA. REVOCACIÓN DE CONSENTIMIENTO. Durante un lapso de 5 (cinco) días hábiles contados a partir de la fecha de celebración de este Contrato, el Usuario tendrá el derecho de revocar su consentimiento mediante un aviso por escrito entregado personalmente en el área de recepción/front del gimnasio en cuestión de Urban Fitness. Lo anterior, aplicará \\nsiempre y cuando\\n, el pago de cuotas de mantenimiento mensuales pactada en el contrato sea convencional o direccionado. En ese caso, se le reembolsará al Usuario hasta el 80% (ochenta por ciento) del importe pagado como cuota de inscripción. \\nNo se hará devolución alguna sobre cuotas de mantenimiento pagadas.

    \\nNo obstante lo anterior, en el evento en que la celebración del presente contrato sea resultado de un proceso de reactivación, para el caso de que exista una cancelación por parte del Usuario a la inscripción en un lapso menor a 3 (TRES) meses contados a partir de la reactivación, existiendo a esa fecha, algún incumplimiento de pago por parte del Usuario con respecto a Urban Fitness, el Usuario perderá su derecho a cualquier cuota promocional aunado a que, el Usuario: (a) deberá cubrir en esa fecha o en la que así sea requerido, cualquier adeudo que exista a favor de Urban Fitness. En caso contrario, se generarán los recargos que en su caso correspondan hasta la fecha del pago total del adeudo; y (b) el Usuario no será acreedor para efectos de recibir reembolso o devolución de pago alguno que en su momento haya realizado a favor de Urban Fitness. Lo anterior, sin importar la fecha en que se haya celebrado el contrato correspondiente a la inscripción en cuestión.\\n

    \\nDÉCIMA QUINTA. CIERRE DE INSTALACIONES. El Usuario reconoce que los días 1° de enero 24, 25 y 31 de diciembre, Urban Fitness no dará servicio permaneciendo sus instalaciones cerradas. Así mismo, el Usuario reconoce y acepta que Urban Fitness puede modificar sus horarios de operación o cerrar sus instalaciones, por \\ncausas de fuerza mayor\\n o, en su caso, por eventos organizados a favor de los usuarios o del staff de Urban Fitness. Dichos cierres de instalaciones serán informados a los Usuarios atendiendo a los medios físicos o tecnológicos disponibles; en la inteligencia de que, los cierres de instalaciones por causas de fuerza mayor no generan responsabilidad alguna a cargo de Urban Fitness.\\n

    \\nDÉCIMA SEXTA. ANEXOS. La carátula y cualesquier documentos adjuntos al presente Contrato son parte integral del presente Contrato, tal y como si estuviesen aquí reproducidos, y se considerará que toda referencia que se haga al presente Contrato incluye dichos documentos.\\n

    \\nDÉCIMA SÉPTIMA. MODIFICACIONES. Salvo por los ajustes a las cuotas de mantenimiento y otros ajustes de precios que Urban Fitness notifique al Usuario mediante comunicados que serán colocados en los pizarrones de avisos que se encuentran en diversas áreas del gimnasio, este Contrato únicamente podrá ser modificado o reformado por medio de un acuerdo por escrito firmado por las partes de este.\\n

    \\nDÉCIMA OCTAVA. EFECTO OBLIGATORIO. El presente Contrato y los documentos e instrumentos que sean celebrados conforme al mismo, constituyen el acuerdo total de las partes, y deroga cualesquier negociaciones, convenios, acuerdos y compromisos anteriores (orales o escritos) en relación con la materia del presente.\\n

    \\nDÉCIMA NOVENA. LEGISLACIÓN APLICABLE Y JURISDICCIÓN. El presente Contrato será regido e interpretado de acuerdo con las leyes \\nfederales\\n de los Estados Unidos Mexicanos. Para todo lo relacionado con la interpretación, cumplimiento y exigibilidad del presente Contrato, las partes convienen en someterse a la jurisdicción de los tribunales de Ciudad Obregón, Sonora y renuncian expresamente a cualquier otro fuero que pudiere corresponderles debido a sus actuales o futuros domicilios, por la ubicación de sus activos o por cualquier otra causa.\\n

    \\nVIGÉSIMA. PROTECCIÓN DE DATOS PERSONALES. Con motivo del objeto del presente Contrato, Urban Fitness recabará diversos datos personales del USUARIO, los cuales serán tratados de conformidad con lo dispuesto en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, su Reglamento y demás disposiciones aplicables. Por su parte, el titular de la inscripción reconoce que previamente a proporcionarle sus datos personales a Urban Fitness, este último le puso a su disposición el correspondiente aviso de privacidad de forma personal, habiéndolo leído, comprendido y consentido, mismo que puede consultarse en la página de FACEBOOK: urban fitness obregón e INSTAGRAM: urbanfitness.mx; ratificando en este acto su consentimiento expreso y por escrito al referido aviso de privacidad, En caso de que el titular de la membresía registre un menor de edad estará obligado que el aviso de privacidad haya sido previamente consentido por quien ejerza sobre el menor la patria potestad o tutela. El incumplimiento de la presente cláusula por parte del titular de la inscripción, será motivo de rescisión de Contrato sin responsabilidad para Urban Fitness, independientemente de la obligación del titular de la inscripción de sacar en paz y a salvo a Urban Fitness de cualquier demanda, denuncia, reclamación o procedimiento, interpuesto en su contra por cualquier tercero ante el Instituto Nacional de Transparencia, Acceso a la Información y Protección de Datos Personales y/o cualquier otra autoridad, obligándose asimismo a indemnizar a Urban Fitness por los daños y perjuicios que le llegare a ocasionar por este concepto.\\n

    \\nEste Contrato es celebrado en dos ejemplares, quedando uno en poder de cada parte y cada uno de los cuales se considera como un original, pero juntos constituyen uno y el mismo contrato. En vista de lo estipulado anteriormente, las partes celebran el presente Contrato el {{vm.data.initPayDate | date: \\'dd\\'}} de {{vm.data.initPayDate | date: \\'MMMM\\'}} {{vm.data.initPayDate | date: \\'yyyy\\'}}.\\n

    \\n
    \\nUrban Fitness\\nEl USUARIO

    Por: Gabriela Marquez Sabag

    Firmar{{vm.data.partnerName}}\\n























    \\n




























    \\n
    Reglamento

    \\nURBAN FITNESS

    USUARIOS E INSCRIPCIONES:

    1)\\n\\n El presente reglamento es de aplicación para todo el usuario del Gimnasio, así mismo todos los usuarios e invitados estarán obligados a cumplir con los reglamentos internos o de área, así como cualquier disposición operativa o administrativa y las políticas que en su momento se pudieran emitir.\\n

    2) Los tipos de inscripciones que se pueden contratar son las siguientes:

    \\n
    Inscripción Individual:\\n Integrada exclusivamente por un integrante que deberá ser mayor de edad. En caso que este sea menor de edad, es necesario que la inscripción esté direccionada a tarjeta de crédito o débito de un mayor. (Padre, madre o tutor) y deberá firmar una carta responsiva.\\n

    3)\\n El dueño de la inscripción tendrá que ser mayor de 18 años y tendrá la obligación de proporcionar la información verídica solicitada al momento de realizar la compra de la misma.\\n

    4)\\n El usuario podrá hacer uso de las instalaciones a partir del momento que ha realizado su pago, es decir, asista o no, el pago cubre a partir del mes corriente. En caso que el usuario eligiera hacer uso posteriormente de las instalaciones deberá tener autorización por parte de la gerencia general, y esta no podrá exceder más de 2 meses después de realizada la compra.\\n

    5) El gimnasio se reserva el derecho de rechazar cualquier solicitud de inscripción.\\n

    6)\\n La documentación que todos los usuarios de las nuevas inscripciones deberán proporcionar al adquirir su inscripción será la siguiente:\\n

    Inscripción individual, tercera edad, all incluisve.-\\n Copia fotostática de identificación oficial (acta de nacimiento, credencial del INE, pasaporte, cédula profesional o licencia de manejo)\\n

    Inscripción Empresarial.-\\n Identificación Oficial y Gafete que lo identifique como empleado de la empresa con la que se tiene el convenio.
    \\n
    Inscripción Escuela.-\\n Identificación Oficial y Credencial vigente de la escuela, tira de materias o un comprobante que acredite ser estudiante de la escuela que se realizó dicho convenio\\n

    Nota:\\n En caso de no entregar estos documentos en un lapso de 10 días, la Gerencia General quedará facultada para restringir al acceso de todos los usuarios de la inscripción.\\n

    CUOTAS.

    7)\\n Todos los usuarios antes descritos pagarán una cuota que deberá realizarse conforme se estipulo en la caratula del contrato misma que deberá ser en una sola exhibición y que se define como cuota de mantenimiento.\\n

    8)\\n Las formas para realizar los pagos de las cuotas de mantenimiento de manera mensual son:

    \\nCargo Mensual Direccionado.\\n Es la cuota vigente que se cobra de manera automática por el gimnasio y puede ser cargada a una tarjeta de crédito o débito o bien a una cuenta a través de la CLABE interbancaria. El usuario reconoce que el cargo mensual direccionado a tarjeta de crédito, tiene cuotas preferenciales sobre la tarjeta de débito, cuenta bancaria a través de la CLABE y convencional. En caso de que el usuario desee cancelar su inscripción o desee transformar la forma de pago de su cuota a cargo convencional, deberá acudir a la recepción del gimnasio para realizar los trámites correspondientes antes del día 25 de cada mes.\\n

    Cargo Mensual Convencional.\\n Es la cuota vigente que se cobra mediante el pago del Usuario en caja y puede ser efectivo o tarjeta de crédito o débito. En caso de que el Usuario desee cancelar su inscripción o desee autorizar el cargo mensual direccionado, éste deberá acudir a la recepción del gimnasio para realizar los trámites correspondientes antes del día 25 de cada mes.\\n

    9)\\n En caso de que el Usuario, haya elegido el pago de la cuota de mantenimiento mediante cargo direccionado, expresamente autoriza al gimnasio para que automáticamente y sin necesidad de alguna otra autorización, cargue mensualmente la cuota vigente a cuenta de la tarjeta de crédito mencionada en dicha carátula.\\n

    \\nEl Usuario autoriza que el gimnasio realice el cargo de la cuota de mantenimiento direccionado a partir del primer (1) día hábil de cada mes. Si por insuficiencia de fondos o crédito imputables al Usuario no se puede realizar el cargo en dicho plazo, el Usuario autoriza a gimnasio a realizar el cargo de dicha cuota de mantenimiento más los intereses moratorios en los días que restan del mes corriente.\\n

    \\nEn caso de que gimnasio no pueda realizar dicho cargo en repetidas ocasiones, por causas ajenas a gimnasio, no se le respetará al Usuario la cuota de mantenimiento direccionada y se le cobrará la cuota de mantenimiento convencional.\\n

    10)\\n Para direccionar los cargos de mantenimiento es necesario realizar el trámite por escrito en el área de recepción por el titular de la tarjeta, proporcionando la información que resulte necesaria. El usuario no podrá determinar la fecha en que se realice su cargo a la tarjeta de crédito o débito; debido a que se realizan envíos previamente determinados.\\n

    11)\\n Las inscripciones pueden realizar el pago de mantenimiento trimestre, semestre y anual. En este caso no se podrá solicitar la devolución sobre la cantidad pagada, ni total o parcial, toda vez que está adquiriendo una cuota preferencial que tiene dicha restricción, El Gimnasio podrá recorrer hasta un 50% del tiempo que reste por utilizar de dicho pago; siempre y cuando, el Usuario lo notifique con anticipación y dentro de los días del 1 al 25 de cada mes, para que se aplique para el siguiente mes. Este trámite se realiza en la recepción del gimnasio y de forma presencial.\\n

    12)\\n Durante el mes de diciembre la Administración publicará las nuevas cuotas que estarán vigentes a partir del mes de diciembre.\\n

    13)\\n La Administración cuenta con facultades para realizar los incrementos que considere pertinentes para el buen funcionamiento de Gimnasio.\\n

    14)\\n El Usuario deberá pagar las cuotas de mantenimiento con base a la forma elegida, en caso contrario se cobrará un interés moratorio que será del 5% mensual, siendo facultad de la Administración el modificar este porcentaje en cualquier momento.\\n

    15)\\n El pago de las cuotas de mantenimiento de una inscripción deberán de realizarse en una exhibición, quedando prohibido los pagos parciales así como el pago de la cuota de mantenimiento de la misma inscripción en dos o más tarjetas de crédito.\\n

    16)\\n Para solicitar un comprobante fiscal o factura de servicios distintos al pago de mantenimiento e inscripción, entre otros, el usuario deberá de solicitar su comprobante fiscal al momento de realizar su pago, de no hacerlo la empresa estará imposibilitada para emitirlo con posterioridad.\\n

    17)\\n Para solicitar un cambio de factura o comprobante fiscal del pago de mantenimiento o inscripción, esta deberá de ser dentro del mismo mes en que la misma fue expedida.\\n

    18)\\n Todos los pagos de cualquier servicio que ofrece el gimnasio deberán ser realizados en la caja del gimnasio.

    \\n
    19)\\n En caso de una inscripción nueva, ésta deberá de cubrir la cuota de mantenimiento proporcional según el día en que se realice la misma: durante los primeros 6 días del mes deberá cubrir la cuota de mantenimiento completa, a partir del día 7 pagará la proporción que resulte de dividir el monto total de la cuota de mantenimiento entre el número de días del mes en cuestión, por el número de días vigentes o a correr del mes. Si la inscripción es adquirida después del día 24, es decir a partir del día 25 del mes, el mantenimiento correspondiente a estos últimos días será de cortesía. El usuario tiene la opción de realizar este cargo con cuota direccionada, siempre y cuando haya realizado ya el trámite para direccionar sus futuros pagos de mantenimiento.\\n

    20)\\n La Administración está facultada para negar el acceso al usuario de la inscripción en caso de que presente un adeudo de la cuota de mantenimiento o algún otro adeudo, tomándose esta medida según la opción de pago que haya elegido:\\n

    Pago de mantenimiento mensual direccionado.\\n Se negará el acceso a partir del día 4 del mes corriente que no se haya pagado. Es decir; si hoy es 4 de marzo y no ha sido cubierta la cuota de mantenimiento del mes de marzo, la Administración estará facultada para negar el acceso hasta recibir el pago de dicho mes.\\n

    Pago de mantenimiento mensual convencional.\\n Se negará el acceso a partir del día del mes corriente, es decir, si hoy es día 1 de febrero y no ha sido cubierta la cuota de mantenimiento del mes de febrero, la administración estará facultada para negar el acceso hasta recibir el pago correspondiente.\\n

    CARTA DE AUSENCIA

    \\nEn caso de que todos los integrantes de la inscripción requieran ausentarse por un lapso mínimo de 1 mes, se podrá solicitar la cuota de ausencia. El trámite debe realizarlo el titular de la inscripción en la Recepción del gimnasio llenando el formato pertinente. La inscripción deberá estar al corriente en sus cuotas de mantenimiento, debiendo. Esta cuota aplicará al mes siguiente de haber realizado el trámite, aplicando la cuota de ausencia vigente. Este trámite se deberá hacer antes del día 25 de cada mes.\\n

    21)\\n La administración no se hace responsable por situaciones o acontecimientos sociales, desastres naturales, contingencia ambiental, sanitaria o cualquier otro incidente fuera de nuestra responsabilidad, que afecte la operación regular de nuestro gimnasio, y nos impida ofrecer nuestros servicios, parcial o totalmente, deslindándonos de cualquier tipo de devolución, compensación, reposición o bonificación en pagos de mantenimiento, inscripción y servicios.\\n

    USO DE LAS INSTALACIONES.

    22)\\n La Administración está facultada para hacer cambios en el horario de operación del Gimnasio con previo aviso a los usuarios mediante comunicados que serán colocados en los pizarrones informativos que se encuentran en diversas áreas del gimnasio.\\n

    23)\\n Para efectos de días festivos o días especiales, El gimnasio notificará de forma anticipada a los usuarios el horario del gimnasio por medio de comunicados en los pizarrones de avisos.\\n

    24) Los días 1ro de enero, 24, 25, 30 y 31 de diciembre\\n el gimnasio no dará servicio permaneciendo sus instalaciones cerradas.

    25)\\n Los servicios de regaderas permanecerán abiertos desde la apertura del gimnasio hasta 15 minutos antes del cierre del mismo.\\n

    26)\\n El uso de la huella y contraseña es personal, el mal uso de éstos será sancionado por la Administración hasta con la expulsión definitiva del gimnasio.\\n

    27)\\n La Administración podrá disponer de las diversas instalaciones y/o servicios del gimnasio brinda, en el momento y tiempo necesario para mantenimiento u otros eventos relacionados con la operación del gimnasio.\\n

    28)\\n Todos los integrantes de las inscripciones y que sean mayores de 13 años de edad tendrán derecho a la realización de la valoración física sin costo alguno, para obtener dicho beneficio los usuarios nuevos deberán tramitar su cita en el área de recepción de AF, así como para las revaloraciones En caso de que un usuario no asista o cancele su cita en dos ocasiones, dicho servicio tendrá un costo, el cual será determinado por la Administración.\\n

    29)\\n Para cancelar la inscripción definitivamente, es necesario realizar el trámite como fecha límite hasta el día 25 de cada mes en el área de recepción por el titular de la inscripción, siendo requisito indispensable no presentar ningún tipo de adeudo, en caso de contar con mantenimiento direccionado traer la tarjeta a la cual se realizan los cargos para realizar la cancelación de los mismos. Dicho movimiento aplicará al mes siguiente, este trámite se debe realizar antes del día 25 del mes anterior a la cancelación de la Inscripción (citando como ejemplo que si la cancelación se solicita sea efectiva para el mes de octubre el trámite se debe de realizar durante el mes de septiembre).\\n

    30)\\n Para realizar el alta de un usuario se debe llenar el formato respectivo en el área de Recepción por parte del titular de la inscripción. Este trámite puede realizarse cualquier día del mes siempre y cuando la inscripción esté al corriente en sus cuotas de mantenimiento e inscripción y deberá cubrir la parte proporcional de la cuota de mantenimiento del nuevo integrante, los siguientes pagos de mantenimiento se realizarán en una sola exhibición.\\n

    \\nDentro de los siguientes 10 días hábiles el nuevo usuario deberá de entregar su documentación completa, además de realizarse la valoración física en caso de ser mayor de 13 años. En caso de mantenimiento direccionado, se deberá traer la tarjeta a la cual se realiza el cargo direccionado mensual.\\n

    31)\\n Los usuarios podrán tener invitados que hagan uso de las instalaciones de todo el gimnasio siempre y cuando paguen la cuota que determine la Administración y estén acompañados en todo momento por la cual se registra el invitado. El titular de la inscripción se hace responsable por el buen comportamiento de su(s) invitado(s), así como cubrir los daños y consumos que hagan. El gimnasio se reserva el derecho de negar el acceso a cualquier invitado.\\n

    \\nEn el caso de acompañantes deberán de dejar una identificación oficial en la recepción donde le entregara una credencial para su control. A su salida entregara la credencial y no deberá tener daños ya que de presentarlos cubrirá el importe de pase de invitado determinado por la Administración.\\n

    32)\\n El gimnasio se reserva el derecho de negar el acceso al usuario que se presente en estado de ebriedad, con aliento alcohólico o bajo la influencia de cualquier estupefaciente o psicotrópico, también se le negará el acceso a cualquier persona que represente algún riesgo para el resto de los usuarios o empleados.\\n

    33)\\n Todas las quejas y sugerencias deberán hacerse por escrito dirigidas al gimnasio y se depositarán en el buzón de sugerencias ubicado en la recepción.\\n

    SANCIONES

    34)\\n Cualquier falta al reglamento o comportamiento que altere el orden del gimnasio será sancionada con una amonestación por escrito la cual se integrará al expediente de la Inscripción. Es considerada falta administrativa, a todo lo que ofenda a alguien con algún acto.\\n

    Con base en el reglamento de orden jurídico del Estado de Sonora es considerada \\nfalta que atenta contra las buenas costumbres:

    • Fumar en lugares prohibidos.
    • \\nIngerir bebidas embriagantes.
    • Proferir palabras altisonantes, procaces o cualquier forma de expresión obscena.\\n
    • Ejecutar actos indecorosos o notificantes.
    • \\nPracticar cualquier acto sexual dentro de las instalaciones del gimnasio.

    35)\\n El usuario que acumule un total de 3 amonestaciones causará baja definitiva del gimnasio. Si la falta lo amerita, el usuario podrá ser suspendido temporalmente del gimnasio, sin que esto interfiera con los pagos del mantenimiento mensual.\\n

    36)\\n La Administración tiene la facultad de cancelar definitivamente una inscripción si a su juicio el usuario incurre en alguna falta grave que así lo amerite: destrucción de las instalaciones o equipos, falta de respeto a cualquier integrante del gimnasio, ya sea usuario o empleado, repetidas faltas al reglamento, robo, etc. En dicho caso gimnasio no estará obligado a realizar devolución alguna. En estos casos intervendrá el Comité de Honor y Justicia quién documentará los elementos para la expulsión de los usuarios.\\n

    37)\\n Cualquier daño que se ocasione a las instalaciones o equipos del gimnasio por parte del usuario de la inscripción o invitado será cubierto por el titular de la inscripción.\\n

    38) El no conocer el reglamento, no lo exime de su cumplimiento y acato de este.
    \\n
    GENERALES.

    39)\\n Queda prohibida la venta o promoción de cualquier tipo(s) de artículo(s), evento(s) o rifa(s) sin previa autorización escrita por parte de la Administración.\\n

    40)\\n Se prohíbe convocar a asambleas, realizar mítines, organizar juntas, reunir firmas, volantear información o complots en contra del gimnasio y su personal.\\n

    41)\\n Queda prohibido introducir cualquier tipo de alimentos y bebidas, excepto agua y bebidas hidratantes en envases de plástico.\\n

    42)\\n El Gimnasio no se hace responsable por la pérdida total o parcial de cualquier objeto o valor, tales como celulares, documentos, joyas, dinero, entre otros.\\n

    43)\\n Queda prohibido portar e introducir al gimnasio: bebidas alcohólicas, estupefacientes o cualquier clase de arma o materiales peligrosos que pudieran perjudicar o dañar a los usuarios y personal del gimnasio, así como a las instalaciones del mismo.\\n

    44)\\n Queda prohibido el acceso a las instalaciones de Gimnasio con cualquier clase de animal o mascota.

    \\n45) Queda prohibido el uso de radios o televisores portátiles que no tengan audífonos personales.\\n

    46)\\n Los usuarios no podrán reprender o llamar la atención a ningún empleado del gimnasio, para cualquier queja, ésta deberá de formularse por escrito a la Administración.\\n

    47)\\n No se permite la toma de fotos a instalaciones, usuarios o cualquier persona dentro de las instalaciones, salvo en los eventos previamente programados por la Administración.\\n

    REGLAMENTO DE VESTIDORES.

    \\nAdministración no asume ninguna responsabilidad sobre los objetos de valor (teléfonos celulares, carteras, tarjetas bancarias o comerciales, dinero en efectivo, joyas, relojes, dispositivos de música, juegos electrónicos, agendas, tablets) depositados en los casilleros.\\n

    48) El uso de sandalias es obligatorio en todas las áreas de vestidores.

    \\n49) No se permite el apartado de regaderas.

    50)\\n Las regaderas podrán ser ocupadas, solamente por una persona a la vez.

    51)\\n Por beneficio de TODOS, el uso del agua deberá ser de forma racional.

    52)\\n Cualquier situación imprevista o no contemplada en este reglamento se sujeta a las resoluciones adoptadas por la Gerencia General del gimnasio y deberá ser acatada por todos los usuarios sin excepción.\\n

    REGLAMENTOS DE ÁREA.

    \\nLos reglamentos de área que se señalan a continuación serán aplicables únicamente cuando el gimnasio cuente con las áreas mencionadas.\\n

    REGLAMENTO DE ESTACIONAMIENTO

    \\nEl servicio de estacionamiento, El gimnasio no se hace responsable de ningún tipo de robo, choque o descompostura. Todos los usuarios que deseen utilizar este servicio deberán de respetar los siguientes puntos:\\n

    \\nEl gimnasio no se hace responsable por siniestros ocasionados por terremotos, inundaciones, incendios, robo con violencia, etc.\\n

    • \\nQueda prohibido el estacionarse en los lugares asignados para usuarios con capacidades diferentes.
    • \\nCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General del gimnasio y deberá ser acatada por todos.\\n

    GENERALIDADES.

    • \\nLa Administración establecerá las normas técnicas o deportivas para el mejor aprovechamiento de todas las instalaciones del gimnasio por parte de los usuarios y de sus invitados.\\n
    • \\nTodos los reglamentos son susceptibles de modificaciones o adiciones por parte de la Administración cuando se juzgue que estas reformas resulten convenientes para la mejor operación del gimnasio.\\n
    • \\nEl gimnasio queda facultado para expedir circulares y normas internas que deben ser acatadas por los usuarios e invitados.\\n
    • \\nLa facultad de interpretación de los reglamentos y aplicación de sanciones pertenece exclusivamente a la Administración del gimnasio.\\n
    • \\nLas modificaciones o adiciones que se hagan a las disposiciones reglamentarias serán comunicadas a los usuarios.
    • \\n

    VALORACIÓN FISICA

    \\nSe realizará la valoración física por los asesores deportivos, es necesario que el usuario de primera vez se realice la misma o bien firme la carta de deslinde de responsabilidades, posteriormente quedará a discreción del usuario realizar el seguimiento para conocer los avances obtenidos, siendo este un beneficio para todos nuestros usuarios.\\n

    • \\nLas Citas para valoraciones físicas se deberán agendar en la Recepción de AF. Se podrán cancelar valoraciones vía telefónica, pero no se podrán reagendar por este medio. Será necesario reagendarla en la recepción de AF.\\n
    • \\nLa cita de valoración física tendrá un tiempo de tolerancia de 5 minutos, transcurrido ese tiempo, el usuario tendrá que agendar otra cita.\\n

    REGLAMENTO DE GIMNASIO.

    • \\nTodos los usuarios que realicen su entrenamiento en el gimnasio; deberán de contar con el programa de entrenamiento (rutina). Cualquier situación especial de salud o lesión deberá de ser reportada al personal del área.\\n
    • Será obligatorio el uso de una toalla facial personal, en caso contrario no se permitirá el acceso al área.\\n
    • Después de usar cualquier aparato es obligatorio limpiarlo.
    • \\nPor su seguridad e higiene es obligatorio utilizar la ropa adecuada (conjuntos deportivos de algodón, licra y/o telas sintéticas deportivas), queda estrictamente prohibido hacer ejercicio con ropa de mezclilla, gabardina, etc., zapatos de calle, sandalias y/o cualquier calzado que no sea el adecuado.\\n
    • \\nQueda prohibido introducir todo tipo de alimentos y envases de vidrio, bebidas calientes, en lata o en envases sin tapa para evitar derrames en el área.\\n
    • \\nNo se podrán introducir maletas, back packs y/o bolsas voluminosas al área, que excedan las medidas de 50 x 30 cm.
    • \\n
    • \\nSe prohíbe el uso indebido del equipo o instalaciones del gimnasio; que causen el deterioro destrucción del mismo. En caso de requerir ayuda para el uso de algún aparato o equipo, es obligación de los instructores atenderlo.\\n
    • \\nEs obligatorio que los usuarios regresen a su lugar el equipo (barras, mancuernas y equipo en general) que empleen en la ejecución de su rutina de entrenamiento.\\n
    • Se prohíbe introducir pesas o accesorios de peso libre al área cardiovascular y/o peso integrado.
    • \\nNinguna persona ajena al staff puede ejercer la función como asesor deportivo, el usuario que sea sorprendido realizando cualquier instrucción o asesoría será sancionado.\\n
    • \\nLa edad mínima para ingresar al gimnasio, será de 13 años a Cardiovascular y 15 años al área de peso integrado y libre.\\n
    • No podrán permanecer en el gimnasio las personas o usuarios que no realicen alguna rutina de entrenamiento.\\n
    • \\nEl staff del gimnasio queda facultado para hacer cumplir el reglamento a los usuarios que incurran en conductas incorrectas, reportando a la Gerencia por escrito la falta cometida, anexándose al expediente de la inscripción.\\n
    • \\nEl Gimnasio se reserva el derecho de cambiar los asesores deportivos y los horarios de los mismos cuando así lo requiera el servicio.\\n
    • Todos los usuarios deberán alternar y compartir al hacer uso de los aparatos y equipos.
    • \\nQueda prohibido apartar los aparatos.
    • \\nEn todos los horarios el uso de los equipos cardiovasculares (caminadoras, elípticas, bicicletas y demás) será de 30 minutos máximo.\\n
    • El gimnasio no se hace responsable por objetos olvidados y/o extraviados dentro del área de A.F.
    • \\nLos asesores deportivos del gimnasio tienen prohibido sugerir el uso, compra, venta o aplicación de cualquier tipo de sustancia o complemento alimenticio. En caso de detectar este tipo de anomalía, favor de reportarla a la Gerencia General del GIMNASIO.\\n
    • \\nCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General del Gimnasio, y deberá de ser acatada por todos los usuarios sin excepción.\\n

    REGLAMENTO

    \\nENTRENAMIENTOS PERSONALIZADOS.

    • \\nEl entrenamiento personalizado tienen un costo adicional, el cuál será fijado por la el entrenador personal. El pago se realiza directamente con los Entrenadores personales.\\n
    • URBAN FITNESS se deslinda de cualquier responsabilidad del servicio de Entrenamiento Personal.
    • \\nCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General del gimnasio y deberán de ser acatadas por todos los usuarios.\\n

    REGLAMENTO DE USO DE LOS SALONES PARA CLASES

    • \\nSe deberá utilizar la ropa adecuada para la práctica de esta actividad. Queda prohibido el acceso con zapatos que no sean deportivos.\\n
    • Queda estrictamente prohibido introducir alimentos a los salones.
    • \\nSólo se podrán introducir bebidas en envase plástico con tapa.
    • \\nEl tiempo de tolerancia para entrar a las clases será de 10 minutos, transcurrido ese tiempo no se permitirá el acceso.\\n
    • No está permitido apartar lugares o espacios en cualquiera de las clases impartidas.
    • \\nDespués de cada clase los usuarios deberán abandonar el salón para permitir el acceso del personal de limpieza.
    • \\n
    • \\nEn clases que requieran el uso de equipo, cada persona se hará responsable del uso del mismo y de colocar el equipo en el lugar asignado al término de la clase.\\n
    • \\nLa Administración determinará el cupo de cada clase y no podrá haber más participantes que los designados para cada actividad. El gimnasio se reserva el derecho de cambiar sin previo aviso al profesor, horarios y tipos de clase.\\n
    • El acceso a las clases dirigidas se permitirá a partir de los 13 años de edad.
    • \\nLas Clases dirigidas tendrán una duración de 50 minutos.
    • \\nNo se permitirá permanecer dentro del salón si no hay clase o instructor, (no aplica en el área de bike).
    • \\nEl Gimnasio no se hace responsable por objetos olvidados y/o extraviados dentro de los salones.
    • \\nEl profesor respetará el cupo máximo de cada clase y no podrá haber más participantes que los designados para cada actividad.\\n
    • El Gimnasio se reserva el derecho de cambiar sin previo aviso, al profesor, horario y tipo de clase.
    • \\nCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General del gimnasio y deberá de ser acatada por todos los usuarios sin excepción.\\n

    REGLAMENTO DE STUDIO INDOOR CYCLING.

    \\nPara poder tomar clase de INDOOR CYCLING el usuario deberá de registrarse previa cita y cumplir los siguientes puntos.\\n

    • \\nEl usuario en caso de no pueda asistir a su clase tendrá que cancelar su asistencia con un mínimo de 2 horas antes vía telefónica o presencial.\\n
    • \\nEn caso de que el usuario no cancele su inasistencia y acumule 3 inasistencias sin notificarlo dentro del mismo mes será acreedor a una multa de $100 pesos, que será cobrada en su siguiente mensualidad.\\n
    • El usuario solo tendrá derecho de tomar una clase al día
    • \\nUrban fitness prestara los tenis de indoor cycling bajo disponibilidad de talla y al término de la actividad el usuario entregara los mismos.\\n
    • \\nEn caso de que el usuario haga mal uso de los tenis de indoor cycling tendrá que pagar el valor comercial del mismo.\\n
    • Para generar la reserva de una clase se podrá realizar antes de una hora que inicie la actividad.
    • \\nSe deberá utilizar ropa adecuada para la práctica de esta actividad.
    • \\nQueda estrictamente prohibido introducir alimentos en el STUDIO INDOOR CYCLING.
    • \\nSólo se podrán introducir agua y bebidas hidratantes en envase de plástico con tapa.
    • \\nNo se podrán introducir maletas y/o bolsas voluminosas al salón.
    • \\nEl tiempo de tolerancia para entrar a las clases una vez iniciadas será de 5 minutos, transcurrido ese tiempo no se permitirá el acceso.\\n
    • \\nDespués de cada clase los usuarios deberán abandonar el salón para permitir el acceso del personal de limpieza.
    • \\n
    • El acceso a las clases de STUDIO INDOOR CYCLING se permitirá a partir de los 13 años de edad.
    • \\nCualquier desperfecto o maltrato a las bicicletas será responsabilidad del usuario debiendo cubrir el monto del daño ocasionado.\\n
    • \\nCualquier situación imprevista o no contemplada en este reglamento se sujetará a las resoluciones adoptadas por la Gerencia General del gimnasio, y deberá ser acatada por todos los usuarios sin excepción.\\n





















    CARTA COVID-19

    \\n{{vm.data.initPayDate | date: \\'dd/MM/yyyy\\'}}

    \\nNo. De inscripción {{vm.data.folioMembresia}}

    \\nEl suscrito, en calidad de usuario del Urban Fitness ubicado en calle Hidalgo 920 Col. Centro, Ciudad Obregón Sonora hago constar que entiendo y comprendo que en el gimnasio se cumplen con las medidas de seguridad establecidas por la Secretaría de Salud con motivo del SARS-CoV-2 que provoca Covid-19 y reinicio de actividades.\\n

    \\nEn virtud de lo anterior, entre otras medidas, entiendo y autorizo que antes de ingresar a las instalaciones del gimnasio se realicen monitoreos del estado de salud de mi persona así como de todos y cada uno de los usuarios que están dentro de la inscripción de referencia, incluyendo menores de edad, invitados y/o acompañantes; por lo que con la firma de la presente.\\n

    \\nLo anterior, en el entendido de que, el resultado del monitoreo de salud en cuestión será dado a conocer a la persona objeto del monitoreo, salvo en casos de menores de edad cuyo resultado podrá ser revelado al mayor de edad que lo acompañe. Asimismo, estoy de acuerdo en adoptar, las medidas de seguridad e higiene que así se soliciten al interior del atendiendo para ello a lo así previsto en el reglamento interior del gimnasio y los respectivos comunicados/avisos que eventualmente se coloquen en las instalaciones.\\n

    \\nAunado a lo antes mencionado, hago constar que entiendo y estoy de acuerdo en que, en virtud de la forma en la cual evoluciona la sintomatología y el propio virus que provoca COVID-19, Urban Fitness y/o la entidad operadora del gimnasio; no será ni podrá hacerse responsable de cualquier posible contagio (presumiendo que el mismo no ocurrió dentro del gimnasio, atento a las medidas expuestas).\\n

    \\nAsí mismo, hago constar mi aprobación, para que en caso de presentarse cualquier síntoma que presuma el contagio de COVID-19, será indispensable que la persona en cuestión se abstenga de atender al gimnasio durante el periodo que así indique el médico tratante.\\n

    \\nFinalmente, otorgo mi consentimiento libre, informado, específico y de manera inequívoca, para que mis datos personales, incluyendo mis datos personales sensibles, sean tratados de conformidad con los términos del aviso de privacidad integral anexo al presente documento. Dicho aviso de privacidad se encuentra también disponible en las redes sociales de Facebook: Urban Fitness Obregón e Instagram: urbanfitness.mx. De igual forma. Con relación a los menores de edad, me obligo a que dicho consentimiento sea otorgado por quien ejerce la patria potestad o tutela sobre el menor. En caso de incumplir lo anterior, estoy de acuerdo en responder ilimitadamente por los daños y perjuicios que mi incumplimiento ocasione a Urban Fitness.\\n

    Atentamente

    \\n

    \\n{{vm.data.partnerName}}
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/kardex/kardex.html\",\"
    Imprimir

    \\n{{vm.appData.branch.name}}

    {{vm.appData.settings.address}}

    \\nSOLICITUD UNICA DE CONTRATO DE SERVICIOS


    \\n\\n\\n\\n

    {{vm.partner.completeName}}

    Fecha: {{vm.date | date:\\'yyyy-MM-dd\\'}}
    Tipo de socio:\\n{{vm.partner.due.name}} ({{vm.partner.duePrice.price | currency : \\'$ \\' : 2}})
    Fecha de nacimiento:\\n{{vm.partner.birthdate | date: \\'dd/MM/yyyy\\'}}
    IdMember:\\n{{vm.partner.sequentialNumber}}
    Num Familia:{{vm.partner.sequentialNumber}}
    \\nClave Anterior:0
    Fecha de Ingreso:\\n{{vm.partner.inscriptionDate | date: \\'dd/MM/yyyy\\'}}
    Fecha del Próximo Pago:\\n{{vm.partner.payedDate | date: \\'dd/MM/yyyy\\'}}
    \\nRentable:{{itemRentable.rentable.name}}
    E-mail:{{vm.partner.email}}
    Ocupación:{{vm.partner.profession.name}}
    Convenio:{{itemAgreements.name}}
    Teléfono:{{vm.partner.phone}}
    Teléfono 2:{{vm.partner.phone2}}
    Dirección:\\n{{vm.partner.addresses[0].street}} {{vm.partner.addresses[0].number}} {{vm.partner.addresses[0].interiorNumber}}, {{vm.partner.addresses[0].colony}}, {{vm.partner.addresses[0].city}}, {{vm.partner.addresses[0].state}}, {{vm.partner.addresses[0].zipCode}}\\n
    Domiciliado:{{vm.partner.domiciliado}}
    Monto Domiciliado:\\n{{vm.partner.MontoDomiciliado | currency: \\'$\\' : 2}}
    Vigencia Domiciliado:{{vm.partner.FechaExpiracion | date: \\'dd/MM/yyyy\\'}}
    Periodicidad:{{vm.partner.duePeriodicity.name}}

    (DEPENDIENTES)

    \\n
    \\nNombre{{group.completeName}}
    Fecha de nacimiento\\n{{group.birthdate | date: \\'dd/MM/yyyy\\'}}
    Tipo de socio\\n{{group.due.name}} ({{group.duePrice.price | currency : \\'$ \\' : 2}})
    IDMember\\n{{group.sequentialNumber}}
    E-mail{{group.email}}
    Fecha de inscripción{{group.inscriptionDate | date: \\'dd/MM/yyyy\\'}}
    Teléfono{{group.phone}}
    Teléfono2{{group.phone2}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-TPV/layout.html\",\"
    \\nCorte de Caja por TPV
    \\nPor fecha del {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    Sucursal: {{group.key}}

    TPV: {{tpv.key}}

    \\n
    FacturaFamiliaFecha\\nA quien se le cobroImporteCanceladaForma PagoReferencia
    {{item.invoiceFolio}}{{item.id}}\\n{{item.fecha | date: \\'dd/MM/yyyy\\'}}{{item.namePartner}}\\n{{item.ammount | currency: \\'$\\' : 2}}{{item.cancelado}}{{item.paymentMethod}}{{item.reference}}
    Total\\n
    {{tpv.total | currency: \\'$\\' : 2}}
    Total Sucursal
    \\n{{group.total | currency: \\'$\\' : 2}}
    TOTAL INGRESOA CON TPV:
    {{vm.total | currency: \\'$\\' : 2}}\\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-forma-pago/layout-consolidado.html\",\"
    \\nCORTE POR FORMA DE PAGO (CONSOLIDADO)
    \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},
    \\n

    {{group.key}}

    \\n\\n
    Forma de pagoTotal% Representa de la sucursal% Representa del total
    {{item.paymentMethod | date: \\'dd/MM/yyyy\\'}}{{item.total | currency: \\'$\\' : 2}}\\n{{item.branchPercentage | number: 2}}{{item.totalPercentage | number: 2}}
    {{group.items | sum:\\'total\\' | currency: \\'$\\': 2 }}\\n
    Total: {{vm.reportData.data | sum: \\'total\\' | currency: \\'$ \\': 2 }}
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-forma-pago/layout-desglosado.html\",\"
    \\nCORTE POR FORMA DE PAGO (DESGLOSADO)
    \\n\\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},

    {{group.key}}

    \\n
    No ReciboNo FacturaNo FamiliaSocioA quien se facturoForma de pagoBancoImporteReferenciaUsuario
    \\n{{item.orderFolio}}{{item.invoiceFolio}}\\n{{item.sequentialNumber}}{{item.partnerName}}{{item.InvoiceRazonSocial}}{{item.paymentMethod}}{{item.paymentMethodOption}}{{item.ammount | currency: \\'$\\': 2 }}{{item.reference}}\\n{{item.sellerName}}
    Subtotal por sucursal
    \\nSubtotal: {{group.items | sum: \\'ammount\\' | currency: \\'$\\' : 2}}

    Total general
    \\nTotal: {{ vm.reportData.data | sum: \\'ammount\\' | currency: \\'$\\' : 2}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-cobranza/layout-consolidado.html\",\"
    \\nCORTE DE CAJA (CONSOLIDADO)
    \\nPor fecha del {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}} \\n\\nPor folio del {{vm.reportData.report.parameters[0].value.from}} al {{vm.reportData.report.parameters[0].value.to}}\\n
    Turno: {{vm.reportData.report.parameters[1].value}}
    \\nSucursal(es): {{item.name}},
    Usuario(s): \\n{{item.name}} {{item.fatherLastname}},
    \\n

    {{group.key}}

    \\n
    FechaFactura/ReciboNota de créditoTotal\\n% Representa del total
    \\n{{fecha.key | date: \\'dd/MM/yyyy\\'}}{{fecha.totalFR | currency: \\'$\\' : 2}}{{fecha.totalNC | currency: \\'$\\' : 2}}\\n{{(vm.reportData.report.parameters[6].value.id == 1 ? fecha.totalFR - fecha.totalNC : fecha.totalFR) | currency: \\'$\\' : 2}}\\n{{fecha.branchPercentage | number : 2 }}
    {{group.totalFR | currency: \\'$\\': 2 }}{{group.totalNC | currency: \\'$\\': 2 }}\\n{{(vm.reportData.report.parameters[6].value.id == 1 ? group.totalFR - group.totalNC : group.totalFR) | currency: \\'$\\': 2 }}\\n
    Total: {{vm.group | sum: \\'totalGroup\\' | currency: \\'$ \\': 2 }}
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-cobranza/layout-desglosado.html\",\"
    \\nCORTE DE CAJA (DESGLOSADO)
    \\nPor fecha del {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}} \\n\\nPor folio del {{vm.reportData.report.parameters[0].value.from}} al {{vm.reportData.report.parameters[0].value.to}}\\n
    Turno: {{vm.reportData.report.parameters[1].value}}
    \\nSucursal(es): {{item.name}},
    Usuario(s): \\n{{item.name}} {{item.fatherLastname}},
    \\n

    {{group.key}}

    {{groupType.key}}

    \\n{{subgroup.key | date: \\'dd/MM/yyyy\\'}}

    \\n\\n
    NoFolioHora\\nNo FamiliaA quien se facturoSocioSubtotalDescuentoIVATotalResponsable
    {{item.number}}{{item.folio}}\\n{{item.hora | date: \\'HH:mm\\' }}{{item.sequentialNumber}}{{item.razonSocial}}{{item.partnerName}}{{item.subtotal | currency: \\'$\\': 2 }}\\n{{item.discountAmmount | currency: \\'$\\': 2 }}{{item.iva | currency: \\'$\\': 2 }}{{item.total | currency: \\'$\\': 2 }}{{item.sellerName}}
    Subtotales{{subgroup.items | sum: \\'subtotal\\' | currency: \\'$\\': 2 }}{{subgroup.items | sum: \\'discountAmmount\\' | currency: \\'$\\': 2 }}\\n{{subgroup.items | sum: \\'iva\\' | currency: \\'$\\': 2 }}\\n{{subgroup.items | sum: \\'total\\' | currency: \\'$\\': 2 }}
    Subtotal por metodo
    \\nSubtotal: {{groupType.items | sum: \\'subtotal\\' | currency: \\'$\\': 2 }} \\nDescuento: {{groupType.items | sum: \\'discountAmmount\\' | currency: \\'$\\': 2 }} \\nIVA: {{groupType.items | sum: \\'iva\\' | currency: \\'$\\': 2 }} \\nTotal: {{groupType.items | sum: \\'total\\' | currency: \\'$\\': 2 }}

    Total general
    \\nSubtotal: {{ vm.subtotal | currency: \\'$\\' : 2}} \\nDescuento: {{ vm.discountAmmount | currency: \\'$\\' : 2}} IVA: {{ vm.iva | currency: \\'$\\' : 2}}\\n Total: {{ vm.total | currency: \\'$\\' : 2}}
    SucursalRecibosFacturasNotas de créditoTotal
    {{item.branch}}\\n{{item.receiptTotal | currency: \\'$\\': 2}}{{item.invoiceTotal | currency: \\'$\\': 2}}\\n{{item.ncTotal | currency: \\'$\\': 2}}\\n{{(item.receiptTotal + item.invoiceTotal - (vm.reportData.report.parameters[6].value.id == 1 ? item.ncTotal : 0)) | currency: \\'$\\': 2}}\\n
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-products/layout-consolidado.html\",\"
    \\nCORTE POR PRODUCTO (CONSOLIDADO)
    \\n\\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},
    Producto(s): {{item.name}},
    \\n

    {{group.key}}

    ProductoCantidadTotal
    {{item.productName}}{{item.quantity}}{{item.total | currency: \\'$\\' : 2}}
    Subtotal por Sucursal\\n\\n{{group.items | sum:\\'total\\' | currency: \\'$\\': 2 }}
    Total: {{vm.reportData.data | sum: \\'total\\' | currency: \\'$ \\': 2 }}\\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-products/layout-desglosado.html\",\"
    \\nCORTE POR PRODUCTO (DESGLOSADO)
    \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},
    Producto(s): {{item.name}},

    {{group.key}}

    No FamiliaNombreTipoMontoResponsable
    {{item.sequentialNumber}}{{item.partnerName}}{{item.partnerType}}{{item.total | currency: \\'$\\': 2 }}\\n{{item.sellerName}}
    Subtotal por producto
    \\n{{group.items | sum: \\'total\\' | currency: \\'$\\' : 2}}

    Total general
    \\n{{ vm.reportData.data | sum: \\'total\\' | currency: \\'$\\' : 2}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/corte-notas-credito/layout.html\",\"
    \\nNOTAS DE CREDITO
    \\n\\nPor fecha del {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    Sucursal: {{group.key}}

    Fecha\\nFolio De La Nota De CréditoFolio De La Factura De La Que ProvieneFecha De La Factura OrigenEs Por El TotalTotal Monto De Factura OrigenNombreConceptoTotales
    {{item.fechaNC | date: \\'dd/MM/yyyy\\'}}{{item.folioNC}}{{item.folioFactura}}\\n{{item.fechaFac | date: \\'dd/MM/yyyy\\'}}{{item.esTotal}}\\n{{item.total | currency: \\'$\\' : 2}}{{item.namePartner}}\\n{{item.notes}}{{item.ncTotal | currency: \\'$\\' : 2}}
    \\n\\nTotal{{group.total | currency: \\'$\\' : 2}}
    \\n
    \\nNo. de notas de credito en el periodo sucrusal{{group.totalItems}}
    Total
    Notas de crédito aplicadas en su totalidad sucursal{{group.totalItemsNoParciales}}\\n{{group.noParciales | currency: \\'$\\' : 2}}
    Notas de crédito parciales sucursal\\n{{group.totalItemsParciales}}{{group.parciales | currency: \\'$\\' : 2}}



    \\n\\n
    No. de notas de credito en el periodo\\n{{vm.totalItems}}{{vm.total | currency: \\'$\\' : 2}}
    Notas de crédito aplicadas en su totalidad\\n{{vm.totalItemsNoParciales}}{{vm.noParciales | currency: \\'$\\' : 2}}
    \\nNotas de crédito parciales{{vm.totalItemsParciales}}{{vm.parciales | currency: \\'$\\' : 2}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/cortes-caja/document-cancel/layout.html\",\"
    \\nDocumentos Cancelados
    \\nPor fecha del {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    Sucursal: {{group.key}}

    {{orderType.key}}S

    \\n
    {{orderType.key}}Fecha DoctoFecha CancelaciónFamiliaRazón Social\\nImporteIvaTotalNO FACTURA ORIGENUUIDGLOBALMONTO FACT GLOBAL\\n
    {{item.folio}}{{item.fecha | date: \\'dd/MM/yyyy\\'}}\\n{{item.insertDate | date: \\'dd/MM/yyyy\\'}}{{item.sequentialNumber}}{{item.partnerName}}{{item.importe | currency: \\'$\\' : 2}}{{item.iva | currency: \\'$\\' : 2}}{{item.total | currency: \\'$\\' : 2}}\\n{{item.facturaOrigen}}{{item.uuids}}{{item.global}}\\n{{item.montoGlobal | currency: \\'$\\' : 2}}
    TOTALES{{orderType.ImporteTotal | currency: \\'$\\' : 2}}\\n{{orderType.IvaTotal | currency: \\'$\\' : 2}}\\n{{orderType.TotalTotal | currency: \\'$\\' : 2}}
    \\n
    \\n\\n
    TOTALES SUCURSAL
    \\n{{orderType.key}}S Cancelados{{orderType.TotalTotal | currency: \\'$\\' : 2}}
    TOTAL SUCURSAL{{group.TotalTotal | currency: \\'$\\' : 2}}
    TOTAL:
    \\n{{vm.TotalTotal | currency: \\'$\\' : 2}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/exports/generalIntelisis/layout.html\",\"
    \\nREPORTE DE EXPORTACION GENERAL INTELISIS
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/exports/general/layout.html\",\"
    \\nREPORTE DE EXPORTACION GENERAL
    \");\n$templateCache.put(\"app/main/reports/views/reports/exports/generalIntelisisRecip/layout.html\",\"
    \\nREPORTE DE EXPORTACION GENERAL INTELISIS RECIBOS
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/prospectos/general/layout.html\",\"
    PROSPECTOS\\n
    \\nDel {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},

    Sucursal: {{group.key}}

    Vendedor: {{sellerGroup.key}}

    FechaNombre prospecto\\nTeléfonoMedio por el que se enteroE-mailInscritoHizo cita
    {{item.insertDate | date: \\'dd/MM/yyyy\\'}}{{item.nombreProspecto}}{{item.phone}}\\n{{item.medio}}{{item.email}}{{item.inscrito}}{{item.cita}}
    \\n\\n\\n
    VendedorInscritosNo inscritosTotal
    {{sellerGroup.key}}{{sellerGroup.totalInscritos}}{{sellerGroup.totalNoInscritos}}{{sellerGroup.items.length}}
    Total sucursal\\n{{group.sellerGroup | sum: \\'totalInscritos\\'}}\\n{{group.sellerGroup | sum: \\'totalNoInscritos\\'}}{{group.items.length}}
    \\n
    Sucursal\\nInscritosNo inscritosTotal
    {{group.key}}\\n{{group.totalInscritos}}{{group.totalNoInscritos}}\\n{{group.items.length}}
    Totales\\n{{vm.groups | sum: \\'totalInscritos\\'}}{{vm.groups | sum: \\'totalNoInscritos\\'}}\\n{{vm.reportData.data.length}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/ingresos/general/layout-consolidado.html\",\"
    \\nINGRESOS GENERALES (CONSOLIDADO)
    \\n\\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},

    Sucursal: {{group.key}}

    Vendedor: {{sellerGroup.key}}

    Tipo de IngresoTotal
    {{item.tipoIngreso}}\\n{{item.total | currency: \\'$\\' : 2}}
    Total por Vendedor{{sellerGroup.total | currency: \\'$\\' : 2}}
    Total por Sucursal
    \\n{{group.total | currency: \\'$\\' : 2}}
    \\nTotal: {{vm.reportData.data | sum: \\'total\\' | currency: \\'$ \\': 2 }}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/ingresos/general/layout-desglosado.html\",\"
    \\nINGRESOS GENERALES
    \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},

    Sucursal: {{group.key}}

    Vendedor: {{sellerGroup.key}}

    \\nTipo ingreso: {{typeIncomeGroup.key}}

    FechaDescripciónSocio\\nNo. FamiliaNo. DocumentoForma de pagoTotal
    {{item.insertDate | date: \\'dd/MM/yyyy\\'}}{{item.descriptionItem}}{{item.partnerName}}{{item.familyId}}{{item.folio}}\\n{{item.namePaymentMethods}}*\\n{{item.total | currency: \\'$\\' : 2}}
    Total por tipo de ingreso{{typeIncomeGroup.total | currency: \\'$\\' : 2}}
    Total por Vendedor
    \\n{{sellerGroup.total | currency: \\'$\\' : 2}}
    Total por Sucursal
    {{group.total | currency: \\'$\\' : 2}}\\n
    \\nTotal: {{vm.reportData.data | sum: \\'total\\' | currency: \\'$ \\': 2 }}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/ingresos/otros/layout.html\",\"
    \\nREPORTE DE OTROS INGRESOS
    \\n
    Fecha\\nCantidadProductoPrecioImporte
    {{item.insertDate | date: \\'dd/MM/yyyy\\'}}{{item.quantity}}{{item.productName}}\\n{{item.price | currency: \\'$\\' : 2}}{{item.total | currency: \\'$\\' : 2}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/servicios/rentables/layout.html\",\"
    RENTABLES\\n

    Sucursal: {{group.key}}

    \\nTipo de Casillero: {{tipoCasillero.key}}

    \\n
    CasilleroUsuario\\nPagado HastaVencidoPeriodicidad
    {{item.casillero}}{{item.namePartner}}{{item.payedDate | date: \\'dd/MM/yyyy\\'}}{{item.vencido}}{{item.periodicidad}}


    \\n
    TOTAL OCUPADOS{{tipoCasillero.ocupados}}
    TOTAL DISPONIBLES{{tipoCasillero.disponibles}}
    TOTAL{{tipoCasillero.total}}
    TOTAL VENCIDOS{{tipoCasillero.vencidos}}
    TOTAL VIGENTES{{tipoCasillero.vigentes}}



    TOTALES

    {{tipoCasilleros.key}}{{tipoCasilleros.ocupados}}
    CASILLEROS DISPONIBLES{{group.disponibles}}
    TOTAL{{group.total}}
    TOTAL VENCIDOS{{group.vencidos}}
    TOTAL VIGENTES{{group.vigentes}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/activos/layout.html\",\"
    \\nREPORTE DE SOCIOS ACTIVOS

    Sucursal: {{group.key}}\\n

    \\n\\n
    Número de membresiaNombre de SocioTipo de membresia\\nRecurrentePeriodicidadFecha de vigencia
    \\n{{item.id}}{{item.namePartner}}{{item.membershipType}}{{item.recurrente}}{{item.periodo}}\\n{{item.fechaVigencia | date: \\'dd/MM/yyyy\\'}}

    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/agesRange/layout-consolidado.html\",\"
    \\nREPORTE DE SOCIOS POR EDAD (CONSOLIDADO)
    Sucursal(es): {{item.name}},
    Rango(s) de edad: {{item.from}}-{{item.to}},

    Sucursal: {{branchGroup.key}}

    GrupoNo Socios
    {{item.ageRange}}{{item.total}}
    Total por Sucursal
    \\n{{branchGroup.items | sum: \\'total\\'}}
    Total
    \\n{{vm.reportData.data | sum: \\'total\\'}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/agesRange/layout-desglosado.html\",\"
    \\nREPORTE DE SOCIOS POR EDAD (DESGLOSADO)
    Sucursal(es): {{item.name}},
    Rango(s) de edad: {{item.from}}-{{item.to}},

    Sucursal: {{branchGroup.key}}

    Socios {{rangeGroup.key}}\\n

    \\n
    No FamiliaNombre de SocioFecha Nacimiento\\nCuota-PeriodicidadEdad
    {{item.sequentialNumber}}{{item.partnerName}}{{item.birthdate | date: \\'dd/MM/yyyy\\'}}\\n{{item.dueName}}-{{item.periodicityName}}{{item.age}}
    Total por Rango de Edad{{rangeGroup.items.length}}
    \\n
    Total por Sucursal\\n
    {{branchGroup.items.length}}

    Total
    \\n{{ vm.reportData.data.length}}
    SucursalRango de Edad\\nNo de Socios
    \\n{{item.branch}}{{item.ageRange}}{{item.count}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/altas/layout.html\",\"
    \\nREPORTE DE SOCIOS POR FECHA DE ALTA

    Sucursal: {{group.key}}\\n

    \\nTipo Membrecia: {{membershipType.key}}

    No. membresiaNombre de Socio\\nTipo de membresiaDomiciliadoPeriodicidadFecha de inscripción
    {{item.id}}\\n{{item.namePartner}}{{item.membershipType}}\\n{{item.domiciliado}}{{item.periodo}}\\n{{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}
    \\n
    Nombre periodoTotal\\n
    {{periodo.key}}\\n{{periodo.total}}
    Total por tipo membrecia{{membershipType.total}}
    \\nTotal domiciliado en sucursal
    {{group.totalDomicialiado}}
    \\nTotal No domiciliado en sucursal
    {{group.totalNoDomicialiado}}
    Total en sucursal\\n
    {{group.total}}


    \\nTotal Domicialidiados
    {{vm.totalDomicialiado}}
    Total No domiciliados
    \\n{{vm.totalNoDomicialiado}}
    Total
    {{vm.total}}

    \\n
    Nombre periodoTotal\\n
    {{periodo.key}}{{periodo.total}}

    Nombre membreciaTotal\\n
    {{membershipType.key}}\\n{{membershipType.total}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/ausencia/layout.html\",\"
    \\nSocios por Ausencia

    Sucursal: {{group.key}}\\n

    \\n
    IdNombre CompletoDescuentoInicio ausenciaFin ausencia
    {{item.id}}{{item.namePartner}}\\n{{item.discountPercentage}}%\\n{{item.dateFrom | date: \\'dd/MM/yyyy\\'}}{{item.dateTo | date: \\'dd/MM/yyyy\\'}}
    Total Sucursal\\n
    {{group.items.length}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/birthdate/layout.html\",\"
    \\nREPORTE DE CUMPLEAÑOS

    \\n{{g.key}} - {{g.items[0].dueName}}

    Años\\n
    No. SocioNombreTipo socioFecha de nacimientoCorreoTelefonoStatus
    {{item.id }}\\n{{item.nammePartner}}{{item.membershipType}}\\n{{item.birthdate | date: \\'dd/MM/yyyy\\'}}{{item.email}}\\n{{item.phone}}{{item.age}}{{item.partnerType}}
    \\nTotal de registros
    {{g.items.length}}

    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/between-dates/layout.html\",\"
    \\nREPORTE DE SOCIOS
    \\nENTRE RANGO DE FECHAS
    Rango: \\nDel {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},
    \\n

    \\n{{dueGroup.key}} {{dueGroup.items.length | number}}

    {{periodicityGroup.key | date: \\'dd/MM/yyyy\\'}} \\n{{ periodicityGroup.items.length | number}}

    \\n{{item.duePeriodicityName}}
    No FamiliaCuota-Periodicidad\\nNombreFecha de pagoNo Inscripción
    {{item.sequentialNumber}}{{item.partnerName}}\\n{{item.payedDate | date: \\'dd/MM/yyyy\\'}}{{item.inscriptionNumber}}

    \\n
    \\n
    CuotaPeriodicidadConteo
    {{item.due}}{{item.periodicity}}{{item.count}}\\n
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/byincscription-date/layout.html\",\"
    \\nSOCIOS POR FECHA DE INSCRIPCIÓN
    \\nDel {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    Sucursal(es): {{item.name}},

    Sucursal: {{group.key}}

    Medio: {{mediaGroup.key}}

    Fecha InscripciónNombre SocioTeléfonoE-mail
    {{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}{{item.nombreProspecto}}{{item.phone}}\\n{{item.email}}


    \\n
    MedioTotal
    {{mediaGroup.key}}{{mediaGroup.items.length}}
    Total de sucursal{{group.items.length}}
    SucursalTotal\\n
    {{group.key}}{{group.items.length}}
    Totales{{vm.reportData.data.length}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/cargoautomatico/layout.html\",\"
    \\nREPORTE DE SOCIOS POR CARGO AUTOMATICO
    Sucursal(es): {{item.name}},
    Rango de fechas: \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    Sucursal: {{branchGroup.key}}

    Forma de pago: {{pmg.key}}\\n

    \\nOpción de Forma de pago: {{pmog.key}}

    Nombre de SocioNúmero de tarjeta\\nValido HastaMontoContrato
    {{item.partnerName}}\\n{{item.cardNumber}}{{item.expirationDate | date : \\'dd/MM/yyyy\\'}}{{item.amount | currency: \\'$\\': 2}}{{item.contractNumber}}
    Total por Opcion de Metodo de Pago{{pmog.items.length}}\\n
    \\nTotal por Metodo de Pago
    {{pmg.items.length}}
    Total por Sucursal
    \\n{{branchGroup.items.length}}

    Total
    {{ vm.reportData.data.length}}
    \\n
    SucursalMetodo de pagoOpcionNo de SociosTotal
    {{item.branch}}\\n{{item.pmName}}{{item.pmoName}}{{item.count}}\\n{{item.total | currency: \\'$\\': 2}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/convenio/layout.html\",\"
    \\nSocios por Convenio

    Sucursal: {{group.key}}\\n

    \\nConvenio: {{agreement.key}}

    \\n\\n
    \\nContadorNúmero de familiaNombre completo
    {{$index + 1}}{{item.familyId}}{{item.partnerName}}
    Total\\n
    {{agreement.items.length}}
    Total Sucursal
    {{group.items.length}}
    \\n
    Nombre convenioTotal
    \\n{{agreement.key}}{{agreement.items.length}}
    TOTAL\\n{{vm.reportData.data.length}}
    \\n\");\n$templateCache.put(\"app/main/reports/views/reports/socios/cargoautomaticobanco/layout.html\",\"
    \\nREPORTE DE SOCIOS POR CARGO AUTOMATICO (BANCO)
    Sucursal(es): {{item.name}},
    Rango de fechas: \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n
    # SocioNúmero de tarjetaMontoEmailContrato
    \\n{{item.id}}{{item.cardNumber}}\\n{{item.amount | currency: \\'$\\': 2}}{{item.email}}\\n{{item.contractNumber}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/general/layout.html\",\"
    \\nREPORTE GENERAL DE SOCIOS

    Sucursal: {{group.key}}\\n

    \\nTipo Membrecia-Periodo: {{orderTypeGroup.key}}

    \\n
    IdNombre de SocioDomiciliadoEstatusInicio de memebresia\\nUltima fecha de pagoFehca de bajaNombre de vendedor
    {{item.id}}{{item.namePartner}}\\n{{item.domiciliado}}{{item.estatus}}\\n{{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}{{item.fechaUltimoPago | date: \\'dd/MM/yyyy\\'}}\\n{{item.lowDate | date: \\'dd/MM/yyyy\\'}}{{item.nombreFronDesk}}\\n
    \\nSub total activo
    {{orderTypeGroup.totalActive}}
    Sub total inactivo
    \\n{{orderTypeGroup.totalInactive}}
    Total por tipo de mantenimiento / Cuotao
    \\n{{orderTypeGroup.total}}
    Sub total activo sucursal
    {{group.totalActive}}
    \\nSub total inactivo sucursal
    {{group.totalInactive}}
    Total por sucursal
    \\n{{group.total}}

    Activo
    {{vm.totalActive}}\\n
    Inactivo
    {{vm.totalInactive}}
    Total
    {{vm.total}}\\n

    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/generalPago/layout.html\",\"
    \\nREPORTE GENERAL DE SOCIOS ULTIMO PAGO
    \\n

    Sucursal: {{group.key}}\\n

    Tipo Membrecia: {{dueName.key}}\\n

    NúmeroNombreTipo de
    Pago
    \\nMonto de
    Cuota
    Tipo de
    Membrecia
    \\nFecha de IngresoEdadGeneroFecha Siguiente
    Pago
    Estatus de
    Pago
    Monto Ultimo
    Pago
    Último Periodo PagadoFecha de
    Baja
    Correo ElectrónicoTeléfono
    {{item.id}}{{item.namePartner}}\\n{{item.periodicitiName}}{{item.price | currency: \\'$\\': 2}}\\n{{dueName.key}}{{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}\\n{{item.age}}{{item.genderName}}\\n{{item.payedDate | date: \\'dd/MM/yyyy\\'}}{{item.statusPartners}}{{item.total | currency: \\'$\\': 2}}{{item.period}}{{item.dischargeDate | date: \\'dd/MM/yyyy\\'}}{{item.email}}{{item.phone}}
    Total vigentes
    {{dueName.vigentes}}
    \\nTotal vencidos
    {{dueName.vencidos}}
    Total por tipo de menbrecia
    \\n{{dueName.total}}
    Total vigentes en sucursal
    {{group.vigentes}}
    \\nTotal vencidos en sucursal
    {{group.vencidos}}
    Total por sucursal
    \\n{{group.total}}



    Vigentes
    {{vm.vigentes}}\\n
    Vencidos
    {{vm.vencidos}}
    Total
    {{vm.total}}\\n
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/cupo/layout.html\",\"
    \\nREPORTE DE CUPO DE SOCIOS
    Sucursal(es): {{item.name}},

    Sucursal: {{branchGroup.key}}

    \\nActividad: {{activityGroup.key}} - Cupo ({{activityGroup.items[0].quota}})

    \\n
    Socio\\nCuota-PeriodicidadFecha de pagoNo de Titular
    {{item.partnerName}}{{item.dueName}}-{{item.periodicityName}}\\n{{item.payedDate | date: \\'dd/MM/yyyy\\'}}{{item.sequentialNumber}}
    Total por Actividad{{activityGroup.items.length}}
    Total por Sucursal
    \\n{{branchGroup.items.length}}

    Total
    {{ vm.reportData.data.length}}
    \\n\\n
    SucursalActividadCupoInscritos
    {{item.branch}}{{item.activity}}{{item.quota}}{{item.count}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/inactivos/layout.html\",\"
    \\nREPORTE DE SOCIOS INACTIVOS
    \\nNúmero de membresiaNombre de SocioTipo de membresiaRecurrentePeriodicidadFecha de vigencia\\n
    {{item.id}}{{item.namePartner}}\\n{{item.membershipType}}{{item.recurrente}}{{item.periodo}}\\n{{item.fechaVigencia | date: \\'dd/MM/yyyy\\'}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/status/layout.html\",\"
    \\nSOCIOS POR ESTATUS DE VIGENCIA
    Fecha de Validación {{vm.reportData.report.parameters[0].value | date: \\'dd/MM/yyyy\\'}}
    Sucursal(es): \\n{{item.name}},

    Sucursal: {{group.key}}\\n

    \\nTipo Membrecia: {{membershipType.key}}

    Periodo de cobro: {{period.key}}

    \\n\\n
    IdSocioTipoDependenciaRecurrente\\nFecha de vigencia
    {{item.id}}{{item.nammePartner}}{{item.partnerType}}{{item.parentPartner}}Si \\nNo{{item.fechaVigencia | date: \\'dd/MM/yyyy\\'}}\\n
    Total de socios por tipo de membrecia y periodo de pago{{period.items.length}}
    Total de socios por tipo de membrecia\\n
    {{membershipType.items.length}}
    Total por Sucursal
    \\n{{group.total}}
    \\n\\n
    SucursalMembreciaPeriodo\\nNo. de Socios
    {{item.branch}}{{item.membershipType}}{{item.period}}{{item.totalPeriod}}
    Socios pago {{periodType.key}} {{item.key}} : {{item.total}}\\n
    \\nTotal de Socios Recurrentes: {{vm.groups | sum: \\'totalRecurrente\\'}}
    Total de Socios No recurrentes: {{vm.groups | sum: \\'totalNoRecurrente\\'}}
    Total de Socios: {{vm.groups | sum: \\'total\\'}}
    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/tipo/layout.html\",\"
    \\nREPORTE CONSOLIDADO POR TIPO DE CUOTA
    \\n

    Sucursal: {{group.key}}\\n

    \\n\\n
    DescripciónHombresMujeresTotal tipo\\nMEN.VENMEN.VIG\\nBI.VENBI.VIGTRI.VENTRI.VIGCUA.VENCUA.VIGSEM.VENSEM.VIGANU.VEN\\nANU.VIGSEMA.VEN\\nSEMA.VIG.VENCVIGE
    {{item.key}}{{item.masculino}}\\n{{item.femenino}}{{item.masculino + item.femenino}}{{item.menVencido}}{{item.menVigente}}\\n{{item.biVencido}}{{item.biVigente}}{{item.triVencido}}{{item.triVigente}}{{item.cuaVencido}}{{item.cuaVigente}}{{item.semVencido}}\\n{{item.semVigente}}{{item.anuVencido}}{{item.anuVigente}}\\n{{item.semanalVencido}}{{item.semanalVigente}}{{item.vencido}}{{item.vigente}}
    \\nTOTALES{{group.masculino}}{{group.femenino}}{{group.masculino + group.femenino}}{{group.menVencido}}{{group.menVigente}}{{group.biVencido}}\\n{{group.biVigente}}{{group.triVencido}}{{group.triVigente}}\\n{{group.cuaVencido}}{{group.cuaVigente}}{{group.semVencido}}{{group.semVigente}}\\n{{group.anuVencido}}{{group.anuVigente}}\\n{{group.semanalVencido}}{{group.semanalVigente}}\\n{{group.vencido}}{{group.vigente}}



    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/invoicesorders/layout.html\",\"
    \\nREPORTE DE FACTURAS Y RECIBOS POR SOCIO

    Rango de fechas: \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    {{g.key}} - {{g.items[0].dueName}}

    Tipo de documento: {{otg.key}}

    Folio: {{folio.key}}

    \\n
    FechaFolioConceptoImporte
    \\n{{item.expeditionDate | date: \\'dd/MM/yyyy\\'}}{{item.folio}}\\n{{item.description}}{{item.total | currency: \\'$\\': 2}}
    Total
    \\n{{otg.items.length}}
    Total
    {{g.items.length}}

    \\n
    TipoNúmeroTotal
    {{item.orderType}}{{item.count}}{{item.total | currency: \\'$\\': 2}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/typeDue/layout.html\",\"
    \\nREPORTE POR TIPO DE CUOTA

    Sucursal: {{group.key}}\\n

    Tipo Periodo: {{due.key}}

    No. Socio\\nNombre CompletoStatusPeriodicidad
    {{item.id }}{{item.partnerName}}\\n{{item.estatus}}{{item.typePeriodo}}
    Total de registros
    \\n{{due.items.length}}
    \\n\\n
    {{typePeriodo.key}}{{typePeriodo.items.length}}

    \\n
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/vendedor/layout.html\",\"
    \\nREPORTE DE SOCIOS POR VENDEDOR
    Sucursal(es): {{item.name}},
    Rango de fechas: \\nDel {{vm.reportData.report.parameters[1].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[1].value.to | date: \\'dd/MM/yyyy\\'}}\\n

    Sucursal: {{branchGroup.key}}

    \\nVendedor: {{sellerGroup.key}}

    \\n\\n
    \\nNombre de SocioTipo de Socio (Cuota)Monto CuotaFecha de Inscripción
    {{item.partnerName}}{{item.dueName}}\\n{{item.price | currency: \\'$\\': 2}}{{item.inscriptionDate | date: \\'dd/MM/yyyy\\'}}
    Total por Vendedor{{sellerGroup.items.length}}
    \\nTotal por Sucursal
    {{branchGroup.items.length}}

    Total
    \\n{{ vm.reportData.data.length}}
    \\n
    SucursalVendedorNo de Socios
    {{item.branch}}\\n{{item.sellerName}}{{item.count}}
    \");\n$templateCache.put(\"app/main/reports/views/reports/socios/vigentes/layout.html\",\"
    \\nREPORTE DE SOCIOS VIGENTES
    \\nPor fecha del {{vm.reportData.report.parameters[0].value.from | date: \\'dd/MM/yyyy\\'}} al {{vm.reportData.report.parameters[0].value.to | date: \\'dd/MM/yyyy\\'}} \\n\\nNo periodos: {{vm.reportData.report.parameters[0].value.periods}}
    \\nStatus: {{vm.reportData.report.parameters[1].value.name}}
    Sucursal(es): {{item.name}},

    {{dueGroup.key}}

    \\n{{periodicityGroup.key | date: \\'dd/MM/yyyy\\'}}

    \\n\\n
    No FamiliaCuota-PeriodicidadNombreFecha de pagoNo InscripciónPeriodosAdeudo
    {{item.sequentialNumber}}{{item.duePeriodicityName}}{{item.partnerName}}\\n{{item.payedDate | date: \\'dd/MM/yyyy\\'}}{{item.inscriptionNumber}}{{item.periodsNumber}}{{item.debitAmount | currency: \\'$ \\': 2 }}
    Adeudo por periodicidad{{periodicityGroup.items | sum: \\'debitAmount\\' | currency: \\'$ \\': 2 }}
    \\n
    Adeudo por cuota
    \\n{{dueGroup.items | sum: \\'debitAmount\\' | currency: \\'$ \\' : 2}}

    \\nAdeudo Total
    {{ vm.reportData.data | sum: \\'debitAmount\\' | currency: \\'$ \\' : 2}}
    \\n
    CuotaPeriodicidadConteo
    {{item.due}}{{item.periodicity}}{{item.count}}\\n
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/prospects/dialogs/dialog-prospect/dialog-prospect.html\",\"
    \\n{{vm.title}}\\nCerrar
    \\n
    Dato obligatorio.
    \\n
    Dato obligatorio.\\n
    \\n
    Dato obligatorio.
    \\n
    \\n
    \\n\\n{{item.name}} {{item.fatherLastname}} {{item.motherLastname}}
    Seleccione Vendedor.\\n
    \\n{{item.name}}\\n
    \\nSeleccione Medio.
    \\n
    \\n
    \\nGuardar Guardando...Cancelar\\n
    \");\n$templateCache.put(\"app/main/catalogs/views/dues/due/dialogs/dialog-prices/dialog-prices.html\",\"
    \\nPRECIOS DE CUOTAS
    \\n
    \\nSeleccione fecha de inicio validez.
    Ingrese interes.
    \\n
    Ingrese días de gracia.
    \\n
    Periodicidades\\nMontosX Clase
    \\n{{item.periodicity.name}}\\n
    GUARDAR
    \");\n$templateCache.put(\"app/main/catalogs/views/rentable-zones/rentable-zone/dialogs/dialog-prices/dialog-prices.html\",\"
    \\nPRECIOS DE RENTABLES
    \\n
    \\nSeleccione fecha de inicio validez.
    Ingrese interes.
    \\n
    Ingrese días de gracia.
    Periodicidades\\nMontosPrecio X día
    {{item.periodicity.name}}
    \\nGUARDAR
    \");\n$templateCache.put(\"app/main/inventory/views/inventories/inventories/dialogs/dialog-inventory/dialog-inventory.html\",\"
    \\nNUEVO INVENTARIOCerrar
    {{option.name}}\\n
    \\nSeleccione producto.
    {{option.name}}\\n
    \\nSeleccione almacen.
    \\nIngrese Interés.
    El campo debe ser numérico.
    Valor incorrecto.
    Ingrese Precio.
    El campo debe ser numérico.
    Valor incorrecto\\n
    Aceptar
    \\nCancelar
    \");\n$templateCache.put(\"app/main/invoices/views/notasCredito/notasCredito/dialogs/dialog-nota-credito/dialog-nota-credito.html\",\"
    NOTA DE CREDITO
    \\n
    \\n\\n\\nBuscar\\n 0\\\">{{opt.folio}}\\n
    \\n
    \\n

    Datos de factura

    \\n
    Fecha:{{vm.item.expeditionDate | date: \\'dd/MM/yyyy HH:mm\\'}}
    Uso del CFDI:\\n{{vm.item.satCfdiUse.name}}
    Cond. de pago:{{vm.item.satPaymentMethod.name}}
    Forma de pago:{{vm.item.satPayment.name}}
    \\n

    Datos de socio

    \\nNo Familia:{{vm.item.partner.sequentialNumber}}
    Nombre:{{vm.item.targetRazonSocial}}\\n
    RFC:{{vm.item.targetRfc}}
    Teléfono:{{vm.item.partner.phone}}
    \\n

    Datos de la Nota de Crédito

    \\n{{opt.name}}{{opt.name}}\\n
    \\n
    Generando... \\nGenerar NCCancelar\\n
    \");\n$templateCache.put(\"app/main/invoices/views/orders/orders/dialogs/dialog-cancel/dialog-cancel.html\",\"
    \\n{{vm.title}}\\nCerrar
    {{item.description}}
    \\nSeleccione Motivo
    \\nIngrese el folio fiscal de la nueva factura
    \\nGENERAR GENERANDO...Cancelar
    \");\n$templateCache.put(\"app/main/invoices/views/orders/orders/dialogs/dialog-invoice/dialog-invoice.html\",\"
    \\n{{vm.title}}\\nCerrar

    Datos de emisor

    \\n

    Datos de receptor

    {{item.name}}
    Seleccione Impuesto del SAT.\\n
    \\n{{item.name}}\\n
    \\nSeleccione Unidad del SAT.

    \\nDatos de Factura

    \\n\\n[{{item.code}}] {{item.description}}
    Seleccione Unidad del SAT.
    \\n
    \\n[{{item.code}}] {{item.description}}
    Seleccione Modena del SAT.
    \\n[{{item.code}}] {{item.description}}
    Seleccione Pago del SAT.\\n
    \\n\\n[{{item.code}}] {{item.description}}\\n
    \\nSeleccione Metodo de Pago del SAT.
    \\n
    Ingrese descripción de pago.

    Conceptos

    \\n\\n
    DescripciónUnidadCantidadP. UnitarioImporteDescuentoSubtotal
    \\n({{item.satProduct.code}}) {{item.satProduct.description}}
    {{item.description}}
    {{item.satUnit.code}}-{{item.satUnit.description}}\\n{{item.quantity}}{{item.unityValue | currency: \\'$\\': 2}}{{item.amount | currency: \\'$\\': 2}}\\n{{item.discount | currency: \\'$\\': 2}}\\n{{item.amount - item.discount | currency: \\'$\\': 2}}
    \\n
    {{vm.invoice.xml}}
    \\n\\n
    Subtotal
    {{ vm.invoice.subtotal | currency : \\'$\\' : 2}}
    Descuento
    \\n{{ vm.invoice.discount | currency : \\'$\\' : 2}}
    Impuestos
    \\n+ {{ vm.invoice.transferedTaxesTotal | currency : \\'$\\' : 2}}
    Total
    \\n{{ vm.invoice.total | currency : \\'$\\' : 2}}
    \\n
    GENERAR GENERANDO...Cancelar
    \");\n$templateCache.put(\"app/main/invoices/views/orders/orders/dialogs/dialog-order/dialog-order.html\",\"
    ORDEN DE VENTA
    \\n

    \\nSocio: ({{vm.order.partnerId}}) {{vm.order.partner.completeName}}

    \\nFecha de creación: {{vm.order.insertDate | date : \\'dd/MM/yyyy HH:mm\\'}}

    \\n
    DescripciónSocioPeriodoP.Unitario\\nCantidadSubtotalDescuentoInteresTotal\\n
    {{item.description}}\\n{{item.partner.completeName}}{{item.endPeriodDate | date: \\'dd/MM/yyyy\\'}}{{item.price | currency: \\'$ \\': 2}}{{item.quantity}}\\n{{item.subtotal | currency: \\'$ \\': 2}}\\n{{item.discountAmmount | currency: \\'$ \\': 2}}\\n{{item.interest | currency: \\'$ \\': 2}}{{item.total | currency: \\'$ \\': 2}}
    \\n\\n\\n
    Subtotal\\n
    {{ vm.order.subtotal | currency : \\'$\\' : 2}}
    Intereses
    {{ vm.order.interests | currency : \\'$\\' : 2}}
    Descuento\\n
    {{ vm.order.discountAmmount | currency : \\'$\\' : 2}}
    Total
    {{ vm.order.total | currency : \\'$\\' : 2}}
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-discount/dialog-discount.html\",\"
    \\nAPLICAR DESCUENTOCerrar
    \\n{{item.name}}\\n
    Ingrese Monto.
    El campo debe ser numérico.
    \\nEl valor no puede ser menor a 0.1
    El monto máximo es incorrecto.
    \\n
    Aceptar
    Cancelar
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-edit/dialog-edit.html\",\"
    \\nEDITAR DETALLECerrar
    \\n
    Ingrese Descripción.
    \\n
    Ingrese Precio.
    El campo debe ser numérico.\\n
    Valor incorrecto
    Valor incorrecto.\\n
    Ingrese Interés.\\n
    El campo debe ser numérico.
    \\nValor incorrecto.
    Valor incorrecto.
    \\n
    Aceptar\\n
    Cancelar
    \\n
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-incompletePeriods/dialog-incompletePeriods.html\",\"
    \\nINGRESA LOS DATOS FALTANTESCerrar
    \\n
    \\n
    SocioPeriodo# Clases Restantes
    {{item.partnerName}} [{{item.due.name}}]\\n{{item.partnerPayedDate | date : \\'dd/MM/yyyy\\'}} - {{item.currentPeriod.endDate | date : \\'dd/MM/yyyy\\'}} ({{item.remainDays}} dias)\\n
    \\n
    AceptarCancelar\\n
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-messages/dialog-messages.html\",\"
    \\nMensajes
      \\n
    • {{partner.completeName}} (TITULAR)
      • {{item.message}}\\n

    Aceptar
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-turns/dialog-turns.html\",\"
    \\nTurnos\\n
    \\n\\n\\n{{item.text}}\\n
    \\n
    ID
    FechaApertura
    Turno
    UsuarioApertura
    FechaCierre
    UsuarioCierre
    Acciones
    \\n{{item.id}}{{item.openDate | date : \\'dd/MM/yyyy HH:mm\\' }}{{item.turnNumber}}\\n{{item.user.name}}{{item.closeDate | date : \\'dd/MM/yyyy HH:mm\\' }}{{item.closeUser.name}}\\nCerrar turno
    \\n
    Abrir turnoCancelar
    \\n
    \");\n$templateCache.put(\"app/main/invoices/views/orders/order/dialogs/dialog-products/dialog-products.html\",\"
    Seleccionar producto
    \\n
    \\n
    \\nCódigo
    Nombre
    Precio
    {{item.product.code}}\\n{{item.product.name}}{{item.price | currency: \\'$ \\': 2}}
    \\n
    \\n
    ACEPTARCancelar
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/info/dialogs/dialog-credential/dialog-credential.html\",\"
    \\nCREDENCIAL\\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/info/dialogs/dialog-messages/dialog-messages.html\",\"
    \\nMensajes de: {{vm.partner.completeName}}
    \\n
    \\n
    \\n
    Mostrar en facturación\\nMostrar en caseta
    Guardar\\nCancelar
    \\n
    \\nNO LeidosLeidosTodos\\n\\nAgregarMarcar como Leido\\nMarcar como NO leido

    \\n
    Fecha/HoraMensajeFact.\\nCaseta
    No hay mensajes registrados
    {{item.insertDate | date : \\'dd/MM/yyyy HH:mm\\'}}{{item.message}}SI NO\\nSI NO\\n
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/info/dialogs/dialog-passes/dialog-passes.html\",\"
    \\nPASES Y CREDENCIALES
    \\n\\n{{item.completeName}}\\nTODOS\\n{{item.name}}\\n
    \\n\\nAgregar pase\\nBorrar pase seleccionado
    PaseFecha altaInicia vigenciaTermina vigenciaNombreSocio\\n
    No hay pases registrados.\\n
    {{item.pass.number}}\\n{{item.insertDate | date : \\'dd/MM/yyyy\\'}}{{item.validFrom | date : \\'dd/MM/yyyy\\'}}\\n{{item.validTo | date : \\'dd/MM/yyyy\\'}}{{item.name}}\\n{{item.partner.completeName}}Mostrar pase
    \\n
    \\n
    Dato obligatorio
    \\n
    \\n
    \\n
    \\nSeleccione fecha
    \\n
    Seleccione fecha
    \\n
    Dato obligatorio\\n
    \\nFormato de email incorrecto
    Enviar por correo electrónico?
    Imprimir?
    \\nGenera cargo
    \\n\\n{{item.product.name}} ({{item.price | currency: \\'$\\': 2}})No se hay resultados.\\n
    \\n{{vm.pass.productPrice | currency: \\'$\\': 2}}
    \\nGuardarCancelar
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-acciones/dialog-acciones.html\",\"
    \\nBuscar Accion\\n
    \\n\\n
    AcciónDueño de la acción
    {{item.number}}-{{item.serie}}{{item.accionista.completeName}}
    \\nAceptar\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-automaticPayment/dialog-automaticPayment.html\",\"
    Cargo Automático : {{vm.partner.completeName}}\\n
    Habilitar Cargo AutomáticoDeshabilitar Cargo Automático\\nObtener datos de titular
    Campo obligatorio.
    Cantidad incorrecta.
    \\n
    Campo obligatorio.\\n
    Campo obligatorio.\\n
    Campo obligatorio.\\n
    \\n{{item.name}}
    Campo obligatorio.
    \\n\\n{{item.name}}
    Campo obligatorio.
    Campo obligatorio.
    \\n
    Campo obligatorio.
    \\nEl número de tarjeta no coincide
    GUARDAR
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-clubAccess/dialog-clubAccess.html\",\"
    \\nAccesos de: {{vm.partner.completeName}}

    {{g.items[0].branch.name}}

    {{access.name}}
    • {{timeZone.name}}
    \\n
    GUARDAR
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-signature/dialog-signature.html\",\"\\n
    Firma
    \\nLimpiarAceptar
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-dues/dialog-dues.html\",\"
    Cuotas : {{vm.partner.completeName}}\\n
    \\nGUARDAR
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/dialogs/dialog-signature-mouse/dialog-signature-mouse.html\",\"
    \\nFirma
    \\n\\nLimpiarAceptar\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-absences/tab-absences.html\",\"
    {{vm.absences.length}} ausencia(s)Agregar ausencia
    ID
    Inicia
    Termina
    % Descuento
    Socio
    Acciones
    {{item.id}}\\n{{item.dateFrom | date: \\'dd/MM/yyyy\\'}}{{item.dateTo | date : \\'dd/MM/yyyy\\' }}\\n{{item.discountPercentage}}\\n{{item.partner.name}} {{item.partner.fatherLastname}} {{item.partner.motherLastname}}Editar\\nBorrar
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-activities/tab-activities.html\",\"
    {{vm.partnerActivities.length}} Actividades(es)\\nAgregar actividad
    Socio/Familiar
    Actividad
    Horario
    Ubicación
    Acciones
    \\n{{item.partner.completeName}}{{item.activityScheduleZone.activitySchedule.activity.name}}\\n{{item.activityScheduleZone.activitySchedule.name}}{{item.activityScheduleZone.zone.name}}Editar\\nBorrar
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-address/tab-address.html\",\"
    {{vm.addresses.length}} direccion(es)Agregar dirección
    ID
    Dirección
    Tipo
    Predet.
    Activo
    Acciones
    \\n{{item.id}}{{item.street}}{{item.addressType.name}}\\n \\nEditarBorrar\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-family/tab-family.html\",\"
    {{vm.family.length}} familiar(es)\\nAgregar familiar
    \\n\\n
    Nombre
    Activo
    Acciones
    \\n{{item.name}} {{item.fatherLastname}} {{item.motherLastname}} \\nEditarAccesos y HorariosBorrar
    \\n
    \\n\\n
    \\n
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-becas/tab-becas.html\",\"
    {{vm.becas.length}} beca(s)Agregar Beca
    Socio
    % Descuento
    Inicia
    Termina
    Acciones
    \\n{{item.partner.name}} {{item.partner.fatherLastname}} {{item.partner.motherLastname}}\\n{{item.beca.discountPercentage}} %{{item.dateFrom | date: \\'dd/MM/yyyy\\'}}\\n{{item.dateTo | date : \\'dd/MM/yyyy\\' }}Editar\\n\\nBorrar
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-invoices/tab-invoices.html\",\"

    No de recibos: {{vm.orders.length}}

    \\n\\n
    \\n\\n
    ID
    Fecha
    Total
    Acciones
    {{item.id}}{{item.insertDate | date: \\'dd/MM/yyyy HH:mm\\'}}\\n{{item.total | currency: \\'$ \\' : 2}}\\nImprimir recibo\\nMostrar
    \\n

    Seleccionados: {{vm.selected.length}}

    Generar Factura
    ID
    Fecha
    RFC
    Total
    Acciones
    \\n{{item.id}}{{item.insertDate | date: \\'dd/MM/yyyy HH:mm\\'}}{{item.rfc}}\\n{{item.total | currency: \\'$ \\' : 2}}\\nRe-Imprimir factura
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-levels/tab-levels.html\",\"
    {{vm.levels.length}} nivel(es)Agregar avance
    \\n
    Socio/Familiar
    Actividad
    Instructor
    Nivel
    No. Evaluación
    Calificación
    Acciones
    \\n{{item.partner.name}} {{item.partner.fatherLastname}} {{item.partner.motherLastname}}{{item.activity.name}}\\n{{item.employee.name}} {{item.employee.fatherLastname}} {{item.employee.motherLastname}}\\n{{item.level.name}}{{item.evaluationYear}} - {{item.evaluation.name}}{{item.levelScore.name}}Editar\\nBorrar
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-otherCharges/tab-otherCharges.html\",\"

    Socio:\\n

    {{partner.completeName}}\\n

    \\nCargos Planificados

    \\n
    Agregar
    \\n
    \\n{{item.product.name}} ({{item.price | currency: \\'$\\': 2}})No se hay resultados.\\n\\n
    \\nSeleccione fecha
    \\nAceptarCancelar\\n
    \\n\\n\\n
    Producto
    Monto
    Vencimiento
    Acciones
    {{item.product.name}} {{item.description}}\\n{{item.price | currency: \\'$ \\': 2}}{{item.expirationDate | date: \\'dd/MM/yyyy\\'}}Borrar cargo
    \\n

    Cargos Periodicos

    \\n
    Agregar
    Cuota\\nProducto\\n
    {{item.name}}\\nNo se hay resultados.\\n\\n{{item.product.name}} ({{item.price | currency: \\'$\\': 2}})No se hay resultados.\\n
    \\n\\n{{ opt.periodicity.name }} ({{opt.price | currency : \\'$ \\' : 2}})
    \\nSeleccione periodicidad
    {{ opt.name }}
    \\nSeleccione periodicidad
    \\n
    Seleccione fecha
    \\n
    \\nSeleccione fecha
    AceptarCancelar
    \\n
    Producto / Cuota
    Periodicidad
    Inicio
    Pagado
    Acciones
    Producto: {{item.product.name}} Cuota: {{item.due.name}}{{item.periodicity.name}}\\n{{item.initPayDate | date: \\'dd/MM/yyyy\\'}}{{item.payedDate | date: \\'dd/MM/yyyy\\'}}EditarBorrar
    \\n
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-pagos/tab-pagos.html\",\"
    \\n

    {{g.key}} - {{g.items[0].dueName}}

    Tipo de documento: {{otg.key}}

    \\n

    Folio: {{folio.key}}

    FechaFolio\\nConceptoImporte
    \\n{{item.expeditionDate | date: \\'dd/MM/yyyy\\'}}{{item.folio}}\\n{{item.description}}{{item.total | currency: \\'$\\': 2}}
    Total
    \\n{{otg.InvoiceGroup.totalFolios}}
    Total
    {{g.totalFolios}}

    \\n
    TipoNúmeroTotal
    {{item.orderType}}{{item.count}}{{item.total | currency: \\'$\\': 2}}
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-pictures/tab-pictures.html\",\"
    FAMILIARES\\n
    \\n
    {{item.name}} {{item.fatherLastname}} {{item.motherLastname}}\\nMostrar

    \\nFotografia de: {{vm.partner.completeName}}

    Subir\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-rentables/tab-rentables.html\",\"
    {{vm.rentables.length}} rentable(s)Asignar Rentable
    Socio/Familiar
    Rentable
    Periodicidad
    Tipo de Facturación
    \\nPeriodo
    Descuento
    Acciones
    \\n{{item.partner.name}} {{item.partner.fatherLastname}} {{item.partner.motherLastname}}\\n{{item.rentable.rentableZone.name}} - {{item.rentable.name}}{{item.periodicity.name}}\\n{{item.calculationMode.name}}{{item.dateFrom | date: \\'dd/MM/yyyy\\'}} - {{item.dateTo | date: \\'dd/MM/yyyy\\'}}\\n- {{item.discountPercentage}} %Mostrar\\n\\nBorrar
    \\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partners/dialogs/dialog-changePayedDates/dialog-changePayedDates.html\",\"
    \\nCAMBIO DE FECHAS\\n
    \\nCuotas
    \\n
    #SocioPagado hasta
    {{item.id}}{{item.completeName}}\\n{{item.payedDate | date : \\'dd/MM/yyyy\\'}}
    \\n
    Seleccione fecha
    Aplicar a toda la familia
    GUARDAR
    \\n
    Rentables
    #RentableSocioPagado hasta
    {{item.id}}\\n{{item.rentable.name}} - {{item.rentable.rentableZone.name}}{{item.partner.completeName}}\\n{{item.payedDate | date : \\'dd/MM/yyyy\\'}}
    \\n
    Seleccione fecha
    Aplicar a todos los rentables
    GUARDAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-absences/dialogs/dialog-absence.html\",\"
    {{vm.title}}
    \\n
    \\n{{p.name}} {{p.fatherLastname}} {{p.motherLastname}}\\n
    \\nSeleccione socio
    Seleccione fecha\\n
    Fecha incorrecta
    \\n
    \\nSeleccione fecha
    Fecha incorrecta
    \\nValor incorrecto
    Valor incorrecto
    \\n\\nGUARDARCANCELAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-activities/dialogs/dialog-activity.html\",\"
    {{vm.title}}
    \\n
    \\n{{p.name}} {{p.fatherLastname}} {{p.motherLastname}}\\n
    \\nSeleccione socio
    {{item.name}}\\n
    \\nSeleccione Actividad
    \\n{{item.name}}
    Seleccione horario
    \\n\\n{{item.zone.name}} ({{item.quota}})\\n
    \\nSeleccione ubicación
    \\nNO HAY CUPO!!!
    GUARDARCANCELAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-address/dialogs/dialog-address.html\",\"
    {{vm.title}}
    \\n
    \\n
    Campo obligatorio.
    \\n
    Campo obligatorio.
    \\n
    \\n
    Campo obligatorio.
    \\n
    Campo obligatorio.
    \\n
    \\n
    Campo obligatorio.
    \\n
    Campo obligatorio.
    \\n\\n
    \\n
    {{item.name}}
    Seleccione Impuesto del SAT.\\n
    \\n{{item.name}}
    Campo obligatorio.
    \\nPredeterminadaActivo
    \\n
    GUARDARCANCELAR
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-family/dialogs/dialog-family.html\",\"
    {{vm.title}}
    \\n
    {{ item.name }}\\n
    \\nSeleccione Tipo de socio.
    Ingrese nombre(s).
    \\n
    \\nIngrese Apellido paterno(s).
    \\n
    Cargo automatico
    {{ item.name }}
    Seleccione País.
    \\n
    {{ item.name }}
    Seleccione Sexo
    \\n
    {{ item.name }}
    Seleccione Profesión.\\n
    \\n
    Seleccione fecha\\n
    Fecha incorrecta
    \\n({{vm.familiar.age}} años)
    \\n
    Ingrese teléfono.
    \\n
    Ingrese Email.
    \\n
    Formato de Email incorrecto.
    {{ item.name }}\\n
    Seleccine cuota.\\n
    {{ item.name }}\\n{{ item.name }}\\n
    \\n{{ item.name }}\\n\\nActivoBloqueadoAutenticación por huella\\n
    GUARDARCANCELAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-becas/dialogs/dialog-beca.html\",\"
    \\n{{vm.title}}\\n
    \\n{{p.name}} {{p.fatherLastname}} {{p.motherLastname}}
    Seleccione socio
    \\n{{b.name}} - {{b.discountPercentage}} %
    \\n
    Seleccione beca
    \\n
    Seleccione fecha\\n
    Fecha incorrecta
    Seleccione fecha
    \\nFecha incorrecta
    GUARDAR\\nCANCELAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-levels/dialogs/dialog-level.html\",\"
    {{vm.title}}
    \\n
    \\n\\n{{p.name}} {{p.fatherLastname}} {{p.motherLastname}}
    Seleccione socio
    \\n
    {{item.name}}\\n
    Seleccione actividad\\n
    {{item.name}} {{item.fatherLastname}} {{item.motherLastname}}\\n
    \\nSeleccione empleado
    Dato obligatorio.
    \\nEl minimo es 1.
    Dato obligatorio.
    Valor incorrecto.
    \\n
    {{item.name}}
    Seleccione nivel.
    \\n
    {{item.year}}
    Obligatiorio.
    \\n{{item.name}}
    Obligatiorio.
    \\n{{item.name}}
    Seleccione calificación.
    \\n
    GUARDARCANCELAR
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-rentables/dialogs/dialog-rentable/dialog-rentable.html\",\"
    \\nSELECCIONAR CASILLERO: {{vm.partner.name}} {{vm.partner.fatherLastname}} {{vm.partner.motherLastname}}\\n
    {{item.name}} {{item.fatherLastname}} {{item.motherLastname}}\\n\\n{{item.name}}{{item.name}}\\n
    Valor de descuento incorrecto\\n
    Valor de descuento incorrecto
    Aplicar descuentoCancelar descuento
    \\n
    \\n
    \\nGUARDARCANCELAR\\n
    \");\n$templateCache.put(\"app/main/partners/views/partners/partner/tabs/tab-rentables/dialogs/dialog-showRentable/dialog-showRentable.html\",\"
    \\nMostrar casillero
    \");}]);"],"sourceRoot":"/source/"}