├── .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 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/resources/assets/js/components/Message.vue:
--------------------------------------------------------------------------------
1 |
2 |
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 |
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 |
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 | {{ __('Title') }} |
4 | {{ __('Time') }} |
5 | {{ __('Type') }} |
6 |
7 |
8 | @foreach($invoice_lines as $invoice_line)
9 |
10 | {{$invoice_line->title}} |
11 | {{$invoice_line->quantity}} |
12 | {{$invoice_line->type}} |
13 |
14 | @endforeach
15 |
16 |
17 |
--------------------------------------------------------------------------------
/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 |
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 |
4 |
5 |
6 |
7 |
14 | |
15 |
16 |
17 | |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/footer.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 | |
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/header.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
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 |
4 |
5 |
6 |
7 | {{ Illuminate\Mail\Markdown::parse($slot) }}
8 | |
9 |
10 |
11 | |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/promotion.blade.php:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/promotion/button.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 | |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/subcopy.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ Illuminate\Mail\Markdown::parse($slot) }}
5 | |
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 |
7 | - {!! trans('setup_wizard::steps.' . $id . '.breadcrumb') !!}
8 |
9 | @if(\SetupWizard::isCurrent($id))
10 | @php($isCurrent = false)
11 | @endif
12 | @endforeach
13 |
14 |
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 |
--------------------------------------------------------------------------------
/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 |
2 | @foreach ($folders as $folder)
3 | @php($isChecked = $folder['check'])
4 | @php($cssClass = $isChecked ? 'list-group-item-success' : 'list-group-item-danger')
5 | @php($icon = $isChecked ? 'fa-check-circle' : 'fa-times-circle')
6 | -
7 | {!! $folder['label'] !!}
8 |
9 | @endforeach
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/setup_wizard/partials/steps/requirements.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @foreach ($requirements as $requirement)
3 | @php($isChecked = $requirement['check'])
4 | @php($cssClass = $isChecked ? 'list-group-item-success' : 'list-group-item-danger')
5 | @php($icon = $isChecked ? 'fa-check-circle' : 'fa-times-circle')
6 | -
7 | {!! $requirement['label'] !!}
8 |
9 | @endforeach
10 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------