├── .docker ├── nginx │ ├── Dockerfile │ └── nginx-local.conf └── php │ ├── Dockerfile │ ├── custom.ini │ └── php-xdebug.ini ├── .env.ci ├── .env.dusk.local ├── .env.example ├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ └── phpunit.yml ├── .gitignore ├── .phpunit.result.cache ├── Dockerfile ├── app ├── Api │ └── v1 │ │ └── Controllers │ │ ├── ApiController.php │ │ └── UserController.php ├── Console │ ├── Commands │ │ ├── Inspire.php │ │ └── Test.php │ └── Kernel.php ├── Enums │ ├── AbsenceReason.php │ ├── Country.php │ ├── InvoiceStatus.php │ ├── OfferStatus.php │ └── PaymentSource.php ├── Events │ ├── ClientAction.php │ ├── Event.php │ ├── LeadAction.php │ ├── NewComment.php │ ├── ProjectAction.php │ └── TaskAction.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── AbsenceController.php │ │ ├── AppointmentsController.php │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ ├── AuthRegisterController.php │ │ ├── CallbackController.php │ │ ├── ClientsController.php │ │ ├── CommentController.php │ │ ├── Controller.php │ │ ├── CreditLinesController.php │ │ ├── CreditNoteController.php │ │ ├── DepartmentsController.php │ │ ├── DocumentsController.php │ │ ├── HomeController.php │ │ ├── IntegrationsController.php │ │ ├── InvoiceLinesController.php │ │ ├── InvoicesController.php │ │ ├── LeadsController.php │ │ ├── NotificationsController.php │ │ ├── OffersController.php │ │ ├── PagesController.php │ │ ├── PaymentsController.php │ │ ├── ProductsController.php │ │ ├── ProjectsController.php │ │ ├── RolesController.php │ │ ├── SearchController.php │ │ ├── SettingsController.php │ │ ├── TasksController.php │ │ └── UsersController.php │ ├── Kernel.php │ ├── Middleware │ │ ├── Client │ │ │ ├── CanClientCreate.php │ │ │ └── CanClientUpdate.php │ │ ├── EncryptCookies.php │ │ ├── Lead │ │ │ ├── CanLeadCreate.php │ │ │ ├── CanLeadUpdateStatus.php │ │ │ └── IsLeadAssigned.php │ │ ├── LogLastUserActivity.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── RedirectIfDemo.php │ │ ├── RedirectIfFileSystemIsNotEnabled.php │ │ ├── RedirectIfNotAdmin.php │ │ ├── RedirectIfNotSuperAdmin.php │ │ ├── Task │ │ │ ├── CanTaskCreate.php │ │ │ ├── CanTaskUpdateStatus.php │ │ │ └── IsTaskAssigned.php │ │ ├── Translation.php │ │ ├── User │ │ │ ├── CanUserCreate.php │ │ │ └── CanUserUpdate.php │ │ └── VerifyCsrfToken.php │ ├── Requests │ │ ├── Appointment │ │ │ ├── CreateAppointmentCalendarRequest.php │ │ │ └── UpdateAppointmentCalendarRequest.php │ │ ├── Client │ │ │ ├── StoreClientRequest.php │ │ │ └── UpdateClientRequest.php │ │ ├── Department │ │ │ └── StoreDepartmentRequest.php │ │ ├── Invoice │ │ │ └── AddInvoiceLine.php │ │ ├── Lead │ │ │ ├── StoreLeadRequest.php │ │ │ └── UpdateLeadFollowUpRequest.php │ │ ├── Payment │ │ │ └── PaymentRequest.php │ │ ├── Project │ │ │ └── StoreProjectRequest.php │ │ ├── Request.php │ │ ├── Role │ │ │ └── StoreRoleRequest.php │ │ ├── Setting │ │ │ └── UpdateSettingOverallRequest.php │ │ ├── Task │ │ │ ├── StoreTaskRequest.php │ │ │ └── UpdateTimeTaskRequest.php │ │ └── User │ │ │ ├── StoreUserRequest.php │ │ │ └── UpdateUserRequest.php │ └── ViewComposers │ │ ├── ClientHeaderComposer.php │ │ ├── InvoiceHeaderComposer.php │ │ ├── LeadHeaderComposer.php │ │ ├── ProjectHeaderComposer.php │ │ ├── TaskHeaderComposer.php │ │ └── UserHeaderComposer.php ├── Jobs │ ├── Job.php │ └── ProcessNotifications.php ├── Listeners │ ├── .gitkeep │ ├── ClientActionLog.php │ ├── ClientActionNotify.php │ ├── LeadActionLog.php │ ├── LeadActionNotify.php │ ├── NotiftyMentionedUsers.php │ ├── ProjectActionLog.php │ ├── ProjectActionNotify.php │ ├── TaskActionLog.php │ └── TaskActionNotify.php ├── Models │ ├── Absence.php │ ├── Activity.php │ ├── Appointment.php │ ├── BusinessHour.php │ ├── Client.php │ ├── Comment.php │ ├── Contact.php │ ├── CreditLine.php │ ├── CreditNote.php │ ├── Department.php │ ├── Document.php │ ├── Industry.php │ ├── Integration.php │ ├── Invoice.php │ ├── InvoiceLine.php │ ├── Lead.php │ ├── Mail.php │ ├── Offer.php │ ├── Payment.php │ ├── Permission.php │ ├── PermissionRole.php │ ├── Product.php │ ├── Project.php │ ├── Role.php │ ├── RoleUser.php │ ├── Setting.php │ ├── Status.php │ ├── Task.php │ └── User.php ├── Notifications │ ├── ClientActionNotification.php │ ├── LeadActionNotification.php │ ├── ProjectActionNotification.php │ ├── TaskActionNotification.php │ └── YouWereMentionedNotification.php ├── Observers │ ├── ClientObserver.php │ ├── ElasticSearchObserver.php │ ├── InvoiceObserver.php │ ├── LeadObserver.php │ ├── ProjectObserver.php │ └── TaskObserver.php ├── Policies │ └── .gitkeep ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── RouteServiceProvider.php │ └── ViewComposerServiceProvider.php ├── Repositories │ ├── BillingIntegration │ │ └── BillingIntegrationInterface.php │ ├── Currency │ │ └── Currency.php │ ├── FilesystemIntegration │ │ └── FilesystemIntegration.php │ ├── Format │ │ └── GetDateFormat.php │ ├── Money │ │ ├── Money.php │ │ └── MoneyConverter.php │ ├── Role │ │ ├── RoleRepository.php │ │ └── RoleRepositoryContract.php │ └── Tax │ │ └── Tax.php ├── Services │ ├── Activity │ │ └── ActivityLogger.php │ ├── ClientNumber │ │ ├── ClientNumberConfig.php │ │ ├── ClientNumberService.php │ │ └── ClientNumberValidator.php │ ├── Comment │ │ └── Commentable.php │ ├── Invoice │ │ ├── GenerateInvoiceStatus.php │ │ └── InvoiceCalculator.php │ ├── InvoiceNumber │ │ ├── InvoiceNumberConfig.php │ │ ├── InvoiceNumberService.php │ │ └── InvoiceNumberValidator.php │ ├── Search │ │ └── SearchService.php │ └── Storage │ │ ├── Authentication │ │ ├── DropboxAuthenticator.php │ │ ├── GoogleDriveAuthenticator.php │ │ └── StorageAuthenticatorContract.php │ │ ├── Dropbox.php │ │ ├── GetStorageProvider.php │ │ ├── GoogleDrive.php │ │ └── Local.php ├── Traits │ ├── DeadlineTrait.php │ └── SearchableTrait.php ├── Zizaco │ └── Entrust │ │ ├── Contracts │ │ ├── EntrustPermissionInterface.php │ │ ├── EntrustRoleInterface.php │ │ └── EntrustUserInterface.php │ │ ├── Entrust.php │ │ ├── EntrustFacade.php │ │ ├── EntrustPermission.php │ │ ├── EntrustRole.php │ │ ├── EntrustServiceProvider.php │ │ ├── Middleware │ │ ├── EntrustAbility.php │ │ ├── EntrustPermission.php │ │ └── EntrustRole.php │ │ └── Traits │ │ ├── EntrustPermissionTrait.php │ │ ├── EntrustRoleTrait.php │ │ └── EntrustUserTrait.php └── helpers.php ├── appspec.yml ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── buildspec.yml ├── composer.json ├── composer.lock ├── config ├── app.php ├── auditing.php ├── auth.php ├── broadcasting.php ├── cache.php ├── compile.php ├── database.php ├── datatables.php ├── elasticsearch.php ├── entrust.php ├── filesystems.php ├── hashing.php ├── jwt.php ├── logging.php ├── mail.php ├── notifynder.php ├── purifier.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ ├── AbsenceFactory.php │ ├── AppointmentFactory.php │ ├── BusinessHourFactory.php │ ├── ClientFactory.php │ ├── CommentFactory.php │ ├── ContactFactory.php │ ├── CreditLineFactory.php │ ├── CreditNoteFactory.php │ ├── DepartmentFactory.php │ ├── FilesFactory.php │ ├── InvoiceFactory.php │ ├── InvoiceLineFactory.php │ ├── LeadFactory.php │ ├── MailFactory.php │ ├── OfferFactory.php │ ├── PaymentFactory.php │ ├── ProductFactory.php │ ├── ProjectFactory.php │ ├── RoleFactory.php │ ├── SettingFactory.php │ ├── StatusFactory.php │ ├── TaskFactory.php │ └── UserFactory.php ├── migrations │ ├── .gitkeep │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2015_06_04_124835_create_industries_table.php │ ├── 2015_10_15_143830_create_status_table.php │ ├── 2015_12_28_163028_create_clients_table.php │ ├── 2015_12_29_154026_create_invocies_table.php │ ├── 2015_12_29_204031_projects_table.php │ ├── 2015_12_29_204031_tasks_table.php │ ├── 2016_01_10_204413_create_comments_table.php │ ├── 2016_01_18_113656_create_leads_table.php │ ├── 2016_01_23_144854_settings.php │ ├── 2016_01_26_003903_documents.php │ ├── 2016_01_31_211926_invoice_lines_table.php │ ├── 2016_03_21_171847_create_department_table.php │ ├── 2016_03_21_172416_create_department_user_table.php │ ├── 2016_04_06_230504_integrations.php │ ├── 2016_05_21_205532_create_activities_table.php │ ├── 2016_08_26_205017_entrust_setup_tables.php │ ├── 2016_11_04_200855_create_notifications_table.php │ ├── 2017_10_28_131549_create_contacts_table.php │ ├── 2019_11_29_092917_add_vat_and_currency.php │ ├── 2019_11_29_111929_add_invoice_number_to_invoice.php │ ├── 2019_12_09_201950_create_mails_table.php │ ├── 2019_12_19_200049_add_billing_integration_id_to_invoices.php │ ├── 2020_01_06_203615_create_payments_table.php │ ├── 2020_01_10_120239_create_credit_notes_table.php │ ├── 2020_01_10_121248_create_credit_lines_table.php │ ├── 2020_01_28_195156_add_language_options.php │ ├── 2020_02_20_192015_alter_leads_table_support_qualified.php │ ├── 2020_03_30_163030_create_appointments_table.php │ ├── 2020_04_06_075838_create_business_hours_table.php │ ├── 2020_04_08_070242_create_absences_table.php │ ├── 2020_05_09_113503_add_cascading_for_tables.php │ ├── 2020_09_29_173256_add_soft_delete_to_tables.php │ ├── 2021_01_09_102659_add_cascading_for_appointments.php │ ├── 2021_02_10_153102_create_offers_table.php │ ├── 2021_02_11_161257_alter_invoices_table_add_source.php │ ├── 2021_02_11_162602_create_products_table.php │ ├── 2021_03_02_132033_alter_comments_table_add_long_text.php │ └── 2021_04_15_073908_remove_qualified_from_leads.php └── seeds │ ├── .gitkeep │ ├── ClientsDummyTableSeeder.php │ ├── DatabaseSeeder.php │ ├── DemoTableSeeder.php │ ├── DepartmentsTableSeeder.php │ ├── DummyDatabaseSeeder.php │ ├── IndustriesTableSeeder.php │ ├── LeadsDummyTableSeeder.php │ ├── LeadsTableSeeder.php │ ├── OfferSeeder.php │ ├── PermissionsTableSeeder.php │ ├── ProductSeeder.php │ ├── RolePermissionTableSeeder.php │ ├── RolesTablesSeeder.php │ ├── SettingsTableSeeder.php │ ├── StatusTableSeeder.php │ ├── TasksDummyTableSeeder.php │ ├── UserRoleTableSeeder.php │ ├── UsersDummyTableSeeder.php │ └── UsersTableSeeder.php ├── docker-compose.env ├── docker-compose.yml ├── docker-config ├── fpm-pool.conf ├── nginx.conf ├── php.ini └── supervisord.conf ├── gulpfile.js ├── package-lock.json ├── package.json ├── phpunit.dusk.xml ├── phpunit.xml ├── public ├── .htaccess ├── css │ ├── app.css │ ├── bootstrap-select.min.css │ ├── bootstrap-tour-standalone.min.css │ ├── dropzone.css │ ├── font-awesome.min.css │ ├── font │ │ ├── summernote.eot │ │ ├── summernote.ttf │ │ └── summernote.woff │ ├── fonts │ │ ├── Flaticon.eot │ │ ├── Flaticon.svg │ │ ├── Flaticon.ttf │ │ ├── Flaticon.woff │ │ ├── Flaticon.woff2 │ │ ├── _flaticon.scss │ │ ├── flaticon.css │ │ ├── flaticon.html │ │ ├── flaticon2 │ │ │ └── Flaticon2.woff │ │ └── line-awesome │ │ │ └── line-awesome.woff2 │ ├── jasny-bootstrap.css │ ├── jasny-bootstrap.css.map │ ├── jasny-bootstrap.min.css │ ├── jquery.atwho.min.css │ ├── jquery.dataTables.min.css │ ├── picker.classic.css │ ├── prepared │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ └── sort_desc_disabled.png │ ├── summernote.css │ └── vendor.css ├── favicon.ico ├── fonts │ ├── FontAwesome.otf │ ├── bootstrap │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── element-icons.a61be9c.eot │ ├── element-icons.b02bdc1.ttf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ ├── glyphicons-halflings-regular.woff2 │ └── vendor │ │ ├── bootstrap-sass │ │ └── bootstrap │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── element-ui │ │ └── lib │ │ └── theme-default │ │ ├── element-icons.ttf │ │ └── element-icons.woff ├── images │ ├── .DS_Store │ ├── daybyday-logo-big.png │ ├── daybyday-logo-white-with-bg.png │ ├── daybyday-logo-white.png │ ├── daybyday-logo.png │ ├── default_avatar.jpg │ ├── doc-icon.svg │ ├── favicon.png │ ├── undraw_empty.svg │ ├── undraw_no_data.svg │ └── undraw_upload.svg ├── imagesIntegration │ ├── .DS_Store │ ├── billy-logo-final_blue.png │ ├── dinero-logo.png │ ├── dropbox-logo.svg │ └── google-drive-logo.png ├── img │ ├── element-icons.09162bc.svg │ └── favicon.svg ├── index.php ├── js │ ├── bootstrap-paginator.js │ ├── bootstrap-tour-standalone.min.js │ ├── dropzone.js │ ├── jasny-bootstrap.min.js │ ├── jquery-ui-sortable.min.js │ ├── jquery.atwho.min.js │ ├── jquery.caret.min.js │ ├── jquery.dataTables.min.js │ ├── manifest.js │ ├── npm.js │ ├── picker.js │ ├── summernote.min.js │ ├── timepicker.min.js │ └── vendor.js ├── lang │ ├── dk │ │ └── datatable.json │ └── en │ │ └── datatable.json ├── robots.txt ├── vendor │ └── datatables │ │ └── buttons.server-side.js └── web.config ├── readme.md ├── resources ├── .DS_Store ├── assets │ ├── js │ │ ├── app.js │ │ ├── bootstrap.js │ │ └── components │ │ │ ├── AppointmentCreate.vue │ │ │ ├── Calendar.vue │ │ │ ├── ConfirmModal.vue │ │ │ ├── Doughnut.vue │ │ │ ├── DynamicTable.vue │ │ │ ├── Graphline.vue │ │ │ ├── InvoiceLineModal.vue │ │ │ ├── LeadSidebar.vue │ │ │ ├── Message.vue │ │ │ ├── Search.vue │ │ │ └── passport │ │ │ ├── AuthorizedClients.vue │ │ │ ├── Clients.vue │ │ │ └── PersonalAccessTokens.vue │ ├── lang │ │ └── datatables_test.json │ └── sass │ │ ├── app.scss │ │ ├── components │ │ ├── base.scss │ │ ├── button.scss │ │ ├── dashboard.scss │ │ ├── datatables-overwrite.scss │ │ ├── datatables.scss │ │ ├── element-overrides.scss │ │ ├── invoice.scss │ │ ├── notifications.scss │ │ ├── project-board.scss │ │ ├── sidebar.scss │ │ ├── tablet.scss │ │ ├── task-sidebar.scss │ │ └── topcontactinfo.scss │ │ ├── font-awesome │ │ ├── _animated.scss │ │ ├── _bordered-pulled.scss │ │ ├── _core.scss │ │ ├── _fixed-width.scss │ │ ├── _icons.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _mixins.scss │ │ ├── _path.scss │ │ ├── _rotated-flipped.scss │ │ ├── _screen-reader.scss │ │ ├── _stacked.scss │ │ ├── _variables.scss │ │ └── font-awesome.scss │ │ └── vendor.scss ├── lang │ ├── dk.json │ ├── en.json │ ├── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php │ └── es.json └── views │ ├── absence │ ├── create.blade.php │ └── index.blade.php │ ├── appointments │ └── calendar.blade.php │ ├── auth │ ├── emails │ │ └── password.blade.php │ ├── login.blade.php │ ├── password.blade.php │ ├── passwords │ │ ├── email.blade.php │ │ └── reset.blade.php │ └── verify │ │ └── show.blade.php │ ├── clients │ ├── create.blade.php │ ├── edit.blade.php │ ├── form.blade.php │ ├── index.blade.php │ ├── show.blade.php │ └── tabs │ │ ├── documenttab.blade.php │ │ ├── invoicetab.blade.php │ │ ├── leadtab.blade.php │ │ ├── projectstab.blade.php │ │ └── tasktab.blade.php │ ├── datatables │ └── index.blade.php │ ├── departments │ ├── create.blade.php │ └── index.blade.php │ ├── documents │ └── _uploadFileModal.blade.php │ ├── errors │ └── 503.blade.php │ ├── images │ └── _uploadAvatarPreview.blade.php │ ├── integrations │ └── index.blade.php │ ├── invoices │ ├── _paymentList.blade.php │ ├── _updatePaymentModal.blade.php │ ├── overdue.blade.php │ └── show.blade.php │ ├── layouts │ ├── _navbar.blade.php │ ├── app.blade.php │ └── master.blade.php │ ├── leads │ ├── _sidebar.blade.php │ ├── _timeline.blade.php │ ├── create.blade.php │ ├── index.blade.php │ └── show.blade.php │ ├── navigation │ └── topbar │ │ └── user-profile.blade.php │ ├── pages │ ├── _absent.blade.php │ ├── _createdGraph.blade.php │ ├── _firstStep.blade.php │ ├── _users.blade.php │ └── dashboard.blade.php │ ├── partials │ ├── action-panel │ │ ├── _notification-list.blade.php │ │ └── _panel.blade.php │ ├── clientheader.blade.php │ ├── comments.blade.php │ └── userheader.blade.php │ ├── products │ ├── _creatorModal.blade.php │ └── index.blade.php │ ├── projects │ ├── _sidebar.blade.php │ ├── create.blade.php │ ├── index.blade.php │ └── show.blade.php │ ├── roles │ ├── create.blade.php │ ├── index.blade.php │ └── show.blade.php │ ├── settings │ └── index.blade.php │ ├── tasks │ ├── _sidebar.blade.php │ ├── _time_management.blade.php │ ├── _timeline.blade.php │ ├── create.blade.php │ ├── index.blade.php │ └── show.blade.php │ ├── users │ ├── create.blade.php │ ├── edit.blade.php │ ├── form.blade.php │ ├── index.blade.php │ └── show.blade.php │ └── vendor │ ├── .gitkeep │ ├── cashier │ └── receipt.blade.php │ ├── datatables │ ├── print.blade.php │ └── script.blade.php │ ├── installer │ ├── install │ │ ├── database.blade.php │ │ ├── finish.blade.php │ │ ├── home.blade.php │ │ └── permissions.blade.php │ ├── layouts │ │ └── master.blade.php │ └── update │ │ └── home.blade.php │ ├── mail │ ├── html │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── promotion.blade.php │ │ ├── promotion │ │ │ └── button.blade.php │ │ ├── subcopy.blade.php │ │ ├── table.blade.php │ │ └── themes │ │ │ └── default.css │ └── text │ │ ├── button.blade.php │ │ ├── footer.blade.php │ │ ├── header.blade.php │ │ ├── layout.blade.php │ │ ├── message.blade.php │ │ ├── panel.blade.php │ │ ├── promotion.blade.php │ │ ├── promotion │ │ └── button.blade.php │ │ ├── subcopy.blade.php │ │ └── table.blade.php │ ├── notifications │ └── email.blade.php │ ├── pagination │ ├── bootstrap-4.blade.php │ ├── default.blade.php │ ├── simple-bootstrap-4.blade.php │ └── simple-default.blade.php │ └── setup_wizard │ ├── layouts │ └── wizard.blade.php │ ├── partials │ ├── breadcrumb.blade.php │ ├── navigation.blade.php │ └── steps │ │ ├── database.blade.php │ │ ├── env.blade.php │ │ ├── final.blade.php │ │ ├── folders.blade.php │ │ └── requirements.blade.php │ └── steps │ └── default.blade.php ├── routes ├── api.php ├── console.php └── web.php ├── server.php ├── storage ├── BYqK2rTW0CrDBA4r9tMRobzUQmAM4GYh0As0JjVc.png ├── Gm09rNCbGlmPeRC4jISkJPgOYHk0D1QOlh82GKt6.png ├── HWWHT3cGAI0AYe8r0TPLESqXNQUNeKI63MN5RITr.jpeg ├── YWPbmr8YNxw0UwbQRFBUfBhpVQUXAdcTCUMtsyJI.jpeg ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore ├── logs │ └── .gitignore ├── tIXitATFGsMUrovgp4ZBObW8aE6M72n4R2lPXQVx.png └── xliKs8QjnVnS4GkFEfwCan0YyUs6F6LsqaHoc5bA.png ├── tests ├── Bootstrap.php ├── Browser │ ├── AppointmentTest.php │ ├── ClientTest.php │ ├── LeadTest.php │ ├── LoginTest.php │ ├── Pages │ │ ├── HomePage.php │ │ ├── Login.php │ │ └── Page.php │ ├── ProjectTest.php │ ├── TaskTest.php │ ├── UserTest.php │ └── console │ │ └── .gitignore ├── CreatesApplication.php ├── DuskTestCase.php ├── TestCase.php └── Unit │ ├── Client │ ├── ClientNumberServiceTest.php │ └── UpdateAssigneeTest.php │ ├── Comment │ └── GetCommentEndpointTest.php │ ├── Controllers │ ├── Absence │ │ └── AbsenceControllerTest.php │ ├── Appointment │ │ └── AppointmentsControllerTest.php │ ├── Client │ │ └── ClientsControllerTest.php │ ├── Department │ │ └── DepartmentsControllerTest.php │ ├── InvoiceLine │ │ └── InvoiceLinesControllerTest.php │ ├── Lead │ │ ├── DeleteLeadControllerTest.php │ │ └── LeadsControllerTest.php │ ├── Offer │ │ └── OffersControllerTest.php │ ├── Payment │ │ ├── PaymentsControllerAddPaymentTest.php │ │ └── PaymentsControllerTest.php │ ├── Project │ │ ├── DeleteProjectControllerTest.php │ │ └── ProjectsControllerTest.php │ ├── Role │ │ └── RoleControllerTest.php │ ├── Task │ │ ├── DeleteTaskControllerTest.php │ │ └── TasksControllerTest.php │ └── User │ │ ├── UsersControllerCalendarTest.php │ │ └── UsersControllerTest.php │ ├── Deadline │ └── DeadlineTest.php │ ├── DemoEnvironment │ └── CanNotAccessTest.php │ ├── Format │ └── GetDateFormatTest.php │ ├── Invoice │ ├── CanUpdateInvoiceTest.php │ ├── DueAtTest.php │ ├── GenerateInvoiceStatusTest.php │ ├── InvoiceCalculatorTest.php │ ├── InvoiceNumberServiceTest.php │ ├── InvoiceStatusEnumTest.php │ └── RemoveReferenceTest.php │ ├── Lead │ └── LeadObserverDeleteTest.php │ ├── Offer │ ├── OffersStatusEnumTest.php │ └── SetStatusTest.php │ ├── Payment │ └── PaymentSourceEnumTest.php │ ├── Project │ └── ProjectObserverDeleteTest.php │ ├── Status │ └── TypeOfStatusTest.php │ ├── Task │ └── TaskObserverDeleteTest.php │ └── User │ └── GetAttributesTest.php ├── webpack.mix.js └── yarn.lock /.docker/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.17.8 2 | -------------------------------------------------------------------------------- /.docker/php/custom.ini: -------------------------------------------------------------------------------- 1 | file_uploads = On 2 | memory_limit = 124M 3 | upload_max_filesize = 64M 4 | post_max_size = 64M 5 | max_execution_time = 600 6 | -------------------------------------------------------------------------------- /.docker/php/php-xdebug.ini: -------------------------------------------------------------------------------- 1 | xdebug.remote_enable = 1 2 | xdebug.remote_port = 9000 3 | xdebug.scream = 0 4 | xdebug.show_local_vars = 1 5 | xdebug.idekey = PHPSTORM 6 | xdebug.remote_host = 10.254.254.254 -------------------------------------------------------------------------------- /.env.ci: -------------------------------------------------------------------------------- 1 | APP_ENV=testing 2 | APP_DEBUG=true 3 | APP_KEY=base64:lEEqEYFZGEYHBd3y3RPofI9FozOKwBCEiTANoaH2eUs= 4 | 5 | CACHE_DRIVER=array 6 | SESSION_DRIVER=file 7 | QUEUE_DRIVER=sync 8 | 9 | REDIS_HOST=localhost 10 | REDIS_PASSWORD=null 11 | REDIS_PORT=6379 12 | 13 | MAIL_DRIVER=smtp 14 | MAIL_HOST=mailtrap.io 15 | MAIL_PORT=2525 16 | MAIL_USERNAME=null 17 | MAIL_PASSWORD=null 18 | MAIL_ENCRYPTION=null 19 | 20 | DB_CONNECTION=mysql 21 | DB_HOST=127.0.0.1 22 | DB_PORT=3306 23 | DB_DATABASE=daybyday_test 24 | DB_USERNAME=root 25 | DB_PASSWORD=password 26 | 27 | -------------------------------------------------------------------------------- /.env.dusk.local: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_DEBUG=true 3 | APP_KEY=i53weLzCSdunQzNc2SXR2AE9XJVDuNaq 4 | APP_URL=http://daybydaycrm.test 5 | 6 | DB_HOST=dbMain 7 | DB_DATABASE=daybyday 8 | DB_USERNAME=root 9 | DB_PASSWORD=root 10 | DB_PORT=3306 11 | 12 | CACHE_DRIVER=array 13 | SESSION_DRIVER=file 14 | QUEUE_DRIVER=sync 15 | 16 | REDIS_HOST=localhost 17 | REDIS_PASSWORD=null 18 | REDIS_PORT=6379 19 | 20 | MAIL_DRIVER=smtp 21 | MAIL_HOST=mailtrap.io 22 | MAIL_PORT=2525 23 | MAIL_USERNAME=null 24 | MAIL_PASSWORD=null 25 | MAIL_ENCRYPTION=null 26 | 27 | API_STANDARDS_TREE=x 28 | API_SUBTYPE=daybydaycrm 29 | API_PREFIX=api 30 | API_VERSION=v1 31 | API_NAME="daybydaycrm API" 32 | API_CONDITIONAL_REQUEST=false 33 | API_STRICT=false 34 | API_DEFAULT_FORMAT=json 35 | API_DEBUG=true 36 | 37 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_DEBUG=true 3 | APP_KEY=i53weLzCSdunQzNc2SXR2AE9XJVDuNaq 4 | 5 | DB_HOST=localhost 6 | DB_DATABASE=database 7 | DB_USERNAME=username 8 | DB_PASSWORD=password 9 | 10 | CACHE_DRIVER=file 11 | SESSION_DRIVER=file 12 | QUEUE_DRIVER=sync 13 | 14 | REDIS_HOST=localhost 15 | REDIS_PASSWORD=null 16 | REDIS_PORT=6379 17 | 18 | MAIL_DRIVER=smtp 19 | MAIL_HOST=mailtrap.io 20 | MAIL_PORT=2525 21 | MAIL_USERNAME=null 22 | MAIL_PASSWORD=null 23 | MAIL_ENCRYPTION=null 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.less linguist-vendored 4 | *.rb linguist-language=Php -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [bottelet] 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .idea/* 3 | /node_modules 4 | Homestead.yaml 5 | Homestead.json 6 | .env 7 | bower_components 8 | 9 | .docker/flarepoint-db/* 10 | 11 | # PHP Intel cache 12 | .phpintel/ 13 | 14 | # PHP CS Fixer cache 15 | .php_cs.cache 16 | storage/debugbar/ 17 | public/build/ 18 | -------------------------------------------------------------------------------- /app/Api/v1/Controllers/UserController.php: -------------------------------------------------------------------------------- 1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 29 | ->hourly(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Events/Event.php: -------------------------------------------------------------------------------- 1 | comment = $comment; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/AuthRegisterController.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Http\Response 23 | */ 24 | public function index() 25 | { 26 | return view('home'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/InvoiceLinesController.php: -------------------------------------------------------------------------------- 1 | user()->can('modify-invoice-lines')) { 12 | session()->flash('flash_message_warning', __('You do not have permission to modify invoice lines')); 13 | return redirect()->route('invoices.show', $invoiceLine->invoice->external_id); 14 | } 15 | 16 | $invoiceLine->delete(); 17 | 18 | Session()->flash('flash_message', __('Invoice line successfully deleted')); 19 | return redirect()->route('invoices.show', $invoiceLine->invoice->external_id); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/NotificationsController.php: -------------------------------------------------------------------------------- 1 | user(); 20 | $user->unreadNotifications()->where('id', $request->id)->first()->markAsRead(); 21 | 22 | return redirect($user->notifications->where('id', $request->id)->first()->data['url']); 23 | } 24 | 25 | /** 26 | * Mark all notifications as read 27 | * @return mixed 28 | */ 29 | public function markAll() 30 | { 31 | $user = User::find(\Auth::id()); 32 | 33 | foreach ($user->unreadNotifications as $notification) { 34 | $notification->markAsRead(); 35 | } 36 | return redirect()->back(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/Http/Middleware/Client/CanClientCreate.php: -------------------------------------------------------------------------------- 1 | user()->can('client-create')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to create a client")); 20 | return redirect()->route('clients.index'); 21 | } 22 | 23 | return $next($request); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Middleware/Client/CanClientUpdate.php: -------------------------------------------------------------------------------- 1 | user()->can('client-update')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to update a user")); 20 | return redirect()->route('clients.index'); 21 | } 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | user()->can('lead-create')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to create a lead")); 20 | return redirect()->route('leads.index'); 21 | } 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/Lead/CanLeadUpdateStatus.php: -------------------------------------------------------------------------------- 1 | user()->can('lead-update-status')) { 21 | Session()->flash('flash_message_warning', __("You don't have the right permission for this action")); 22 | return redirect()->back(); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/Lead/IsLeadAssigned.php: -------------------------------------------------------------------------------- 1 | user()->can('can-assign-new-user-to-lead')) { 21 | Session()->flash('flash_message_warning', __("You don't have the right permission for this action")); 22 | return redirect()->back(); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/LogLastUserActivity.php: -------------------------------------------------------------------------------- 1 | addMinutes(5); 22 | Cache::put('user-is-online-' . \Auth::user()->id, true, $expiresAt); 23 | } 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfDemo.php: -------------------------------------------------------------------------------- 1 | flash('flash_message_warning', __(self::MEESAGE)); 24 | return redirect()->back(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfFileSystemIsNotEnabled.php: -------------------------------------------------------------------------------- 1 | isEnabled()) { 21 | return $next($request); 22 | } 23 | 24 | session()->flash('flash_message_warning', __('File integration required for this action')); 25 | return redirect()->back(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfNotAdmin.php: -------------------------------------------------------------------------------- 1 | user()->hasRole('administrator') || Auth()->user()->hasRole('owner')) { 19 | return $next($request); 20 | } 21 | Session()->flash('flash_message_warning', __('Only Allowed for admins')); 22 | return redirect()->back(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/RedirectIfNotSuperAdmin.php: -------------------------------------------------------------------------------- 1 | user()->hasRole('owner')) { 19 | return $next($request); 20 | } 21 | Session()->flash('flash_message_warning', __('Only Allowed for the user who registered the CRM')); 22 | return redirect()->back(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/Task/CanTaskCreate.php: -------------------------------------------------------------------------------- 1 | user()->can('task-create')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to create a task")); 20 | return redirect()->route('tasks.index'); 21 | } 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/Task/CanTaskUpdateStatus.php: -------------------------------------------------------------------------------- 1 | user()->can('task-update-status')) { 21 | Session()->flash('flash_message_warning', __("You don't have the right permission for this action")); 22 | return redirect()->back(); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/Task/IsTaskAssigned.php: -------------------------------------------------------------------------------- 1 | user()->can('can-assign-new-user-to-task')) { 21 | Session()->flash('flash_message_warning', __("You don't have the right permission for this action")); 22 | return redirect()->back(); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/Translation.php: -------------------------------------------------------------------------------- 1 | user()) { 19 | $language = auth()->user()->language; 20 | if (!in_array($language, ["en", "dk", "es"])) { 21 | $language = "en"; 22 | } 23 | app()->setLocale($language); 24 | } 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/User/CanUserCreate.php: -------------------------------------------------------------------------------- 1 | user()->can('user-create')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to create a user")); 20 | return redirect()->route('users.index'); 21 | } 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/User/CanUserUpdate.php: -------------------------------------------------------------------------------- 1 | user()->can('user-update')) { 19 | Session()->flash('flash_message_warning', __("You don't have permission to update a client")); 20 | return redirect()->route('users.index'); 21 | } 22 | return $next($request); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | user()->can("appointment-edit"); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'id' => 'required', 28 | 'start' => ['required', 'date'], 29 | 'end' => ['required', 'date'], 30 | 'group' => 'required' 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/Requests/Client/StoreClientRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('client-create'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'company_name' => 'required', 29 | 'vat' => 'max:12', 30 | 'email' => 'required', 31 | 'address' => '', 32 | 'zipcode' => 'max:6', 33 | 'city' => '', 34 | 'primary_number' => 'max:10', 35 | 'secondary_number' => 'max:10', 36 | 'industry_id' => 'required', 37 | 'company_type' => '', 38 | 'user_id' => 'required' 39 | ]; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Http/Requests/Client/UpdateClientRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('client-update'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'company_name' => 'required', 29 | 'vat' => 'max:12', 30 | 'email' => 'required', 31 | 'address' => '', 32 | 'zipcode' => 'max:6', 33 | 'city' => '', 34 | 'primary_number' => 'max:10', 35 | 'secondary_number' => 'max:10', 36 | 'industry' => '', 37 | 'company_type' => '', 38 | 'user_id' => 'required' 39 | ]; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Http/Requests/Department/StoreDepartmentRequest.php: -------------------------------------------------------------------------------- 1 | user()->hasRole('administrator') || auth()->user()->hasRole('owner'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'description' => '' 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Requests/Invoice/AddInvoiceLine.php: -------------------------------------------------------------------------------- 1 | 'required', 28 | 'quantity' => 'required|int', 29 | 'type' => 'required', 30 | 'price' => 'required', 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/Requests/Lead/StoreLeadRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('lead-create'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'title' => 'required', 28 | 'description' => 'required', 29 | 'status_id' => 'required', 30 | 'user_assigned_id' => 'required', 31 | 'user_created_id' => '', 32 | 'client_external_id' => 'required', 33 | 'deadline' => 'required' 34 | ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Http/Requests/Lead/UpdateLeadFollowUpRequest.php: -------------------------------------------------------------------------------- 1 | 'required', 28 | 'contact_time' => 'required', 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Requests/Project/StoreProjectRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('project-create'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'title' => 'required', 28 | 'description' => 'required', 29 | 'status_id' => 'required', 30 | 'user_assigned_id' => 'required', 31 | 'user_created_id' => '', 32 | 'client_external_id' => 'required', 33 | 'deadline' => '' 34 | ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Http/Requests/Request.php: -------------------------------------------------------------------------------- 1 | user()->hasRole('administrator') || Auth()->user()->hasRole('owner'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'description' => 'required' 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Requests/Setting/UpdateSettingOverallRequest.php: -------------------------------------------------------------------------------- 1 | user()->hasRole('administrator') || Auth()->user()->hasRole('owner'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'client_number' => 'required|integer', 28 | 'invoice_number' => 'required|integer' 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Requests/Task/StoreTaskRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('task-create'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'title' => 'required', 28 | 'description' => 'required', 29 | 'status_id' => 'required', 30 | 'user_assigned_id' => 'required', 31 | 'user_created_id' => '', 32 | 'client_external_id' => 'required', 33 | 'deadline' => '' 34 | ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Http/Requests/Task/UpdateTimeTaskRequest.php: -------------------------------------------------------------------------------- 1 | 'required', 28 | 'comment' => '', 29 | 'time' => 'required', 30 | 'value' => 'required', 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/Requests/User/StoreUserRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('user-create'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'email' => 'required|email', 29 | 'address' => '', 30 | 'primary_number' => 'numeric', 31 | 'secondary_number' => 'numeric', 32 | 'password' => 'required|min:6|confirmed', 33 | 'password_confirmation' => 'required|min:6', 34 | 'image_path' => '', 35 | 'roles' => 'required', 36 | 'departments' => 'required' 37 | ]; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Requests/User/UpdateUserRequest.php: -------------------------------------------------------------------------------- 1 | user()->can('user-update'); 17 | } 18 | 19 | /** 20 | * Get the validation rules that apply to the request. 21 | * 22 | * @return array 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => 'required', 28 | 'email' => 'required|email', 29 | 'address' => '', 30 | 'primary_number' => 'numeric', 31 | 'secondary_number' => 'numeric', 32 | 'password' => 'sometimes|min:6|confirmed', 33 | 'password_confirmation' => 'sometimes|min:6', 34 | 'image_path' => '', 35 | 'departments' => 'required' 36 | ]; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/ClientHeaderComposer.php: -------------------------------------------------------------------------------- 1 | getData()['client']['id']); 19 | 20 | $contact_info = $clients->contacts()->first(); 21 | /** 22 | * [User assigned the client] 23 | * @var contact 24 | */ 25 | $contact = $clients->user; 26 | 27 | $view->with('contact', $contact)->with('contact_info', $contact_info); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/InvoiceHeaderComposer.php: -------------------------------------------------------------------------------- 1 | getData()['invoice']['id']); 21 | 22 | $client = $invoices->client; 23 | $contact_info = $client->contacts()->first(); 24 | 25 | $view->with('client', $client); 26 | $view->with('contact_info', $contact_info); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/LeadHeaderComposer.php: -------------------------------------------------------------------------------- 1 | getData()['lead']['id']); 19 | /** 20 | * [User assigned the task] 21 | * @var contact 22 | */ 23 | 24 | $contact = $lead->user; 25 | $client = $lead->client; 26 | $contact_info = $client->contacts()->first(); 27 | 28 | $view->with('contact', $contact); 29 | $view->with('contact_info', $contact_info); 30 | $view->with('client', $client); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/ProjectHeaderComposer.php: -------------------------------------------------------------------------------- 1 | getData()["project"]; 20 | 21 | $contact = $project->assignee; 22 | $client = $project->client; 23 | $contact_info = $client->contacts()->first(); 24 | 25 | $view->with('contact', $contact); 26 | $view->with('contact_info', $contact_info); 27 | $view->with('client', $client); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/TaskHeaderComposer.php: -------------------------------------------------------------------------------- 1 | getData()['tasks']['id']); 19 | 20 | /** 21 | * [User assigned the task] 22 | * @var contact 23 | */ 24 | 25 | $contact = $tasks->user; 26 | $client = $tasks->client; 27 | $contact_info = $client->contacts()->first(); 28 | 29 | $view->with('contact', $contact); 30 | $view->with('contact_info', $contact_info); 31 | $view->with('client', $client); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/Http/ViewComposers/UserHeaderComposer.php: -------------------------------------------------------------------------------- 1 | with('contact', User::findOrFail($view->getData()['user']['id'])); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Jobs/Job.php: -------------------------------------------------------------------------------- 1 | notification = $notification; 25 | } 26 | 27 | /** 28 | * Execute the job. 29 | * 30 | * @return void 31 | */ 32 | public function handle() 33 | { 34 | Queue::push($notification); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Listeners/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/app/Listeners/.gitkeep -------------------------------------------------------------------------------- /app/Listeners/ClientActionNotify.php: -------------------------------------------------------------------------------- 1 | getClient(); 30 | $action = $event->getAction(); 31 | 32 | $client->assignedUser->notify(new clientActionNotification( 33 | $client, 34 | $action 35 | )); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/Listeners/LeadActionNotify.php: -------------------------------------------------------------------------------- 1 | getLead(); 30 | $action = $event->getAction(); 31 | $lead->user->notify(new LeadActionNotification( 32 | $lead, 33 | $action 34 | )); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Listeners/NotiftyMentionedUsers.php: -------------------------------------------------------------------------------- 1 | comment->mentionedUsers()) 32 | ->map(function ($name) { 33 | return User::where('name', $name)->first(); 34 | }) 35 | ->filter() 36 | ->each(function ($user) use ($event) { 37 | $user->notify(new YouWereMentionedNotification($event->comment)); 38 | }); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/Listeners/ProjectActionNotify.php: -------------------------------------------------------------------------------- 1 | getProject(); 30 | $action = $event->getAction(); 31 | $Project->assignee->notify(new ProjectActionNotification( 32 | $Project, 33 | $action 34 | )); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Listeners/TaskActionNotify.php: -------------------------------------------------------------------------------- 1 | getTask(); 30 | $action = $event->getAction(); 31 | $task->assignedUser->notify(new TaskActionNotification( 32 | $task, 33 | $action 34 | )); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Models/Absence.php: -------------------------------------------------------------------------------- 1 | format('Y-m-d H:i:s'); 32 | } 33 | 34 | public function user() 35 | { 36 | return $this->belongsTo(User::class); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/Models/Appointment.php: -------------------------------------------------------------------------------- 1 | format('Y-m-d H:i:s'); 36 | } 37 | 38 | public function user() 39 | { 40 | return $this->belongsTo(User::class); 41 | } 42 | 43 | public function client() 44 | { 45 | return $this->belongsTo(Client::class); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/Models/BusinessHour.php: -------------------------------------------------------------------------------- 1 | morphTo('source'); 24 | } 25 | 26 | public function task() 27 | { 28 | return $this->belongsTo(Task::class, 'task_id', 'id'); 29 | } 30 | 31 | public function user() 32 | { 33 | return $this->belongsTo(User::class, 'user_id', 'id'); 34 | } 35 | 36 | public function mentionedUsers() 37 | { 38 | preg_match_all('/@([\w\-]+)/', $this->description, $matches); 39 | 40 | return $matches[1]; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/Models/Contact.php: -------------------------------------------------------------------------------- 1 | belongsTo(Client::class); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/CreditLine.php: -------------------------------------------------------------------------------- 1 | belongsToMany(User::class); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Models/Document.php: -------------------------------------------------------------------------------- 1 | belongsTo(Client::class, 'client_id'); 17 | } 18 | 19 | /** 20 | * Get the owning imageable model. 21 | */ 22 | public function sourceable() 23 | { 24 | return $this->morphTo(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Models/Industry.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Models/Offer.php: -------------------------------------------------------------------------------- 1 | hasMany(InvoiceLine::class); 31 | } 32 | 33 | public function invoice() 34 | { 35 | return $this->hasOne(Invoice::class); 36 | } 37 | 38 | public function setAsWon() 39 | { 40 | $this->status = OfferStatus::won()->getStatus(); 41 | $this->save(); 42 | } 43 | 44 | public function setAsLost() 45 | { 46 | $this->status = OfferStatus::lost()->getStatus(); 47 | $this->save(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Models/Payment.php: -------------------------------------------------------------------------------- 1 | $this->amount]); 43 | } 44 | 45 | public function invoice() 46 | { 47 | return $this->belongsTo(Invoice::class); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Models/Permission.php: -------------------------------------------------------------------------------- 1 | belongsToMany(Role::class, 'permission_role', 'permission_id', 'role_id'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Models/PermissionRole.php: -------------------------------------------------------------------------------- 1 | belongsTo(Setting::class); 20 | } 21 | 22 | public function employee() 23 | { 24 | return $this->hasMany(PermissionRole::class, 'role_id', 3); 25 | } 26 | 27 | public function hasperm() 28 | { 29 | return $this->hasMany(Permission::class, 'Permission_role'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Models/Product.php: -------------------------------------------------------------------------------- 1 | price); 21 | return $money; 22 | } 23 | 24 | public function getDividedPriceAttribute() 25 | { 26 | return $this->price / 100; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/Models/Role.php: -------------------------------------------------------------------------------- 1 | hasMany(Role::class, 'user_id', 'id'); 23 | } 24 | 25 | public function permissions() 26 | { 27 | return $this->belongsToMany(Permission::class, 'permission_role', 'role_id', 'permission_id'); 28 | } 29 | 30 | public function canBeDeleted() 31 | { 32 | return $this->name !== Role::ADMIN_ROLE && $this->name !== Role::OWNER_ROLE; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Models/RoleUser.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 21 | } 22 | 23 | public function tasks() 24 | { 25 | return $this->belongsTo(Task::class); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/Status.php: -------------------------------------------------------------------------------- 1 | hasMany(Task::class); 14 | } 15 | 16 | public function leads() 17 | { 18 | return $this->hasMany(Lead::class); 19 | } 20 | 21 | public function projects() 22 | { 23 | return $this->hasMany(Project::class); 24 | } 25 | 26 | public function scopeTypeOfTask(Builder $query) 27 | { 28 | return $query->where('source_type', Task::class); 29 | } 30 | 31 | public function scopeTypeOfLead(Builder $query) 32 | { 33 | return $query->where('source_type', Lead::class); 34 | } 35 | 36 | public function scopeTypeOfProject(Builder $query) 37 | { 38 | return $query->where('source_type', Project::class); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/Policies/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/app/Policies/.gitkeep -------------------------------------------------------------------------------- /app/Providers/AuthServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 22 | Task::class => allowTaskComplete::class, 23 | ]; 24 | 25 | /** 26 | * Register any application authentication / authorization services. 27 | * 28 | * @param \Illuminate\Contracts\Auth\Access\Gate $gate 29 | * @return void 30 | */ 31 | public function boot(GateContract $gate) 32 | { 33 | $this->registerPolicies($gate); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | id === (int) $userId; 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Repositories/BillingIntegration/BillingIntegrationInterface.php: -------------------------------------------------------------------------------- 1 | first()->currency; 21 | $this->amount = $amount; 22 | $this->currency = new Currency($currency); 23 | } 24 | /** 25 | * @return mixed 26 | */ 27 | public function getAmount() 28 | { 29 | return $this->amount; 30 | } 31 | 32 | /** 33 | * @return Currency 34 | */ 35 | public function getCurrency() 36 | { 37 | return $this->currency; 38 | } 39 | 40 | public function getBigDecimalAmount() 41 | { 42 | return $this->getAmount() / 100; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/Repositories/Role/RoleRepositoryContract.php: -------------------------------------------------------------------------------- 1 | vatRate = $this->integerToVatRate(); 26 | $this->multipleVatRate = 1 + $this->vatRate; 27 | } 28 | 29 | /** 30 | * Return the Tax Rate as a float 31 | * 32 | * @return int 33 | */ 34 | public function vatRate():float 35 | { 36 | return $this->vatRate; 37 | } 38 | 39 | /** 40 | * @return float 41 | */ 42 | public function multipleVatRate():float 43 | { 44 | return $this->multipleVatRate; 45 | } 46 | 47 | public function percentage() 48 | { 49 | return Setting::select('vat')->first()->vat / 100; 50 | } 51 | 52 | private function integerToVatRate() 53 | { 54 | return $this->percentage() / 100; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/Services/ClientNumber/ClientNumberConfig.php: -------------------------------------------------------------------------------- 1 | config = true; 12 | } 13 | 14 | public function isEnabled(): bool 15 | { 16 | return $this->config === true; 17 | } 18 | 19 | public function isDisabled(): bool 20 | { 21 | return $this->config === false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Services/ClientNumber/ClientNumberService.php: -------------------------------------------------------------------------------- 1 | isDisabled()) { 15 | return null; 16 | } 17 | $this->setting = Setting::query(); 18 | $this->lockedSetting = $this->setting->lockForUpdate()->first(); 19 | } 20 | 21 | public function setNextClientNumber() 22 | { 23 | $currentNumber = $this->nextClientNumber(); 24 | $this->increaseClientNumber(); 25 | 26 | return $currentNumber; 27 | } 28 | 29 | public function setClientNumber(Int $clientNumber) 30 | { 31 | $this->lockedSetting->client_number = $clientNumber; 32 | return $this->lockedSetting->save(); 33 | } 34 | 35 | public function nextClientNumber() 36 | { 37 | return $this->setting->first()->client_number; 38 | } 39 | 40 | private function increaseClientNumber() 41 | { 42 | $this->lockedSetting->client_number++; 43 | return $this->lockedSetting->save(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/Services/ClientNumber/ClientNumberValidator.php: -------------------------------------------------------------------------------- 1 | = 1) { 12 | return true; 13 | } 14 | 15 | return false; 16 | } 17 | 18 | public function validateClientNumberIsNotLowerThenCurrentMax(Int $clientNumber) 19 | { 20 | $currentClientNumber = optional(Client::query()->orderByDesc('client_number')->limit(1)->first())->client_number; 21 | if ($clientNumber > $currentClientNumber) { 22 | return true; 23 | } 24 | 25 | return false; 26 | } 27 | 28 | public function validateClientNumber(Int $clientNumber) 29 | { 30 | if ($this->validateClientNumberIsNotLowerThenCurrentMax($clientNumber) && $this->validateClientNumberSize($clientNumber)) { 31 | return true; 32 | } 33 | 34 | return false; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Services/Comment/Commentable.php: -------------------------------------------------------------------------------- 1 | config = true; 12 | } 13 | 14 | public function isEnabled(): bool 15 | { 16 | return $this->config === true; 17 | } 18 | 19 | public function isDisabled(): bool 20 | { 21 | return $this->config === false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Services/InvoiceNumber/InvoiceNumberValidator.php: -------------------------------------------------------------------------------- 1 | = 1) { 12 | return true; 13 | } 14 | 15 | return false; 16 | } 17 | 18 | public function validateInvoiceNumberIsNotLowerThenCurrentMax(Int $invoiceNumber) 19 | { 20 | $currentInvoiceNumber = optional(Invoice::query()->orderByDesc('invoice_number')->limit(1)->first())->invoice_number; 21 | if ($invoiceNumber > $currentInvoiceNumber) { 22 | return true; 23 | } 24 | 25 | return false; 26 | } 27 | 28 | public function validateInvoiceNumber(Int $invoiceNumber) 29 | { 30 | if ($this->validateInvoiceNumberIsNotLowerThenCurrentMax($invoiceNumber) && $this->validateInvoiceNumberSize($invoiceNumber)) { 31 | return true; 32 | } 33 | 34 | return false; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Services/Storage/Authentication/StorageAuthenticatorContract.php: -------------------------------------------------------------------------------- 1 | first(); 11 | if ($integration) { 12 | return new $integration->name; 13 | } else { 14 | return new Local(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/Services/Storage/Local.php: -------------------------------------------------------------------------------- 1 | isClosed()) { 11 | return false; 12 | } 13 | 14 | return $this->deadline < Carbon::now(); 15 | } 16 | 17 | /** 18 | * @param Int $days 19 | * @return bool 20 | */ 21 | public function isCloseToDeadline(Int $days = 2):bool 22 | { 23 | return $this->deadline < Carbon::now()->addDays($days); 24 | } 25 | 26 | public function getDaysUntilDeadlineAttribute(): Int 27 | { 28 | return Carbon::now()->startOfDay()->diffInDays($this->deadline, false); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Zizaco/Entrust/Contracts/EntrustPermissionInterface.php: -------------------------------------------------------------------------------- 1 | table = Config::get('entrust.permissions_table'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/Zizaco/Entrust/EntrustRole.php: -------------------------------------------------------------------------------- 1 | table = Config::get('entrust.roles_table'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/Zizaco/Entrust/Middleware/EntrustRole.php: -------------------------------------------------------------------------------- 1 | auth = $auth; 28 | } 29 | 30 | /** 31 | * Handle an incoming request. 32 | * 33 | * @param \Illuminate\Http\Request $request 34 | * @param Closure $next 35 | * @param $roles 36 | * @return mixed 37 | */ 38 | public function handle($request, Closure $next, $roles) 39 | { 40 | if (!is_array($roles)) { 41 | $roles = explode(self::DELIMITER, $roles); 42 | } 43 | 44 | if ($this->auth->guest() || !$request->user()->hasRole($roles)) { 45 | abort(403); 46 | } 47 | 48 | return $next($request); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /appspec.yml: -------------------------------------------------------------------------------- 1 | version: 0.0 2 | os: linux 3 | files: 4 | - source: / 5 | destination: /var/www/html -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /config/compile.php: -------------------------------------------------------------------------------- 1 | [ 17 | // 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled File Providers 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may list service providers which define a "compiles" function 26 | | that returns additional files that should be compiled, providing an 27 | | easy way to get common files from any packages you are utilizing. 28 | | 29 | */ 30 | 31 | 'providers' => [ 32 | // 33 | ], 34 | 35 | ]; 36 | -------------------------------------------------------------------------------- /config/elasticsearch.php: -------------------------------------------------------------------------------- 1 | [ 5 | [ 6 | 'host' => env('ELASTICSEARCH_HOST', 'localhost'), 7 | 'port' => env('ELASTICSEARCH_PORT', 9200), 8 | 'scheme' => env('ELASTICSEARCH_SCHEME', null), 9 | 'user' => env('ELASTICSEARCH_USER', null), 10 | 'pass' => env('ELASTICSEARCH_PASS', null), 11 | // If you are connecting to an Elasticsearch instance on AWS, you will need these values as well 12 | 'aws' => env('AWS_ELASTICSEARCH_ENABLED', false), 13 | 'aws_region' => env('AWS_REGION', ''), 14 | 'aws_key' => env('AWS_ACCESS_KEY_ID', ''), 15 | 'aws_secret' => env('AWS_SECRET_ACCESS_KEY', '') 16 | ] 17 | ] 18 | ]; 19 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | realpath(base_path('resources/views')), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => realpath(storage_path('framework/views')), 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /database/factories/AbsenceFactory.php: -------------------------------------------------------------------------------- 1 | define(Absence::class, function (Faker $faker) { 10 | return [ 11 | 'external_id' => \Ramsey\Uuid\Uuid::uuid4()->toString(), 12 | 'reason' => $faker->word, 13 | 'start_at' => now(), 14 | 'end_at' => now()->addDays(3), 15 | 'user_id' => factory(User::class), 16 | ]; 17 | }); 18 | -------------------------------------------------------------------------------- /database/factories/AppointmentFactory.php: -------------------------------------------------------------------------------- 1 | define(Appointment::class, function (Faker $faker) { 11 | return [ 12 | 'external_id' => $faker->uuid, 13 | 'title' => $faker->word, 14 | 'description' => $faker->text, 15 | 'start_at' => now(), 16 | 'end_at' => now()->addHour(), 17 | 'user_id' => factory(User::class), 18 | 'source_type' => Task::class, 19 | 'source_id' => factory(Task::class), 20 | ]; 21 | }); 22 | -------------------------------------------------------------------------------- /database/factories/BusinessHourFactory.php: -------------------------------------------------------------------------------- 1 | define(BusinessHour::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/factories/ClientFactory.php: -------------------------------------------------------------------------------- 1 | define(Client::class, function (Faker $faker) { 9 | return [ 10 | 'external_id' => $faker->uuid, 11 | 'vat' => $faker->randomNumber(8), 12 | 'company_name' => $faker->company(), 13 | 'address' => $faker->secondaryAddress(), 14 | 'city' => $faker->city(), 15 | 'zipcode' => $faker->postcode(), 16 | 'industry_id' => $faker->numberBetween($min = 1, $max = 25), 17 | 'user_id' => factory(App\Models\User::class), 18 | 'company_type' => 'ApS', 19 | ]; 20 | }); 21 | $factory->afterCreating(Client::class, function ($client, $faker) { 22 | factory(\App\Models\Contact::class)->create( 23 | [ 24 | 'client_id' => $client->id 25 | ] 26 | ); 27 | }); 28 | -------------------------------------------------------------------------------- /database/factories/CommentFactory.php: -------------------------------------------------------------------------------- 1 | define(Comment::class, function (Faker $faker) { 12 | return [ 13 | 'external_id' => \Ramsey\Uuid\Uuid::uuid4()->toString(), 14 | 'user_id' => factory(User::class), 15 | 'source_type' => Task::class, 16 | 'source_id' => factory(Task::class), 17 | 'description' => $faker->paragraph(rand(2,10)) 18 | ]; 19 | }); 20 | -------------------------------------------------------------------------------- /database/factories/ContactFactory.php: -------------------------------------------------------------------------------- 1 | define(Contact::class, function (Faker $faker) { 9 | return [ 10 | 'name' => $faker->name, 11 | 'external_id' => $faker->uuid, 12 | 'email' => $faker->email, 13 | 'primary_number' => $faker->randomNumber(8), 14 | 'secondary_number' => $faker->randomNumber(8), 15 | 'client_id' => 1, 16 | 'is_primary' => 1, 17 | ]; 18 | }); 19 | -------------------------------------------------------------------------------- /database/factories/CreditLineFactory.php: -------------------------------------------------------------------------------- 1 | define(CreditLine::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/factories/CreditNoteFactory.php: -------------------------------------------------------------------------------- 1 | define(CreditNote::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/factories/DepartmentFactory.php: -------------------------------------------------------------------------------- 1 | define(Department::class, function (Faker $faker) { 9 | return [ 10 | 'name' => 'factory', 11 | 'external_id' => $faker->uuid, 12 | 'description' => 'Mock Department', 13 | ]; 14 | }); 15 | -------------------------------------------------------------------------------- /database/factories/FilesFactory.php: -------------------------------------------------------------------------------- 1 | define(App\Models\File::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/factories/InvoiceFactory.php: -------------------------------------------------------------------------------- 1 | define(Invoice::class, function (Faker $faker) { 9 | return [ 10 | 'external_id' => $faker->uuid, 11 | 'status' => 'draft', 12 | 'client_id' => factory(\App\Models\Client::class), 13 | ]; 14 | }); 15 | -------------------------------------------------------------------------------- /database/factories/InvoiceLineFactory.php: -------------------------------------------------------------------------------- 1 | define(InvoiceLine::class, function (Faker $faker) { 9 | return [ 10 | 'title' => $faker->word, 11 | 'external_id' => $faker->uuid, 12 | 'type' => $faker->randomElement(['pieces', 'hours', 'days', 'session', 'kg', 'package']), 13 | 'quantity' => $faker->randomNumber(1), 14 | 'price' => $faker->randomNumber(4), 15 | ]; 16 | }); 17 | -------------------------------------------------------------------------------- /database/factories/LeadFactory.php: -------------------------------------------------------------------------------- 1 | define(Lead::class, function (Faker $faker) { 10 | return [ 11 | 'title' => $faker->sentence, 12 | 'external_id' => $faker->uuid, 13 | 'description' => $faker->paragraph, 14 | 'user_created_id' => factory(User::class), 15 | 'user_assigned_id' => factory(User::class), 16 | 'client_id' => factory(\App\Models\Client::class), 17 | 'status_id' => $faker->numberBetween($min = 5, $max = 8), 18 | 'deadline' => $faker->dateTimeThisYear($max = 'now'), 19 | 'created_at' => $faker->dateTimeThisYear($max = 'now'), 20 | 'updated_at' => $faker->dateTimeThisYear($max = 'now'), 21 | ]; 22 | }); 23 | -------------------------------------------------------------------------------- /database/factories/MailFactory.php: -------------------------------------------------------------------------------- 1 | define(Mail::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/factories/OfferFactory.php: -------------------------------------------------------------------------------- 1 | define(Offer::class, function (Faker $faker) { 13 | return [ 14 | 'external_id' => Uuid::uuid4()->toString(), 15 | 'client_id' => factory(Client::class), 16 | 'status' => OfferStatus::inProgress()->getStatus(), 17 | 'source_id' => factory(Lead::class), 18 | 'source_type' => Lead::class, 19 | ]; 20 | }); 21 | -------------------------------------------------------------------------------- /database/factories/PaymentFactory.php: -------------------------------------------------------------------------------- 1 | define(Payment::class, function (Faker $faker) { 9 | return [ 10 | 'external_id' => $faker->uuid, 11 | 'invoice_id' => factory(\App\Models\Invoice::class), 12 | 'amount' => 1000, 13 | 'payment_date' => today(), 14 | 'payment_source' => 'bank' 15 | ]; 16 | }); 17 | -------------------------------------------------------------------------------- /database/factories/ProductFactory.php: -------------------------------------------------------------------------------- 1 | define(Product::class, function (Faker $faker) { 10 | return [ 11 | 'name' => $faker->name, 12 | 'external_id' => $faker->uuid, 13 | 'description' => $faker->text(), 14 | 'number' => Uuid::uuid1()->toString(), 15 | 'price' => $faker->numberBetween(1000,10000), 16 | 'default_type' => 'hours', 17 | 'archived' => false, 18 | ]; 19 | }); 20 | -------------------------------------------------------------------------------- /database/factories/ProjectFactory.php: -------------------------------------------------------------------------------- 1 | define(Project::class, function (Faker $faker) { 10 | 11 | return [ 12 | 'title' => $faker->sentence, 13 | 'external_id' => $faker->uuid, 14 | 'description' => $faker->paragraph, 15 | 'user_created_id' => factory(User::class), 16 | 'user_assigned_id' => factory(User::class), 17 | 'client_id' => factory(App\Models\Client::class), 18 | 'status_id' => $faker->numberBetween($min = 1, $max = 4), 19 | 'deadline' => $faker->dateTimeThisYear($max = 'now'), 20 | 'created_at' => $faker->dateTimeThisYear($max = 'now'), 21 | 'updated_at' => $faker->dateTimeThisYear($max = 'now'), 22 | ]; 23 | }); 24 | -------------------------------------------------------------------------------- /database/factories/RoleFactory.php: -------------------------------------------------------------------------------- 1 | define(Role::class, function (Faker $faker) { 9 | return [ 10 | 'name' => 'factory', 11 | 'external_id' => $faker->uuid, 12 | 'display_name' => 'Factory Role', 13 | 'description' => 'Mock role', 14 | 15 | ]; 16 | }); 17 | -------------------------------------------------------------------------------- /database/factories/SettingFactory.php: -------------------------------------------------------------------------------- 1 | define(Setting::class, function (Faker $faker) { 9 | return [ 10 | 'client_number' => 10000, 11 | 'invoice_number' => 10000, 12 | 'company' => "test company", 13 | 'max_users' => 10, 14 | 15 | ]; 16 | }); 17 | -------------------------------------------------------------------------------- /database/factories/StatusFactory.php: -------------------------------------------------------------------------------- 1 | define(Status::class, function (Faker $faker) { 9 | return [ 10 | 'external_id' => $faker->uuid, 11 | 'title' => $faker->word, 12 | 'color' => '#000', 13 | 14 | ]; 15 | }); 16 | -------------------------------------------------------------------------------- /database/factories/TaskFactory.php: -------------------------------------------------------------------------------- 1 | define(Task::class, function (Faker $faker) { 10 | return [ 11 | 'title' => $faker->sentence, 12 | 'external_id' => $faker->uuid, 13 | 'description' => $faker->paragraph, 14 | 'user_created_id' => factory(User::class), 15 | 'user_assigned_id' => factory(User::class), 16 | 'client_id' => factory(\App\Models\Client::class), 17 | 'status_id' => $faker->numberBetween($min = 1, $max = 4), 18 | 'deadline' => $faker->dateTimeThisYear($max = 'now'), 19 | 'created_at' => $faker->dateTimeThisYear($max = 'now'), 20 | 'updated_at' => $faker->dateTimeThisYear($max = 'now'), 21 | 22 | ]; 23 | }); 24 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | define(User::class, function (Faker $faker) { 9 | return [ 10 | 'name' => $faker->name, 11 | 'external_id' => $faker->uuid, 12 | 'email' => $faker->email, 13 | 'password' => bcrypt('secretpassword'), 14 | 'address' => $faker->secondaryAddress(), 15 | 'primary_number' => $faker->randomNumber(8), 16 | 'secondary_number' => $faker->randomNumber(8), 17 | 'remember_token' => null, 18 | 'language' => 'en', 19 | ]; 20 | }); 21 | 22 | $factory->afterCreating(User::class, function ($user, $faker) { 23 | $user->department()->attach(\App\Models\Department::first()->id); 24 | }); 25 | -------------------------------------------------------------------------------- /database/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/database/migrations/.gitkeep -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token')->index(); 19 | $table->timestamp('created_at'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::drop('password_resets'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2015_06_04_124835_create_industries_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('external_id'); 18 | $table->string('name'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::drop('industries'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/migrations/2015_10_15_143830_create_status_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('external_id'); 19 | $table->string('title'); 20 | $table->string('source_type'); 21 | $table->string('color')->default('#000000'); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | DB::statement('SET FOREIGN_KEY_CHECKS = 0'); 34 | Schema::drop('statuses'); 35 | DB::statement('SET FOREIGN_KEY_CHECKS = 1'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2015_12_29_154026_create_invocies_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('external_id'); 18 | $table->string('status'); 19 | $table->string('invoice_no')->nullable(); 20 | $table->dateTime('sent_at')->nullable(); 21 | $table->dateTime('payment_received_at')->nullable(); 22 | $table->dateTime('due_at')->nullable(); 23 | $table->integer('client_id')->unsigned(); 24 | $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 25 | $table->softDeletes(); 26 | $table->timestamps(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | Schema::drop('invoices'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2016_01_10_204413_create_comments_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('external_id'); 19 | $table->text('description'); 20 | $table->morphs('source'); 21 | $table->integer('user_id')->unsigned(); 22 | $table->foreign('user_id')->references('id')->on('users'); 23 | $table->softDeletes(); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | DB::statement('SET FOREIGN_KEY_CHECKS = 0'); 36 | Schema::drop('comments'); 37 | DB::statement('SET FOREIGN_KEY_CHECKS = 1'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2016_01_23_144854_settings.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->integer('client_number'); 18 | $table->integer('invoice_number'); 19 | $table->string('country')->nullable(); 20 | $table->string('company')->nullable(); 21 | $table->integer('max_users'); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('settings'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2016_01_26_003903_documents.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('external_id'); 18 | $table->string('size'); 19 | $table->string('path'); 20 | $table->string('original_filename'); 21 | $table->string('mime'); 22 | $table->string('integration_id')->nullable(); 23 | $table->string('integration_type'); 24 | $table->morphs('source'); 25 | $table->softDeletes(); 26 | $table->timestamps(); 27 | }); 28 | } 29 | 30 | /** 31 | * Reverse the migrations. 32 | * 33 | * @return void 34 | */ 35 | public function down() 36 | { 37 | DB::statement('SET FOREIGN_KEY_CHECKS = 0'); 38 | Schema::drop('documents'); 39 | DB::statement('SET FOREIGN_KEY_CHECKS = 1'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /database/migrations/2016_03_21_171847_create_department_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('external_id'); 18 | $table->string('name'); 19 | $table->text('description')->nullable(); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('departments'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2016_03_21_172416_create_department_user_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->integer('department_id')->unsigned(); 18 | $table->foreign('department_id')->references('id')->on('departments')->onDelete('cascade'); 19 | $table->integer('user_id')->unsigned(); 20 | $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | DB::statement('SET FOREIGN_KEY_CHECKS = 0'); 33 | Schema::drop('department_user'); 34 | DB::statement('SET FOREIGN_KEY_CHECKS = 1'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2016_04_06_230504_integrations.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('name'); 18 | $table->integer('client_id')->nullable(); 19 | $table->integer('user_id')->nullable(); 20 | $table->integer('client_secret')->nullable(); 21 | $table->string('api_key')->nullable(); 22 | $table->string('api_type')->nullable(); 23 | $table->string('org_id')->nullable(); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::drop('integrations'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /database/migrations/2016_05_21_205532_create_activities_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 15 | $table->string('external_id'); 16 | $table->string('log_name')->nullable(); 17 | $table->unsignedBigInteger('causer_id')->nullable(); 18 | $table->string('causer_type')->nullable(); 19 | $table->string('text'); 20 | $table->string('source_type'); 21 | $table->unsignedBigInteger('source_id')->nullable(); 22 | $table->string('ip_address', 64); 23 | $table->json('properties')->nullable(); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down() 32 | { 33 | Schema::drop('activities'); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /database/migrations/2016_11_04_200855_create_notifications_table.php: -------------------------------------------------------------------------------- 1 | uuid('id')->primary(); 17 | $table->string('type'); 18 | $table->morphs('notifiable'); 19 | $table->text('data'); 20 | $table->timestamp('read_at')->nullable(); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('notifications'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2019_11_29_092917_add_vat_and_currency.php: -------------------------------------------------------------------------------- 1 | string("currency", 3)->default("USD")->after("company"); 18 | $table->smallInteger("vat")->default(725)->after("currency"); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::table('settings', function (Blueprint $table) { 30 | $table->dropColumn("currency"); 31 | $table->dropColumn("vat"); 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2019_11_29_111929_add_invoice_number_to_invoice.php: -------------------------------------------------------------------------------- 1 | bigInteger('invoice_number')->nullable()->after('status'); 18 | $table->dropColumn('invoice_no'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::table('invoices', function (Blueprint $table) { 30 | $table->dropColumn('invoice_number'); 31 | $table->bigInteger('invoice_no')->nullable(); 32 | }); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2019_12_19_200049_add_billing_integration_id_to_invoices.php: -------------------------------------------------------------------------------- 1 | string('integration_invoice_id')->nullable()->after('due_at'); 18 | $table->string('integration_type')->nullable()->after('integration_invoice_id'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::table('invoices', function (Blueprint $table) { 30 | $table->dropColumn(['integration_invoice_id', 'integration_type']); 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2020_04_06_075838_create_business_hours_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 18 | $table->string('day'); 19 | $table->time("open_time")->nullable(); 20 | $table->time("close_time")->nullable(); 21 | $table->integer('settings_id')->unsigned()->nullable(); 22 | $table->foreign('settings_id')->references('id')->on('settings') 23 | ->onUpdate('cascade')->onDelete('cascade'); 24 | 25 | $table->timestamps(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('business_hours'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/migrations/2020_09_29_173256_add_soft_delete_to_tables.php: -------------------------------------------------------------------------------- 1 | softDeletes(); 18 | }); 19 | 20 | Schema::table('appointments', function (Blueprint $table) { 21 | $table->softDeletes(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::table('activities', function (Blueprint $table) { 33 | $table->dropSoftDeletes(); 34 | }); 35 | Schema::table('appointments', function (Blueprint $table) { 36 | $table->dropSoftDeletes(); 37 | }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /database/migrations/2021_01_09_102659_add_cascading_for_appointments.php: -------------------------------------------------------------------------------- 1 | dropForeign('appointments_client_id_foreign'); 18 | $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | // 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/migrations/2021_03_02_132033_alter_comments_table_add_long_text.php: -------------------------------------------------------------------------------- 1 | removeColumn('qualified'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | * 24 | * @return void 25 | */ 26 | public function down() 27 | { 28 | Schema::table('leads', function (Blueprint $table) { 29 | $table->boolean("qualified")->index()->after("user_created_id")->default(false); 30 | }); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/database/seeds/.gitkeep -------------------------------------------------------------------------------- /database/seeds/ClientsDummyTableSeeder.php: -------------------------------------------------------------------------------- 1 | create()->each(function ($c) { 16 | factory(\App\Models\Contact::class)->create([ 17 | 'client_id' => $c->id 18 | ]); 19 | }); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call('StatusTableSeeder'); 15 | $this->call('UsersTableSeeder'); 16 | $this->call('IndustriesTableSeeder'); 17 | $this->call('DepartmentsTableSeeder'); 18 | $this->call('SettingsTableSeeder'); 19 | $this->call('PermissionsTableSeeder'); 20 | $this->call('RolesTablesSeeder'); 21 | $this->call('RolePermissionTableSeeder'); 22 | $this->call('UserRoleTableSeeder'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /database/seeds/DepartmentsTableSeeder.php: -------------------------------------------------------------------------------- 1 | id = '1'; 18 | $department->external_id = Uuid::uuid4(); 19 | $department->name = 'Management'; 20 | $department->save(); 21 | 22 | \DB::table('department_user')->insert([ 23 | 'department_id' => 1, 24 | 'user_id' => 1 25 | ]); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/seeds/DummyDatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call('UsersDummyTableSeeder'); 15 | $this->call('ClientsDummyTableSeeder'); 16 | $this->call('TasksDummyTableSeeder'); 17 | $this->call('LeadsDummyTableSeeder'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/seeds/LeadsDummyTableSeeder.php: -------------------------------------------------------------------------------- 1 | create()->each(function ($l) { 17 | if(rand(0, 5) == 1) { 18 | factory(App\Models\Comment::class, 3)->create([ 19 | 'source_type' => Lead::class, 20 | 'source_id' => $l->id, 21 | 'user_id' => User::all()->random()->id, 22 | ]); 23 | } 24 | factory(App\Models\Comment::class, 2)->create([ 25 | 'source_type' => Lead::class, 26 | 'source_id' => $l->id, 27 | 'user_id' => User::all()->random()->id, 28 | ]); 29 | }); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/seeds/OfferSeeder.php: -------------------------------------------------------------------------------- 1 | first(); 16 | foreach (\App\Models\Permission::all() as $permission) { 17 | PermissionRole::create([ 18 | 'role_id' => $role->id, 19 | 'permission_id' => $permission->id 20 | ]); 21 | } 22 | 23 | $role = \App\Models\Role::where('name', \App\Models\Role::ADMIN_ROLE)->first(); 24 | foreach (\App\Models\Permission::all() as $permission) { 25 | PermissionRole::create([ 26 | 'role_id' => $role->id, 27 | 'permission_id' => $permission->id 28 | ]); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/seeds/UserRoleTableSeeder.php: -------------------------------------------------------------------------------- 1 | role_id = '1'; 17 | $newrole->user_id = '1'; 18 | $newrole->timestamps = false; 19 | $newrole->save(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /database/seeds/UsersTableSeeder.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | \DB::table('users')->insert(array( 19 | 0 => 20 | array( 21 | 'id' => 1, 22 | 'external_id' => Uuid::uuid4(), 23 | 'name' => 'Admin', 24 | 'email' => 'admin@admin.com', 25 | 'password' => bcrypt('admin123'), 26 | 'address' => '', 27 | 'primary_number' => null, 28 | 'secondary_number' => null, 29 | 'image_path' => '', 30 | 'remember_token' => null, 31 | 'created_at' => '2016-06-04 13:42:19', 32 | 'updated_at' => '2016-06-04 13:42:19', 33 | ), 34 | )); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docker-compose.env: -------------------------------------------------------------------------------- 1 | APP_ENV=local 2 | APP_DEBUG=true 3 | APP_KEY=base64:EqIIgNhMb5heanJyMvuY3mwvIkaVESHJzYfFHsEoqK2= 4 | APP_URL=http://nginx 5 | 6 | DB_HOST=localhost 7 | DB_DATABASE=daybyday 8 | DB_USERNAME=root 9 | DB_PASSWORD=root 10 | 11 | CACHE_DRIVER=redis 12 | SESSION_DRIVER=file 13 | QUEUE_DRIVER=sync 14 | 15 | REDIS_HOST=redis 16 | REDIS_PASSWORD=null 17 | REDIS_PORT=6379 18 | 19 | ELASTICSEARCH_ENABLED=false 20 | ELASTICSEARCH_HOST=elasticsearchPrimary 21 | -------------------------------------------------------------------------------- /docker-config/php.ini: -------------------------------------------------------------------------------- 1 | [Date] 2 | date.timezone="UTC" 3 | -------------------------------------------------------------------------------- /docker-config/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | logfile=/dev/null 4 | logfile_maxbytes=0 5 | pidfile=/run/supervisord.pid 6 | 7 | [program:php-fpm] 8 | command=php-fpm7 -F 9 | stdout_logfile=/dev/stdout 10 | stdout_logfile_maxbytes=0 11 | stderr_logfile=/dev/stderr 12 | stderr_logfile_maxbytes=0 13 | autorestart=false 14 | startretries=0 15 | 16 | [program:nginx] 17 | command=nginx -g 'daemon off;' 18 | stdout_logfile=/dev/stdout 19 | stdout_logfile_maxbytes=0 20 | stderr_logfile=/dev/stderr 21 | stderr_logfile_maxbytes=0 22 | autorestart=false 23 | startretries=0 24 | -------------------------------------------------------------------------------- /phpunit.dusk.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | ./tests/Browser 20 | 21 | 22 | 23 | 24 | ./src 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes... 9 | RewriteRule ^(.*)/$ /$1 [L,R=301] 10 | 11 | # Handle Front Controller... 12 | RewriteCond %{REQUEST_FILENAME} !-d 13 | RewriteCond %{REQUEST_FILENAME} !-f 14 | RewriteRule ^ index.php [L] 15 | 16 | -------------------------------------------------------------------------------- /public/css/font/summernote.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/font/summernote.eot -------------------------------------------------------------------------------- /public/css/font/summernote.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/font/summernote.ttf -------------------------------------------------------------------------------- /public/css/font/summernote.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/font/summernote.woff -------------------------------------------------------------------------------- /public/css/fonts/Flaticon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/Flaticon.eot -------------------------------------------------------------------------------- /public/css/fonts/Flaticon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/Flaticon.ttf -------------------------------------------------------------------------------- /public/css/fonts/Flaticon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/Flaticon.woff -------------------------------------------------------------------------------- /public/css/fonts/Flaticon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/Flaticon.woff2 -------------------------------------------------------------------------------- /public/css/fonts/flaticon2/Flaticon2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/flaticon2/Flaticon2.woff -------------------------------------------------------------------------------- /public/css/fonts/line-awesome/line-awesome.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/fonts/line-awesome/line-awesome.woff2 -------------------------------------------------------------------------------- /public/css/jquery.atwho.min.css: -------------------------------------------------------------------------------- 1 | .atwho-view{position:absolute;top:0;left:0;display:none;margin-top:18px;background:#fff;color:#000;border:1px solid #DDD;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.1);min-width:120px;z-index:11110!important}.atwho-view .atwho-header{padding:5px;margin:5px;cursor:pointer;border-bottom:solid 1px #eaeff1;color:#6f8092;font-size:11px;font-weight:700}.atwho-view .atwho-header .small{color:#6f8092;float:right;padding-top:2px;margin-right:-5px;font-size:12px;font-weight:400}.atwho-view .atwho-header:hover{cursor:default}.atwho-view .cur{background:#36F;color:#fff}.atwho-view .cur small{color:#fff}.atwho-view strong{color:#36F}.atwho-view .cur strong{color:#fff;font:700}.atwho-view ul{list-style:none;padding:0;margin:auto;max-height:200px;overflow-y:auto}.atwho-view ul li{display:block;padding:5px 10px;border-bottom:1px solid #DDD;cursor:pointer}.atwho-view small{font-size:smaller;color:#777;font-weight:400} -------------------------------------------------------------------------------- /public/css/prepared/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/prepared/sort_asc.png -------------------------------------------------------------------------------- /public/css/prepared/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/prepared/sort_asc_disabled.png -------------------------------------------------------------------------------- /public/css/prepared/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/prepared/sort_both.png -------------------------------------------------------------------------------- /public/css/prepared/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/prepared/sort_desc.png -------------------------------------------------------------------------------- /public/css/prepared/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/css/prepared/sort_desc_disabled.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /public/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/fonts/element-icons.a61be9c.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/element-icons.a61be9c.eot -------------------------------------------------------------------------------- /public/fonts/element-icons.b02bdc1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/element-icons.b02bdc1.ttf -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /public/fonts/vendor/element-ui/lib/theme-default/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/element-ui/lib/theme-default/element-icons.ttf -------------------------------------------------------------------------------- /public/fonts/vendor/element-ui/lib/theme-default/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/fonts/vendor/element-ui/lib/theme-default/element-icons.woff -------------------------------------------------------------------------------- /public/images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/.DS_Store -------------------------------------------------------------------------------- /public/images/daybyday-logo-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/daybyday-logo-big.png -------------------------------------------------------------------------------- /public/images/daybyday-logo-white-with-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/daybyday-logo-white-with-bg.png -------------------------------------------------------------------------------- /public/images/daybyday-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/daybyday-logo-white.png -------------------------------------------------------------------------------- /public/images/daybyday-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/daybyday-logo.png -------------------------------------------------------------------------------- /public/images/default_avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/default_avatar.jpg -------------------------------------------------------------------------------- /public/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/images/favicon.png -------------------------------------------------------------------------------- /public/imagesIntegration/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/imagesIntegration/.DS_Store -------------------------------------------------------------------------------- /public/imagesIntegration/billy-logo-final_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/imagesIntegration/billy-logo-final_blue.png -------------------------------------------------------------------------------- /public/imagesIntegration/dinero-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/imagesIntegration/dinero-logo.png -------------------------------------------------------------------------------- /public/imagesIntegration/google-drive-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/public/imagesIntegration/google-drive-logo.png -------------------------------------------------------------------------------- /public/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /public/lang/dk/datatable.json: -------------------------------------------------------------------------------- 1 | { 2 | "decimal": "", 3 | "emptyTable": "Ingen data tilgængelige", 4 | "info": "Viser _START_ til _END_ ud af _TOTAL_ poster", 5 | "infoEmpty": "Viser 0 til 0 ud af 0 poster", 6 | "infoFiltered": "(filtreret fra _MAX_ totale poster)", 7 | "infoPostFix": "", 8 | "thousands": ",", 9 | "lengthMenu": "Vis _MENU_ poster", 10 | "loadingRecords": "Loader...", 11 | "processing": "processere...", 12 | "searchPlaceholder": "Søg", 13 | "search": "", 14 | "zeroRecords": "Ingen matchende poster fundet", 15 | "paginate": { 16 | "first": "Først", 17 | "last": "Sidste", 18 | "next": "Næste", 19 | "previous": "Forrige" 20 | }, 21 | "aria": { 22 | "sortAscending": ": Aktivér for at sortere kolonne stigende", 23 | "sortDescending": ": Aktivér for at sortere kolonne nedadgående" 24 | } 25 | } -------------------------------------------------------------------------------- /public/lang/en/datatable.json: -------------------------------------------------------------------------------- 1 | { 2 | "decimal": "", 3 | "emptyTable": "No data available in table", 4 | "info": "Showing _START_ to _END_ of _TOTAL_ entries", 5 | "infoEmpty": "Showing 0 to 0 of 0 entries", 6 | "infoFiltered": "(filtered from _MAX_ total entries)", 7 | "infoPostFix": "", 8 | "thousands": ",", 9 | "lengthMenu": "Show _MENU_ entries", 10 | "loadingRecords": "Loading...", 11 | "processing": "Processing...", 12 | "searchPlaceholder": "Search", 13 | "search": "", 14 | "zeroRecords": "No matching records found", 15 | "paginate": { 16 | "first": "First", 17 | "last": "Last", 18 | "next": "Next", 19 | "previous": "Previous" 20 | }, 21 | "aria": { 22 | "sortAscending": ": activate to sort column ascending", 23 | "sortDescending": ": activate to sort column descending" 24 | } 25 | } -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /resources/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/resources/.DS_Store -------------------------------------------------------------------------------- /resources/assets/js/components/Doughnut.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /resources/assets/js/components/Message.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /resources/assets/lang/datatables_test.json: -------------------------------------------------------------------------------- 1 | { 2 | "decimal": "", 3 | "emptyTable": "No data available in table", 4 | "info": "Showing _START_ to _END_ of _TOTAL_ entries", 5 | "infoEmpty": "Showing 0 to 0 of 0 entries", 6 | "infoFiltered": "(filtered from _MAX_ total entries)", 7 | "infoPostFix": "", 8 | "thousands": ",", 9 | "lengthMenu": "Show _MENU_ entries", 10 | "loadingRecords": "Loading...", 11 | "processing": "Processing...", 12 | "searchPlaceholder": "asdasd:", 13 | "zeroRecords": "No matching records found", 14 | "paginate": { 15 | "first": "First", 16 | "last": "Last", 17 | "next": "Next", 18 | "previous": "Previous" 19 | }, 20 | "aria": { 21 | "sortAscending": ": activate to sort column ascending", 22 | "sortDescending": ": activate to sort column descending" 23 | } 24 | } -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | // Fonts 2 | @import url('https://fonts.googleapis.com/css?family=Raleway:300,400,600'); 3 | @import url('https://fonts.googleapis.com/css?family=Lato:400,700,300'); 4 | @import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700'); 5 | @import url('https://fonts.googleapis.com/css?family=Poppins:300,400,500,700'); 6 | 7 | //Custom components 8 | @import 'components/base'; 9 | @import 'components/notifications'; 10 | @import 'components/topcontactinfo'; 11 | @import 'components/sidebar'; 12 | @import 'components/task-sidebar'; 13 | @import 'components/dashboard'; 14 | @import 'components/datatables'; 15 | @import 'components/tablet'; 16 | @import 'components/project-board'; 17 | @import 'components/button'; 18 | @import 'components/datatables-overwrite'; 19 | @import 'components/element-overrides'; 20 | @import 'components/invoice'; 21 | 22 | -------------------------------------------------------------------------------- /resources/assets/sass/components/element-overrides.scss: -------------------------------------------------------------------------------- 1 | .el-tabs__item.is-active { 2 | color: $primary-color !important; 3 | } 4 | 5 | .el-tabs__active-bar { 6 | background-color: $secondary-color !important; 7 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/invoice.scss: -------------------------------------------------------------------------------- 1 | .invoice-title { 2 | @extend .tablet__head-title; 3 | font-size:1.6rem; 4 | margin-bottom: 0 !important; 5 | } 6 | 7 | .invoice-info { 8 | color: #797979; 9 | margin-bottom: 0 !important; 10 | font-size: 1.1rem; 11 | } 12 | 13 | .invoice-info-title { 14 | font-size:1.3rem; 15 | color: #6b6b6b; 16 | margin-bottom: 0 !important; 17 | } 18 | 19 | .invoice-info-subtext { 20 | font-size:1.3rem; 21 | color: #3a3a3a; 22 | font-weight: 400; 23 | } 24 | 25 | .final-price { 26 | font-size: 1.2em; 27 | font-weight: 400; 28 | } 29 | .trashcan-icon { 30 | padding-left: 1em !important; 31 | color:#95969a; 32 | } 33 | 34 | .trashcan-icon:hover { 35 | color:$danger-color; 36 | } -------------------------------------------------------------------------------- /resources/assets/sass/components/task-sidebar.scss: -------------------------------------------------------------------------------- 1 | .assignee-input { 2 | padding: 0; 3 | } 4 | .small-form-control { 5 | width: 100%; 6 | } -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /resources/assets/sass/font-awesome/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /resources/assets/sass/vendor.scss: -------------------------------------------------------------------------------- 1 | // resources/assets/sass/vendor.scss 2 | // 3rd party packages that was installed by npm 3 | $icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; 4 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 14 | 'next' => 'Next »', 15 | ]; 16 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 14 | 'reset' => 'Your password has been reset!', 15 | 'sent' => 'We have e-mailed your password reset link!', 16 | 'token' => 'This password reset token is invalid.', 17 | 'user' => "We can't find a user with that e-mail address.", 18 | ]; 19 | -------------------------------------------------------------------------------- /resources/views/auth/emails/password.blade.php: -------------------------------------------------------------------------------- 1 | Click here to reset your password: {{ $link }} 2 | -------------------------------------------------------------------------------- /resources/views/clients/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | @section('heading') 3 | {{ __('Edit Client :client' , ['client' => '(' . $client->name. ')']) }} 4 | @stop 5 | 6 | @section('content') 7 | {!! Form::model($client, [ 8 | 'method' => 'PATCH', 9 | 'route' => ['clients.update', $client->external_id], 10 | ]) !!} 11 | @include('clients.form', ['submitButtonText' => __('Update client')]) 12 | 13 | {!! Form::close() !!} 14 | 15 | @stop -------------------------------------------------------------------------------- /resources/views/departments/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | @section('heading') 3 | {{__('Create department')}} 4 | @stop 5 | 6 | @section('content') 7 | {!! Form::open([ 8 | 'route' => 'departments.store', 9 | ]) !!} 10 | 11 |
12 | {!! Form::label('Name', __('Department name') . ':', ['class' => 'control-label thin-weight']) !!} 13 | {!! Form::text('name', null,['class' => 'form-control']) !!} 14 |
15 | 16 |
17 | {!! Form::label( __('Description'), __('Department description') . ':', ['class' => 'control-label thin-weight']) !!} 18 | {!! Form::textarea('description', null, ['class' => 'form-control']) !!} 19 |
20 | {!! Form::submit(__("Create Department"), ['class' => 'btn btn-md btn-brand']) !!} 21 | 22 | {!! Form::close() !!} 23 | 24 | @endsection -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 33 | 34 | 35 |
36 |
37 |
Be right back.
38 |
39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /resources/views/images/_uploadAvatarPreview.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/leads/_timeline.blade.php: -------------------------------------------------------------------------------- 1 |
2 | @foreach($lead->activity()->orderBy('id', 'desc')->get() as $activity) 3 |
4 |
{{date(carbonFullDateWithText(), strTotime($activity->created_at))}}
5 |
{{$activity->text}}
6 |
7 | @endforeach 8 |
9 | -------------------------------------------------------------------------------- /resources/views/leads/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | @section('heading') 3 | {{__('All Leads')}} 4 | @stop 5 | 6 | @section('content') 7 | 8 | @stop 9 | 10 | -------------------------------------------------------------------------------- /resources/views/pages/_createdGraph.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{ __('Created last 14 days') }}

5 |
6 |
7 |
8 |
9 | 10 |
11 |
12 | 15 |
16 | -------------------------------------------------------------------------------- /resources/views/roles/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | 3 | @section('content') 4 | {!! Form::open([ 5 | 'route' => 'roles.store', 6 | ]) !!} 7 | 8 |
9 | {!! Form::label('name', __('Name'), ['class' => 'control-label']) !!} 10 | {!! Form::text('name', null,['class' => 'form-control']) !!} 11 |
12 | 13 |
14 | {!! Form::label('description', __('Description'), ['class' => 'control-label']) !!} 15 | {!! Form::textarea('description', null, ['class' => 'form-control']) !!} 16 |
17 | {!! Form::submit( __('Add new Role'), ['class' => 'btn btn-md btn-brand']) !!} 18 | 19 | {!! Form::close() !!} 20 | 21 | @endsection -------------------------------------------------------------------------------- /resources/views/tasks/_time_management.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | @foreach($invoice_lines as $invoice_line) 9 | 10 | 11 | 12 | 13 | 14 | @endforeach 15 | 16 | 17 |
{{ __('Title') }}{{ __('Time') }}{{ __('Type') }}
{{$invoice_line->title}}{{$invoice_line->quantity}} {{$invoice_line->type}}
-------------------------------------------------------------------------------- /resources/views/tasks/_timeline.blade.php: -------------------------------------------------------------------------------- 1 |
2 | @foreach($tasks->activity()->orderBy('id', 'desc')->get() as $activity) 3 |
4 |
{{date(carbonFullDateWithText(), strTotime($activity->created_at))}}
5 |
{{$activity->text}}
6 |
7 | @endforeach 8 |
9 | -------------------------------------------------------------------------------- /resources/views/users/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | @section('heading') 3 | {{ __('Create user') }} 4 | @stop 5 | 6 | @section('content') 7 | {!! Form::open([ 8 | 'route' => 'users.store', 9 | 'files'=>true, 10 | 'enctype' => 'multipart/form-data' 11 | 12 | ]) !!} 13 | @include('users.form', ['submitButtonText' => __('Create user')]) 14 | 15 | {!! Form::close() !!} 16 | 17 | 18 | @stop 19 | 20 | @push('scripts') 21 | @include('images._uploadAvatarPreview') 22 | @endpush -------------------------------------------------------------------------------- /resources/views/users/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | 3 | @section('heading') 4 | {{ __('Edit user') }} 5 | @stop 6 | 7 | @section('content') 8 | 9 | 10 | {!! Form::model($user, [ 11 | 'method' => 'PATCH', 12 | 'route' => ['users.update', $user->external_id], 13 | 'files'=>true, 14 | 'enctype' => 'multipart/form-data' 15 | ]) !!} 16 | {!! Form::close() !!} 17 |
22 | @method('PATCH') 23 | {{csrf_field()}} 24 | @include('users.form', ['submitButtonText' => __('Update user')]) 25 |
26 | 27 | @stop 28 | 29 | @push('scripts') 30 | @include('images._uploadAvatarPreview') 31 | @endpush 32 | -------------------------------------------------------------------------------- /resources/views/vendor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/resources/views/vendor/.gitkeep -------------------------------------------------------------------------------- /resources/views/vendor/datatables/script.blade.php: -------------------------------------------------------------------------------- 1 | (function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["%1$s"]=$("#%1$s").DataTable(%2$s);})(window,jQuery); 2 | -------------------------------------------------------------------------------- /resources/views/vendor/installer/install/finish.blade.php: -------------------------------------------------------------------------------- 1 | @extends('installer::layouts.master') 2 | 3 | @section('container') 4 |
5 |
6 |

7 | 8 | @lang('installer::installer.final.title') 9 |

10 |
11 |
12 | @if (Session::has('message')) 13 |
14 | {{ Session::get('message') }} 15 |
16 | @endif 17 | aaaaaaaaaaa 18 |
19 |
20 | @stop -------------------------------------------------------------------------------- /resources/views/vendor/installer/update/home.blade.php: -------------------------------------------------------------------------------- 1 | @extends('installer::layouts.master') 2 | 3 | @section('container') 4 |
5 |
6 |

7 | 8 | {{ trans('installer::installer.upgrade.title') }} 9 |

10 |
11 |
12 | 13 | @if(!$errors->isEmpty()) 14 |
15 |
16 |
    17 | @foreach($errors->all() as $error) 18 |
  • {{ $error }}
  • 19 | @endforeach 20 |
21 |
22 |
23 | @endif 24 | 25 |

26 | {{ trans('installer::installer.upgrade.welcome', ['current' => $currentVersion, 'latest' => $last_version]) }} 27 |

28 | 29 | {{ trans('installer::installer.upgrade.button') }} 30 | 31 |
32 |
33 | @stop -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/footer.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/header.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ $slot }} 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @isset($subcopy) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endisset 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/panel.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 |
4 | 5 | 6 | 9 | 10 |
7 | {{ $slot }} 8 |
11 |
14 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/html/table.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{ Illuminate\Mail\Markdown::parse($slot) }} 3 |
4 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/button.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }}: {{ $url }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/footer.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/header.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/layout.blade.php: -------------------------------------------------------------------------------- 1 | {!! strip_tags($header) !!} 2 | 3 | {!! strip_tags($slot) !!} 4 | @isset($subcopy) 5 | 6 | {!! strip_tags($subcopy) !!} 7 | @endisset 8 | 9 | {!! strip_tags($footer) !!} 10 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/message.blade.php: -------------------------------------------------------------------------------- 1 | @component('mail::layout') 2 | {{-- Header --}} 3 | @slot('header') 4 | @component('mail::header', ['url' => config('app.url')]) 5 | {{ config('app.name') }} 6 | @endcomponent 7 | @endslot 8 | 9 | {{-- Body --}} 10 | {{ $slot }} 11 | 12 | {{-- Subcopy --}} 13 | @isset($subcopy) 14 | @slot('subcopy') 15 | @component('mail::subcopy') 16 | {{ $subcopy }} 17 | @endcomponent 18 | @endslot 19 | @endisset 20 | 21 | {{-- Footer --}} 22 | @slot('footer') 23 | @component('mail::footer') 24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') 25 | @endcomponent 26 | @endslot 27 | @endcomponent 28 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/panel.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/promotion.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/promotion/button.blade.php: -------------------------------------------------------------------------------- 1 | [{{ $slot }}]({{ $url }}) 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/subcopy.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/mail/text/table.blade.php: -------------------------------------------------------------------------------- 1 | {{ $slot }} 2 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-bootstrap-4.blade.php: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /resources/views/vendor/pagination/simple-default.blade.php: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/breadcrumb.blade.php: -------------------------------------------------------------------------------- 1 |
    2 | @php($isCurrent = true) 3 | @foreach($allSteps as $id => $step) 4 | @php($cssClass = ($isCurrent ? 'sw-current' : '')) 5 | 6 |
  1. 7 |
  2. {!! trans('setup_wizard::steps.' . $id . '.breadcrumb') !!}
  3. 8 | 9 | @if(\SetupWizard::isCurrent($id)) 10 | @php($isCurrent = false) 11 | @endif 12 | @endforeach 13 | 14 |
  4. 15 |
-------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/navigation.blade.php: -------------------------------------------------------------------------------- 1 | @unless (SetupWizard::isFirst()) 2 | {{ Form::submit(trans('setup_wizard::views.nav.back'), [ 3 | 'name' => 'wizard-action-back', 4 | 'class' => 'btn btn-default btn-back', 5 | ]) }} 6 | @endunless 7 | 8 | @if (SetupWizard::isLast()) 9 | {{ Form::submit(trans('setup_wizard::views.nav.done'), [ 10 | 'name' => 'wizard-action-next', 11 | 'class' => 'btn btn-primary', 12 | ]) }} 13 | @else 14 | {{ Form::submit(trans('setup_wizard::views.nav.next'), [ 15 | 'name' => 'wizard-action-next', 16 | 'class' => 'btn btn-primary', 17 | ]) }} 18 | @endif -------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/steps/database.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {!! Form::label('name', 'Name:', ['class' => 'control-label']) !!} 3 | {!! Form::text('name', null, ['class' => 'form-control']) !!} 4 |
5 |
6 | {!! Form::label('email', 'Email:', ['class' => 'control-label']) !!} 7 | {!! Form::email('email', null, ['class' => 'form-control']) !!} 8 |
9 |
10 | {!! Form::label('password', 'Password:', ['class' => 'control-label']) !!} 11 | {!! Form::password('password', ['class' => 'form-control']) !!} 12 |
13 | 14 |
15 | {!! Form::label('password_confirmation', 'Password Confirmation:', ['class' => 'control-label']) !!} 16 | {!! Form::password('password_confirmation', ['class' => 'form-control']) !!} 17 |
-------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/steps/env.blade.php: -------------------------------------------------------------------------------- 1 |
2 | {{ Form::textarea('file_content', $sampleContent, [ 3 | 'class' => 'form-control' 4 | ]) }} 5 | 6 | 7 | 8 |

{!! trans('setup_wizard::steps.env.view.help_text') !!}

9 |
-------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/steps/final.blade.php: -------------------------------------------------------------------------------- 1 |

{!! trans('setup_wizard::steps.final.view.ready_to_go') !!}

-------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/steps/folders.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/partials/steps/requirements.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/vendor/setup_wizard/steps/default.blade.php: -------------------------------------------------------------------------------- 1 | @extends('setup_wizard::layouts.wizard') 2 | 3 | @section('page.title') 4 | {{ trans('setup_wizard::steps.' . $currentStep->getId() . '.title') }} 5 | @endsection 6 | 7 | @section('wizard.header') 8 |

{!! trans('setup_wizard::steps.' . $currentStep->getId() . '.title') !!}

9 | @endsection 10 | 11 | @section('wizard.breadcrumb') 12 | @include('setup_wizard::partials.breadcrumb') 13 | @endsection 14 | 15 | @section('wizard.errors') 16 | @if ($errors->has()) 17 |
18 | @foreach ($errors->all() as $error) 19 |

{{ $error }}

20 | @endforeach 21 |
22 | @endif 23 | @endsection 24 | 25 | @section('wizard.description') 26 |

{!! trans('setup_wizard::steps.' . $currentStep->getId() . '.description') !!}

27 | @endsection 28 | 29 | @section('wizard.form') 30 | @include('setup_wizard::partials.steps.' . $currentStep->getId(), $currentStep->getFormData()) 31 | @endsection 32 | 33 | @section('wizard.navigation') 34 | @include('setup_wizard::partials.navigation') 35 | @endsection 36 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | 'App\Api\v1\Controllers'], function () { 17 | Route::group(['middleware' => 'auth:api'], function () { 18 | Route::get('users', ['uses' => 'UserController@index']); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | }); 19 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /storage/BYqK2rTW0CrDBA4r9tMRobzUQmAM4GYh0As0JjVc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/BYqK2rTW0CrDBA4r9tMRobzUQmAM4GYh0As0JjVc.png -------------------------------------------------------------------------------- /storage/Gm09rNCbGlmPeRC4jISkJPgOYHk0D1QOlh82GKt6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/Gm09rNCbGlmPeRC4jISkJPgOYHk0D1QOlh82GKt6.png -------------------------------------------------------------------------------- /storage/HWWHT3cGAI0AYe8r0TPLESqXNQUNeKI63MN5RITr.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/HWWHT3cGAI0AYe8r0TPLESqXNQUNeKI63MN5RITr.jpeg -------------------------------------------------------------------------------- /storage/YWPbmr8YNxw0UwbQRFBUfBhpVQUXAdcTCUMtsyJI.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/YWPbmr8YNxw0UwbQRFBUfBhpVQUXAdcTCUMtsyJI.jpeg -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | compiled.php 4 | services.json 5 | events.scanned.php 6 | routes.scanned.php 7 | down 8 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/tIXitATFGsMUrovgp4ZBObW8aE6M72n4R2lPXQVx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/tIXitATFGsMUrovgp4ZBObW8aE6M72n4R2lPXQVx.png -------------------------------------------------------------------------------- /storage/xliKs8QjnVnS4GkFEfwCan0YyUs6F6LsqaHoc5bA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bottelet/DaybydayCRM/40d7f5d7553df038a8fe44803bfc110b0292141c/storage/xliKs8QjnVnS4GkFEfwCan0YyUs6F6LsqaHoc5bA.png -------------------------------------------------------------------------------- /tests/Browser/Pages/HomePage.php: -------------------------------------------------------------------------------- 1 | '#selector', 38 | ]; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tests/Browser/Pages/Login.php: -------------------------------------------------------------------------------- 1 | assertSee('Login') 27 | ->assertSee('E-Mail Address') 28 | ->assertInputValue('email', '') 29 | ->assertSee('Password') 30 | ->assertInputValue('password', '') 31 | ->assertNotChecked('remember') 32 | ->assertSee('Login') 33 | ->assertSee('Forgot Your Password?'); 34 | } 35 | /** 36 | * Get the element shortcuts for the page. 37 | * 38 | * @return array 39 | */ 40 | public function elements() 41 | { 42 | return [ 43 | // 44 | ]; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /tests/Browser/Pages/Page.php: -------------------------------------------------------------------------------- 1 | '#selector', 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tests/Browser/console/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | user = User::where('name', 'Admin')->first(); 19 | 20 | $this->actingAs($this->user); 21 | } 22 | 23 | /** 24 | * @return mixed 25 | */ 26 | public function getUser() 27 | { 28 | return $this->user; 29 | } 30 | 31 | /** 32 | * @param mixed $user 33 | */ 34 | public function setUser($user): void 35 | { 36 | $this->user = $user; 37 | $this->actingAs($user); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /tests/Unit/Controllers/Task/DeleteTaskControllerTest.php: -------------------------------------------------------------------------------- 1 | task = factory(Task::class)->create(); 22 | 23 | $this->withoutMiddleware(VerifyCsrfToken::class); 24 | } 25 | 26 | /** @test */ 27 | public function deleteTask() 28 | { 29 | $this->json('DELETE', route('tasks.destroy', $this->task->external_id)); 30 | 31 | $this->assertSoftDeleted('tasks', ['id' => $this->task->id]); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/Unit/Invoice/CanUpdateInvoiceTest.php: -------------------------------------------------------------------------------- 1 | invoice = factory(Invoice::class)->create([ 21 | 'sent_at' => null 22 | ]); 23 | } 24 | 25 | /** @test */ 26 | public function happyPath() 27 | { 28 | $this->assertTrue($this->invoice->canUpdateInvoice()); 29 | } 30 | 31 | /** @test */ 32 | public function cantUpdateInvoiceIfItsSent() 33 | { 34 | $this->invoice->sent_at = today(); 35 | $this->invoice->save(); 36 | 37 | $this->assertFalse($this->invoice->canUpdateInvoice()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /tests/Unit/Invoice/RemoveReferenceTest.php: -------------------------------------------------------------------------------- 1 | invoice = factory(Invoice::class)->create([ 19 | 'sent_at' => null, 20 | 'integration_invoice_id' => factory(Lead::class)->create()->id, 21 | 'integration_type' => Lead::class, 22 | ]); 23 | } 24 | 25 | /** @test */ 26 | public function happyPath() 27 | { 28 | $this->assertNotNull($this->invoice->integration_invoice_id); 29 | $this->assertNotNull($this->invoice->integration_type); 30 | 31 | $this->invoice->removeReference(); 32 | 33 | $this->assertNull($this->invoice->integration_invoice_id); 34 | $this->assertNull($this->invoice->integration_type); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tests/Unit/Offer/SetStatusTest.php: -------------------------------------------------------------------------------- 1 | offer = factory(Offer::class)->create(); 21 | } 22 | 23 | /** @test */ 24 | public function setOfferAsWon() 25 | { 26 | $this->assertNotEquals("won", $this->offer->status); 27 | $this->offer->setAsWon(); 28 | 29 | $this->assertEquals("won", $this->offer->status); 30 | } 31 | 32 | /** @test */ 33 | public function setOfferAsList() 34 | { 35 | $this->assertNotEquals("lost", $this->offer->status); 36 | $this->offer->setAsLost(); 37 | 38 | $this->assertEquals("lost", $this->offer->status); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require('laravel-mix'); 2 | 3 | mix.js('resources/assets/js/app.js', 'public/js') 4 | .sass('resources/assets/sass/app.scss', 'public/css') 5 | .copy('node_modules/bootstrap-sass/assets/fonts/bootstrap/','public/fonts/bootstrap') 6 | .sass('resources/assets/sass/vendor.scss', './public/css/vendor.css') 7 | .extract(['bootstrap-sass']); 8 | 9 | 10 | mix.webpackConfig({ 11 | devServer: { 12 | proxy: { 13 | '*': 'http://localhost:80' 14 | } 15 | } 16 | }); 17 | 18 | // version does not work in hmr mode 19 | if (process.env.npm_lifecycle_event !== 'hot') { 20 | mix.version() 21 | } 22 | --------------------------------------------------------------------------------