├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .hound.yml ├── .jshintrc ├── LICENSE ├── Makefile ├── README.md ├── app ├── Console │ ├── Commands │ │ ├── CampaignSender.php │ │ ├── CompanyCreate.php │ │ ├── ContactEmailPredictCommand.php │ │ ├── CrmDevCheck.php │ │ ├── EmailValidatorCommand.php │ │ ├── ImportProductFromOpenCart.php │ │ ├── ImportProductFromPrestashop.php │ │ ├── ImportProductFromWooCommerce.php │ │ ├── MailTest.php │ │ ├── PhoneValidatorCommand.php │ │ ├── ScheduleNotificationReminder.php │ │ ├── UserCreate.php │ │ └── WebsiteStatusChecker.php │ └── Kernel.php ├── Enums │ └── LeadStatus.php ├── Exceptions │ └── Handler.php ├── Helpers │ ├── Domain.php │ ├── EmailStatusHelper.php │ ├── ImageHelper.php │ ├── LeadStatus.php │ ├── PhoneHelper.php │ ├── PredictEmail.php │ └── TicketPriorityHelper.php ├── Http │ ├── Controllers │ │ ├── Account │ │ │ ├── AccountCreateController.php │ │ │ ├── AccountDeleteController.php │ │ │ ├── AccountIndexController.php │ │ │ ├── AccountSaveController.php │ │ │ └── AccountUpdateController.php │ │ ├── Api │ │ │ ├── ApiController.php │ │ │ ├── Auth │ │ │ │ └── LoginController.php │ │ │ ├── Brand │ │ │ │ ├── BrandCreateController.php │ │ │ │ ├── BrandDeleteController.php │ │ │ │ ├── BrandListController.php │ │ │ │ ├── BrandReadController.php │ │ │ │ └── BrandUpdateController.php │ │ │ ├── Company │ │ │ │ ├── CompanyCreateController.php │ │ │ │ ├── CompanyDeleteController.php │ │ │ │ ├── CompanyListController.php │ │ │ │ ├── CompanyReadController.php │ │ │ │ └── CompanyUpdateController.php │ │ │ ├── Contact │ │ │ │ ├── ContactCreateController.php │ │ │ │ ├── ContactDeleteController.php │ │ │ │ ├── ContactListController.php │ │ │ │ └── ContactUpdateController.php │ │ │ ├── Customer │ │ │ │ ├── CustomerCreateController.php │ │ │ │ ├── CustomerDeleteController.php │ │ │ │ ├── CustomerListController.php │ │ │ │ ├── CustomerReadController.php │ │ │ │ └── CustomerUpdateController.php │ │ │ ├── Doc │ │ │ │ └── DocGeneratorController.php │ │ │ ├── Email │ │ │ │ ├── EmailCreateController.php │ │ │ │ └── EmailDeleteController.php │ │ │ ├── Lead │ │ │ │ ├── LeadCreateController.php │ │ │ │ ├── LeadDeleteController.php │ │ │ │ ├── LeadListController.php │ │ │ │ ├── LeadReadController.php │ │ │ │ └── LeadUpdateController.php │ │ │ ├── Order │ │ │ │ ├── OrderDeleteController.php │ │ │ │ └── OrderListController.php │ │ │ ├── Product │ │ │ │ ├── ProductCreateController.php │ │ │ │ ├── ProductDeleteController.php │ │ │ │ ├── ProductListController.php │ │ │ │ ├── ProductReadController.php │ │ │ │ └── ProductUpdateController.php │ │ │ ├── Supplier │ │ │ │ ├── SupplierCreateController.php │ │ │ │ ├── SupplierDeleteController.php │ │ │ │ ├── SupplierListController.php │ │ │ │ ├── SupplierReadController.php │ │ │ │ └── SupplierUpdateController.php │ │ │ ├── Ticket │ │ │ │ ├── TicketCreateController.php │ │ │ │ ├── TicketDeleteController.php │ │ │ │ ├── TicketListController.php │ │ │ │ └── TicketReadController.php │ │ │ └── User │ │ │ │ ├── UserDeleteController.php │ │ │ │ ├── UserListController.php │ │ │ │ ├── UserReadController.php │ │ │ │ └── UserUpdateController.php │ │ ├── Auth │ │ │ ├── ConfirmPasswordController.php │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LockController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ ├── ResetPasswordController.php │ │ │ ├── UnlockController.php │ │ │ └── VerificationController.php │ │ ├── Bank │ │ │ ├── Account │ │ │ │ ├── BankAccountCreateController.php │ │ │ │ ├── BankAccountIndexController.php │ │ │ │ ├── BankAccountSaveController.php │ │ │ │ └── BankAccountUpdateController.php │ │ │ ├── BankCreateController.php │ │ │ ├── BankDeleteController.php │ │ │ ├── BankIndexController.php │ │ │ ├── BankSaveController.php │ │ │ └── BankUpdateController.php │ │ ├── Brand │ │ │ ├── BrandCreateController.php │ │ │ ├── BrandDeleteController.php │ │ │ ├── BrandIndexController.php │ │ │ ├── BrandSaveController.php │ │ │ └── BrandUpdateController.php │ │ ├── Calendar │ │ │ ├── CalendarDeleteEventController.php │ │ │ ├── CalendarExportController.php │ │ │ ├── CalendarIndexController.php │ │ │ ├── CalendarSaveEventController.php │ │ │ └── CalendarUpdateEventController.php │ │ ├── Campaign │ │ │ ├── CampaignCreateController.php │ │ │ ├── CampaignDeleteController.php │ │ │ ├── CampaignIndexController.php │ │ │ ├── CampaignSaveController.php │ │ │ └── CampaignUpdateController.php │ │ ├── Category │ │ │ ├── CategoryCreateController.php │ │ │ ├── CategoryDeleteController.php │ │ │ ├── CategoryIndexController.php │ │ │ ├── CategorySaveController.php │ │ │ └── CategoryUpdateController.php │ │ ├── Company │ │ │ ├── CompanyCreateController.php │ │ │ ├── CompanyDeleteController.php │ │ │ ├── CompanyIndexController.php │ │ │ ├── CompanySaveController.php │ │ │ └── CompanyUpdateController.php │ │ ├── Contact │ │ │ ├── ContactCreateController.php │ │ │ ├── ContactDeleteController.php │ │ │ ├── ContactExportVCard.php │ │ │ ├── ContactSaveController.php │ │ │ └── ContactUpdateController.php │ │ ├── Controller.php │ │ ├── Customer │ │ │ ├── CustomerCreateController.php │ │ │ ├── CustomerCreateMessageController.php │ │ │ ├── CustomerDeleteController.php │ │ │ ├── CustomerDeleteMessageController.php │ │ │ ├── CustomerExportController.php │ │ │ ├── CustomerImportExcelController.php │ │ │ ├── CustomerImportExcelSaveController.php │ │ │ ├── CustomerImportIndexController.php │ │ │ ├── CustomerImportSaveController.php │ │ │ ├── CustomerIndexController.php │ │ │ ├── CustomerSaveController.php │ │ │ ├── CustomerShowController.php │ │ │ └── CustomerUpdateController.php │ │ ├── Email │ │ │ ├── EmailCreateController.php │ │ │ ├── EmailDeleteController.php │ │ │ ├── EmailDownloadAttachmentController.php │ │ │ ├── EmailDuplicateController.php │ │ │ ├── EmailIndexController.php │ │ │ ├── EmailSaveController.php │ │ │ ├── EmailSendController.php │ │ │ ├── EmailUpdateController.php │ │ │ └── EmailViewController.php │ │ ├── EmailTemplate │ │ │ └── EmailTemplateIndexController.php │ │ ├── HomeController.php │ │ ├── Lead │ │ │ ├── LeadCreateController.php │ │ │ ├── LeadCreateMessageController.php │ │ │ ├── LeadDeleteController.php │ │ │ ├── LeadDeleteMessageController.php │ │ │ ├── LeadExportController.php │ │ │ ├── LeadImportIndexController.php │ │ │ ├── LeadImportSaveController.php │ │ │ ├── LeadIndexController.php │ │ │ ├── LeadPromoteCustomerController.php │ │ │ ├── LeadSaveController.php │ │ │ ├── LeadShowController.php │ │ │ └── LeadUpdateController.php │ │ ├── MainController.php │ │ ├── ManifestController.php │ │ ├── Notification │ │ │ ├── DeleteNotificationController.php │ │ │ ├── GetLatestAjaxController.php │ │ │ ├── NotificationIndexController.php │ │ │ └── SetNotificationReadAjaxController.php │ │ ├── Order │ │ │ ├── OrderConfirmController.php │ │ │ ├── OrderCreateController.php │ │ │ ├── OrderDeleteController.php │ │ │ ├── OrderIndexController.php │ │ │ ├── OrderPdfController.php │ │ │ ├── OrderSaveController.php │ │ │ ├── OrderShowController.php │ │ │ └── OrderUpdateController.php │ │ ├── Payroll │ │ │ └── PayrollIndexController.php │ │ ├── Permission │ │ │ ├── PermissionIndexController.php │ │ │ └── PermissionSaveController.php │ │ ├── Product │ │ │ ├── ProductCreateController.php │ │ │ ├── ProductDeleteController.php │ │ │ ├── ProductImportIndexController.php │ │ │ ├── ProductImportSaveController.php │ │ │ ├── ProductIndexController.php │ │ │ ├── ProductSaveController.php │ │ │ └── ProductUpdateController.php │ │ ├── Profile │ │ │ ├── ProfileSaveController.php │ │ │ └── ProfileUpdateController.php │ │ ├── Region │ │ │ └── RegionGetAjaxController.php │ │ ├── Report │ │ │ ├── ReportEmailController.php │ │ │ ├── ReportIndexController.php │ │ │ └── ReportSaleController.php │ │ ├── SettingController.php │ │ ├── SetupController.php │ │ ├── Supplier │ │ │ ├── Contact │ │ │ │ ├── ContactCreateController.php │ │ │ │ ├── ContactDeleteController.php │ │ │ │ ├── ContactExportVCard.php │ │ │ │ ├── ContactSaveController.php │ │ │ │ └── ContactUpdateController.php │ │ │ ├── SupplierCreateController.php │ │ │ ├── SupplierIndexController.php │ │ │ ├── SupplierSaveController.php │ │ │ └── SupplierUpdateController.php │ │ ├── Ticket │ │ │ ├── TicketCreateController.php │ │ │ ├── TicketCreateMessageController.php │ │ │ ├── TicketDeleteController.php │ │ │ ├── TicketIndexController.php │ │ │ ├── TicketSaveController.php │ │ │ └── TicketUpdateController.php │ │ ├── Unsubscribe │ │ │ ├── UnsubscribeSaveController.php │ │ │ └── UnsubscribeUpdateController.php │ │ ├── User │ │ │ ├── UserCreateController.php │ │ │ ├── UserDeleteController.php │ │ │ ├── UserListController.php │ │ │ ├── UserSaveController.php │ │ │ └── UserUpdateController.php │ │ └── WebForm │ │ │ └── WebFormIndexController.php │ ├── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── Localization.php │ │ ├── Locked.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ ├── ValidateSignature.php │ │ └── VerifyCsrfToken.php │ ├── Requests │ │ ├── API │ │ │ └── SupplierRequest.php │ │ ├── CustomerRequest.php │ │ ├── EmailRequest.php │ │ ├── ImportRequest.php │ │ ├── LeadRequest.php │ │ ├── ProductRequest.php │ │ ├── UserRequest.php │ │ └── UserStoreRequest.php │ └── Resources │ │ ├── CustomerResource.php │ │ ├── OrderResource.php │ │ ├── ProductResource.php │ │ └── UserResource.php ├── Imports │ ├── CustomerImport.php │ ├── LeadImport.php │ └── ProductImport.php ├── Jobs │ └── MailSender.php ├── Mail │ ├── EventCalendarEmail.php │ ├── GenericEmail.php │ ├── GenericEmailForQueuing.php │ ├── InternalCRMEmail.php │ ├── TicketStateChanged.php │ └── templates.json ├── Models │ ├── Account.php │ ├── Bank.php │ ├── Bank │ │ └── Account.php │ ├── Brand.php │ ├── Calendar.php │ ├── Campaign.php │ ├── Category.php │ ├── Company.php │ ├── Contact.php │ ├── Country.php │ ├── Customer.php │ ├── Customer │ │ └── Message.php │ ├── Email.php │ ├── Email │ │ └── Attach.php │ ├── EmailTemplate.php │ ├── Industry.php │ ├── Lead.php │ ├── Lead │ │ └── Message.php │ ├── Notification.php │ ├── Order.php │ ├── Order │ │ └── Item.php │ ├── OrderNumber.php │ ├── Payroll.php │ ├── Product.php │ ├── Scopes │ │ └── AssignedSellerScope.php │ ├── Source.php │ ├── Supplier.php │ ├── Supplier │ │ └── SupplierContact.php │ ├── Ticket.php │ ├── Ticket │ │ └── Message.php │ ├── User.php │ ├── User │ │ └── Company.php │ └── WebForm.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── Repositories │ ├── BrandRepository.php │ ├── CalendarRepository.php │ ├── CompanyRepository.php │ ├── ContactRepository.php │ ├── CustomerRepository.php │ ├── LeadRepository.php │ ├── OrderRepository.php │ ├── ProductRepository.php │ ├── SupplierContactRepository.php │ ├── SupplierRepository.php │ └── TicketRepository.php ├── Services │ ├── CsvExportService.php │ └── SendCalendarEventService.php └── Traits │ ├── ICalendar.php │ └── VCard.php ├── artisan ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── providers.php ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── color.php ├── cors.php ├── database.php ├── excel.php ├── filesystems.php ├── hashing.php ├── jwt.php ├── l5-swagger.php ├── logging.php ├── mail.php ├── maileclipse.php ├── money.php ├── permission.php ├── queue.php ├── sanctum.php ├── sentry.php ├── services.php ├── session.php ├── snappy.php └── view.php ├── database ├── .gitignore ├── factories │ ├── BankFactory.php │ ├── BrandFactory.php │ ├── CalendarFactory.php │ ├── CategoryFactory.php │ ├── CompanyFactory.php │ ├── ContactFactory.php │ ├── CustomerFactory.php │ ├── EmailFactory.php │ ├── EmailTemplateFactory.php │ ├── IndustryFactory.php │ ├── LeadFactory.php │ ├── Order │ │ └── ItemFactory.php │ ├── OrderFactory.php │ ├── ProductFactory.php │ ├── SupplierFactory.php │ ├── Ticket │ │ └── MessageFactory.php │ ├── TicketFactory.php │ └── UserFactory.php ├── migrations │ ├── .gitkeep │ ├── 2019_12_14_000001_create_personal_access_token_table.php │ ├── 2021_01_01_000001_create_company_table.php │ ├── 2021_01_01_000001_create_user_table.php │ ├── 2021_01_01_000003_create_password_reset_token_table.php │ ├── 2021_01_01_000004_create_user_company_table.php │ ├── 2021_01_12_150340_create_brand_table.php │ ├── 2021_06_24_114554_create_category_table.php │ ├── 2021_06_24_114555_create_product_table.php │ ├── 2021_06_24_122420_create_customer_table.php │ ├── 2021_06_24_122433_create_order_table.php │ ├── 2021_06_24_122627_create_order_item_table.php │ ├── 2021_09_01_125947_create_account_table.php │ ├── 2021_09_09_134840_alter_customer_table.php │ ├── 2021_09_10_080739_alter_order_table.php │ ├── 2021_09_10_174152_alter_customer_table_company_field.php │ ├── 2021_09_10_185216_alter_table_account_add_status_column.php │ ├── 2021_09_13_214928_alter_order_item_add_column_quantity_unit_price.php │ ├── 2021_09_21_160418_alter_order_add_deleted_at.php │ ├── 2021_09_21_161552_alter_product_add_deleted_at.php │ ├── 2021_09_21_161601_alter_user_add_deleted_at.php │ ├── 2021_09_21_161647_alter_company_add_deleted_at.php │ ├── 2021_09_21_162037_alter_account_add_deleted_at.php │ ├── 2021_10_01_164139_alter_table_order_item_add_fk.php │ ├── 2022_07_09_190515_create_lead_table.php │ ├── 2022_07_09_215706_alter_lead_table.php │ ├── 2022_07_10_123934_create_contact_table.php │ ├── 2022_07_10_143247_alter_contact_table.php │ ├── 2022_07_14_232255_alter_lead_table_add_column_status.php │ ├── 2022_08_11_091648_create_email_template_table.php │ ├── 2022_08_11_093451_create_email_table.php │ ├── 2022_08_11_113833_alter_contact_add_deleted_at.php │ ├── 2022_08_26_231741_alter_user_table_add_columns_mobile_photo.php │ ├── 2022_08_26_232715_alter_lead_table_add_column_mobile_deleted_at.php │ ├── 2022_08_31_082254_alter_lead_rename_field_first_name_last_name.php │ ├── 2022_08_31_093951_alter_lead_add_field_city_street_zipcode.php │ ├── 2022_09_01_220512_create_industry_table.php │ ├── 2022_09_01_223824_alter_table_lead_add_column_industry_id_schedule_contact.php │ ├── 2022_09_03_232355_create_supplier_table.php │ ├── 2022_09_06_233457_create_job_table.php │ ├── 2022_09_07_204346_create_ticket_table.php │ ├── 2022_09_12_224607_alter_table_email_add_status_column.php │ ├── 2022_09_20_103926_alter_table_user_primary2bigint.php │ ├── 2022_09_20_104327_create_calendar_table.php │ ├── 2022_09_23_194743_alter_table_lead_add_vat_column.php │ ├── 2022_09_24_152202_alter_lead_table_increase_name_column_size.php │ ├── 2022_09_28_191807_alter_user_table_fix_id_autoincrement.php │ ├── 2022_09_28_204745_alter_lead_table_add_column_province.php │ ├── 2022_09_28_211219_alter_lead_table_add_column_locality.php │ ├── 2022_10_03_203341_alter_lead_table_add_column_dob.php │ ├── 2022_10_03_213200_alter_lead_table_add_column_opt_in.php │ ├── 2022_10_04_220221_create_permission_tables.php │ ├── 2022_10_04_221355_alter_product_table_add_column_min_stock_quantity.php │ ├── 2022_10_06_235518_alter_table_product_add_columns_elaboration_expiration_date.php │ ├── 2022_10_11_004458_add_last_login_at_and_ip_column_to_user_table.php │ ├── 2022_10_15_174358_alter_customer_table_add_column_softdeletes.php │ ├── 2022_10_15_200222_alter_customer_table_rename_columns_first_name_last_name.php │ ├── 2022_10_15_230938_alter_customer_table_sync_structure_with_lead.php │ ├── 2022_10_16_230841_create_webform_table.php │ ├── 2022_10_29_214008_alter_order_table_add_company_foreign.php │ ├── 2022_10_29_214008_alter_order_table_add_customer_foreign.php │ ├── 2022_10_29_234630_alter_order_item_add_product_id_foreign.php │ ├── 2022_11_08_153841_alter_lead_table_add_column_tags.php │ ├── 2022_11_08_154724_alter_customer_table_add_column_tags.php │ ├── 2022_11_10_203701_create_campaign_table.php │ ├── 2022_11_29_233426_alter_category_table_alter_column_name_increase_size.php │ ├── 2022_11_30_190248_alter_lead_table_add_column_phone2_email2.php │ ├── 2022_11_30_190331_alter_customer_table_add_column_phone2_email2.php │ ├── 2022_11_30_190448_alter_product_table_add_column_tags.php │ ├── 2022_12_02_130341_alter_supplier_table_add_columns_business_name_vat.php │ ├── 2022_12_06_193449_alter_product_table_alter_column_category_id_nullable.php │ ├── 2022_12_07_135043_alter_lead_table_add_full_text_search.php │ ├── 2022_12_07_193845_alter_category_table_increase_column_name_size.php │ ├── 2022_12_12_125810_alter_calendar_table_increase_meeting_column.php │ ├── 2022_12_13_195648_alter_user_table_add_column_timezone.php │ ├── 2022_12_19_203029_create_bank_table.php │ ├── 2022_12_21_143625_create_email_attach_table.php │ ├── 2023_01_20_215842_alter_contact_table_add_company_id.php │ ├── 2023_02_05_170842_create_ticket_message_table.php │ ├── 2023_02_08_003319_alter_contact_table_add_column_job_title.php │ ├── 2023_02_08_210238_alter_user_table_add_column_signature.php │ ├── 2023_02_09_130345_create_notification_table.php │ ├── 2023_02_10_162129_alter_company_table_add_business_name_vat_address_signature_columns.php │ ├── 2023_02_13_191047_alter_ticket_table_add_column_order_id.php │ ├── 2023_02_21_190823_alter_contact_table_add_column_mobile.php │ ├── 2023_02_25_231336_alter_lead_table_add_latitude_logitude.php │ ├── 2023_02_25_231425_alter_customer_table_add_latitude_logitude.php │ ├── 2023_02_27_161854_alter_order_table_add_seller.php │ ├── 2023_02_28_123138_alter_product_table_add_currency.php │ ├── 2023_02_28_125853_alter_order_table_add_currency.php │ ├── 2023_02_28_130133_alter_company_table_add_currency.php │ ├── 2023_02_28_170425_alter_lead_table_add_auditable.php │ ├── 2023_02_28_171204_alter_customer_table_add_auditable.php │ ├── 2023_02_28_171504_alter_order_table_add_auditable.php │ ├── 2023_03_01_165551_alter_customer_table_change_status_to_string.php │ ├── 2023_03_04_002315_alter_user_table_increase_lang_size_column.php │ ├── 2023_03_06_200555_alter_mail_table_add_column_signature.php │ ├── 2023_03_08_195218_alter_email_attach_table_add_original_name_timestamps_columns.php │ ├── 2023_03_13_131114_alter_email_attach_add_mimetype_column.php │ ├── 2023_03_24_112907_alter_product_add_tax_column.php │ ├── 2023_03_24_143632_alter_ticket_fix_priority_type_column.php │ ├── 2023_03_27_090730_alter_customer_add_external_id_column.php │ ├── 2023_03_30_183927_alter_order_item_table_add_discount_column.php │ ├── 2023_03_31_142046_alter_order_item_add_tax_column.php │ ├── 2023_04_03_000013_alter_table_bank_fix_bic_size.php │ ├── 2023_04_03_001503_alter_lead_table_lead_add_column_external_id.php │ ├── 2023_04_03_100057_create_table_module.php │ ├── 2023_04_04_104458_alter_bank_table_rename_column_country_to_country_id.php │ ├── 2023_04_04_230943_create_bank_account_table.php │ ├── 2023_04_14_155311_add_uuid_to_bank_table.php │ ├── 2023_04_15_235944_create_order_number_table.php │ ├── 2023_04_16_000454_alter_order_table_add_column_order_number.php │ ├── 2023_04_17_223149_alter_customer_table_fix_name_size.php │ ├── 2023_04_27_162950_alter_lead_table_add_column_email_verified.php │ ├── 2023_04_27_163019_alter_customer_table_add_column_email_verified.php │ ├── 2023_04_27_190843_add_fulltext_index_to_customer_table.php │ ├── 2023_05_01_170030_add_phone_extension_column_lead_table.php │ ├── 2023_05_01_170051_add_phone_extension_column_customer_table.php │ ├── 2023_05_01_173629_add_phone_extension_column_contact_table.php │ ├── 2023_05_02_202406_alter_industry_table_add_company_column.php │ ├── 2023_05_22_211241_create_lead_message_table.php │ ├── 2023_05_22_211252_create_customer_message_table.php │ ├── 2023_05_30_202731_alter_email_table_add_column_from_name.php │ ├── 2023_06_07_205200_alter_email_add_column_bcc.php │ ├── 2023_06_29_144442_alter_contact_table_add_column_email_verified.php │ ├── 2023_07_04_205341_alter_lead_increase_lat_long_size.php │ ├── 2023_07_04_205350_alter_customer_increase_lat_long_size.php │ ├── 2023_07_15_123154_alter_contact_table_add_column_twitter.php │ ├── 2023_07_27_161705_create_source_table.php │ ├── 2023_07_27_161804_alter_lead_add_source.php │ ├── 2023_07_27_161819_alter_customer_add_source.php │ ├── 2023_08_17_161410_create_supplier_contact_table.php │ ├── 2023_09_28_162302_alter_email_table_subject_size.php │ ├── 2023_10_02_123013_alter_lead_add_phone_verified.php │ ├── 2023_10_02_125005_alter_contact_add_phone_verified.php │ ├── 2023_12_26_193119_alter_campaign_add_from_tags.php │ ├── 2024_01_23_181459_alter_customer_add_phone_verified.php │ ├── 2024_02_11_124954_reduce_user_name_fields_length.php │ ├── 2024_02_11_223224_create_payroll_table.php │ ├── 2024_02_11_224820_alter_user_add_manager_id.php │ ├── 2024_02_11_225118_create_work_hour_table.php │ ├── 2024_03_11_120840_alter_calendar_add_organizer_foreign.php │ ├── 2024_03_20_110710_alter_permission_add_module_column.php │ ├── 2024_11_01_142603_add_optional_fields_to_supplier_table.php │ └── review │ │ ├── 2022_09_20_105810_alter_table_category_add_foreign_keys.php │ │ └── 2022_09_24_106334_alter_table_product_add_foreign_keys.php └── seeders │ ├── Bank │ ├── bank_ad.php │ ├── bank_al.php │ ├── bank_de.php │ ├── bank_ee.php │ ├── bank_es.php │ ├── bank_fr.php │ ├── bank_gb.php │ ├── bank_ie.php │ ├── bank_it.php │ ├── bank_lt.php │ ├── bank_mx.php │ ├── bank_nl.php │ └── bank_pt.php │ ├── BankSeeder.php │ ├── CompanyTableSeeder.php │ ├── DatabaseSeeder.php │ ├── DevelopmentDatabaseSeeder.php │ ├── IndustrySeeder.php │ ├── ModuleSeeder.php │ ├── PermissionSeeder.php │ ├── RoleSeeder.php │ ├── SourceSeeder.php │ ├── TicketSeeder.php │ └── UserSeeder.php ├── deploy.sh ├── doc └── screenshoot.png ├── docker-compose.mssql.yml ├── docker-compose.mysql.yml ├── docker-compose.pgadmin.yml ├── docker-compose.pma.yml ├── docker-compose.postgres.yml ├── docker-compose.yml ├── etc ├── .bashrc └── infrastructure │ ├── nginx │ ├── Dockerfile │ ├── conf.d │ │ ├── .gitignore │ │ ├── default.conf │ │ └── static.conf │ ├── default.conf │ ├── ssl │ │ ├── certs │ │ │ └── localhost.crt │ │ └── private │ │ │ └── localhost.key │ └── static.conf │ ├── php │ ├── Dockerfile │ └── conf.d │ │ ├── custom_php.ini │ │ └── xdebug.ini │ └── redis │ └── redis.conf ├── lang ├── de.json ├── en.json ├── en │ ├── auth.php │ ├── calendar.php │ ├── hammer.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── es-ES.json ├── es-MX.json ├── es-MX │ ├── calendar.php │ └── pagination.php ├── es.json ├── es │ ├── auth.php │ ├── calendar.php │ ├── hammer.php │ └── pagination.php ├── fr.json ├── it.json └── pt.json ├── phpunit.xml ├── pint.json ├── public ├── .htaccess ├── asset │ ├── css │ │ ├── print.css │ │ └── prospect-flow.css │ ├── img │ │ ├── bg-auth.jpg │ │ ├── funnel.png │ │ ├── notification.png │ │ ├── pixel.gif │ │ ├── prospero_flow_crm_logo.svg │ │ └── user.jpg │ ├── js │ │ ├── Calendar.js │ │ ├── Contact.js │ │ ├── Email.js │ │ ├── Notification.js │ │ ├── Order.js │ │ ├── Password.js │ │ ├── Product.js │ │ ├── ProspectFlow.js │ │ ├── Region.js │ │ ├── Supplier.js │ │ └── User.js │ ├── sound │ │ ├── button_tiny.mp3 │ │ └── button_tiny.ogg │ ├── theme │ │ └── space │ │ │ └── css │ │ │ └── space.css │ └── upload │ │ ├── example │ │ ├── pflow_customer_example_20230414.csv │ │ ├── pflow_lead_example_20221212.csv │ │ └── pflow_product_example_20221206.csv │ │ ├── import │ │ └── .gitignore │ │ └── product │ │ └── .gitignore ├── favicon.png ├── index.php ├── robots.txt ├── vendor │ ├── maileclipse │ │ ├── css │ │ │ ├── maileclipse-app.css │ │ │ └── maileclipse-app.min.css │ │ ├── images │ │ │ └── skeletons │ │ │ │ ├── html │ │ │ │ ├── airmail.png │ │ │ │ ├── cerberus.png │ │ │ │ ├── cleave.jpg │ │ │ │ ├── go.png │ │ │ │ ├── goldstar.png │ │ │ │ ├── mantra.png │ │ │ │ ├── meow.png │ │ │ │ ├── narrative.jpg │ │ │ │ ├── neopolitan.png │ │ │ │ ├── oxygen.jpg │ │ │ │ ├── plain.png │ │ │ │ ├── skyline.png │ │ │ │ ├── sunday.png │ │ │ │ └── zenflat.jpg │ │ │ │ ├── markdown │ │ │ │ ├── plain.png │ │ │ │ └── postmark.png │ │ │ │ └── no-image.png │ │ └── js │ │ │ └── maileclipse-app.js │ └── swagger-ui │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── index.css │ │ ├── index.html │ │ ├── oauth2-redirect.html │ │ ├── swagger-initializer.js │ │ ├── swagger-ui-bundle.js │ │ ├── swagger-ui-bundle.js.map │ │ ├── swagger-ui-es-bundle-core.js │ │ ├── swagger-ui-es-bundle-core.js.map │ │ ├── swagger-ui-es-bundle.js │ │ ├── swagger-ui-es-bundle.js.map │ │ ├── swagger-ui-standalone-preset.js │ │ ├── swagger-ui-standalone-preset.js.map │ │ ├── swagger-ui.css │ │ ├── swagger-ui.css.map │ │ ├── swagger-ui.js │ │ └── swagger-ui.js.map └── web.config ├── rector.php ├── resources └── views │ ├── account │ ├── account.blade.php │ ├── index.blade.php │ └── transaction │ │ └── index.blade.php │ ├── auth │ ├── lock.blade.php │ ├── login.blade.php │ ├── passwords │ │ ├── confirm.blade.php │ │ ├── email.blade.php │ │ └── reset.blade.php │ ├── register.blade.php │ └── verify.blade.php │ ├── bank │ ├── bank.blade.php │ └── index.blade.php │ ├── bank_account │ ├── bank_account.blade.php │ └── index.blade.php │ ├── brand │ ├── brand.blade.php │ └── index.blade.php │ ├── calendar │ ├── calendar.blade.php │ └── modal │ │ └── event_create.blade.php │ ├── campaign │ ├── campaign.blade.php │ └── index.blade.php │ ├── category │ ├── category.blade.php │ └── index.blade.php │ ├── company │ ├── company.blade.php │ └── index.blade.php │ ├── components │ ├── country.blade.php │ ├── geolocalization │ │ └── map.blade.php │ └── seller.blade.php │ ├── contact │ ├── contact.blade.php │ ├── contact_form.blade.php │ └── index.blade.php │ ├── customer │ ├── customer.blade.php │ ├── import.blade.php │ ├── index.blade.php │ └── show.blade.php │ ├── dashboard.blade.php │ ├── email │ ├── email.blade.php │ ├── index.blade.php │ ├── popup │ │ └── duplicate.blade.php │ └── view.blade.php │ ├── email_template │ └── index.blade.php │ ├── errors │ ├── 401.blade.php │ ├── 403.blade.php │ ├── 404.blade.php │ ├── 419.blade.php │ ├── 429.blade.php │ ├── 500.blade.php │ ├── 503.blade.php │ ├── layout.blade.php │ └── minimal.blade.php │ ├── html_editor.blade.php │ ├── layouts │ ├── app.blade.php │ ├── basic.blade.php │ ├── partials │ │ ├── _errors.blade.php │ │ └── _header.blade.php │ └── print.blade.php │ ├── lead │ ├── import.blade.php │ ├── index.blade.php │ ├── lead.blade.php │ └── partials │ │ └── _list.blade.php │ ├── lead_customer │ ├── partials │ │ ├── filters.blade.php │ │ └── messages.blade.php │ └── show.blade.php │ ├── mail │ ├── generic.blade.php │ ├── internal-crm.blade.php │ ├── templates │ │ ├── default.blade.php │ │ ├── theme1.blade.php │ │ └── theme2.blade.php │ ├── ticket │ │ └── status-changed.blade.php │ └── welcome.blade.php │ ├── menu │ ├── menu.php │ ├── sidebar.blade.php │ └── top.blade.php │ ├── notification │ └── index.blade.php │ ├── order │ ├── index.blade.php │ ├── order.blade.php │ ├── partial │ │ └── _order.blade.php │ ├── print.blade.php │ └── show.blade.php │ ├── payroll │ └── index.blade.php │ ├── permissions │ └── index.blade.php │ ├── powered.blade.php │ ├── product │ ├── import.blade.php │ ├── index.blade.php │ └── product.blade.php │ ├── report │ ├── email.blade.php │ ├── index.blade.php │ └── sale.blade.php │ ├── setting │ └── index.blade.php │ ├── setup │ ├── step1.blade.php │ ├── step2.blade.php │ ├── step3.blade.php │ ├── step4.blade.php │ └── step5.blade.php │ ├── supplier │ ├── contact │ │ ├── contact.blade.php │ │ ├── contact_form.blade.php │ │ └── index.blade.php │ ├── index.blade.php │ └── supplier.blade.php │ ├── ticket │ ├── grid.blade.php │ ├── index.blade.php │ └── ticket.blade.php │ ├── unsubscribe │ └── unsubscribe.blade.php │ ├── user │ ├── index.blade.php │ ├── profile.blade.php │ └── user.blade.php │ ├── vendor │ ├── l5-swagger │ │ ├── .gitkeep │ │ └── index.blade.php │ ├── maileclipse │ │ └── templates │ │ │ └── .gitkeep │ └── pagination │ │ ├── bootstrap-4.blade.php │ │ ├── default.blade.php │ │ ├── semantic-ui.blade.php │ │ ├── simple-bootstrap-4.blade.php │ │ ├── simple-default.blade.php │ │ ├── simple-tailwind.blade.php │ │ └── tailwind.blade.php │ └── web_form │ └── index.blade.php ├── routes ├── api.php ├── channels.php ├── console.php ├── module │ ├── bank.php │ ├── bank_account.php │ ├── brand.php │ ├── calendar.php │ ├── campaign.php │ ├── category.php │ ├── company.php │ ├── contact.php │ ├── customer.php │ ├── email.php │ ├── lead.php │ ├── notification.php │ ├── order.php │ ├── payroll.php │ ├── product.php │ ├── supplier.php │ ├── ticket.php │ └── user.php └── web.php ├── server.php ├── sonar-project.properties ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── certs │ ├── jwt-rsa-4096-private.pem │ └── jwt-rsa-4096-public.pem ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── techstack.md ├── techstack.yml ├── tests ├── CreatesApplication.php ├── Feature │ ├── Console │ │ └── Commands │ │ │ └── ScheduleNotificationReminderTest.php │ ├── Controllers │ │ ├── Api │ │ │ ├── Auth │ │ │ │ └── LoginControllerTest.php │ │ │ ├── Contact │ │ │ │ └── ContactCreateControllerTest.php │ │ │ ├── Customer │ │ │ │ ├── CustomerCreateControllerTest.php │ │ │ │ ├── CustomerListControllerTest.php │ │ │ │ ├── CustomerReadControllerTest.php │ │ │ │ └── CustomerUpdateControllerTest.php │ │ │ └── Lead │ │ │ │ ├── LeadCreateControllerTest.php │ │ │ │ ├── LeadListControllerTest.php │ │ │ │ ├── LeadReadControllerTest.php │ │ │ │ └── LeadUpdateControllerTest.php │ │ ├── Bank │ │ │ ├── BankCreateControllerTest.php │ │ │ ├── BankIndexControllerTest.php │ │ │ ├── BankSaveControllerTest.php │ │ │ └── BankUpdateControllerTest.php │ │ ├── Brand │ │ │ ├── BrandCreateControllerTest.php │ │ │ ├── BrandDeleteControllerTest.php │ │ │ ├── BrandIndexControllerTest.php │ │ │ ├── BrandSaveControllerTest.php │ │ │ └── BrandUpdateControllerTest.php │ │ ├── Company │ │ │ ├── CompanyCreateControllerTest.php │ │ │ ├── CompanyDeleteControllerTest.php │ │ │ ├── CompanyIndexControllerTest.php │ │ │ ├── CompanySaveControllerTest.php │ │ │ └── CompanyUpdateControllerTest.php │ │ ├── Customer │ │ │ ├── CustomerCreateControllerTest.php │ │ │ ├── CustomerDeleteControllerTest.php │ │ │ ├── CustomerExportControllerTest.php │ │ │ ├── CustomerImportIndexControllerTest.php │ │ │ ├── CustomerImportSaveControllerTest.php │ │ │ ├── CustomerIndexControllerTest.php │ │ │ ├── CustomerSaveControllerTest.php │ │ │ └── CustomerShowControllerTest.php │ │ ├── Email │ │ │ ├── EmailCreateControllerTest.php │ │ │ ├── EmailDeleteControllerTest.php │ │ │ ├── EmailDuplicateControllerTest.php │ │ │ ├── EmailIndexControllerTest.php │ │ │ ├── EmailSaveControllerTest.php │ │ │ ├── EmailSendControllerTest.php │ │ │ ├── EmailUpdateControllerTest.php │ │ │ └── EmailViewControllerTest.php │ │ ├── Lead │ │ │ ├── LeadCreateControllerTest.php │ │ │ ├── LeadDeleteControllerTest.php │ │ │ ├── LeadExportControllerTest.php │ │ │ ├── LeadImportIndexControllerTest.php │ │ │ ├── LeadImportSaveControllerTest.php │ │ │ ├── LeadIndexControllerTest.php │ │ │ ├── LeadPromoteCustomerControllerTest.php │ │ │ ├── LeadSaveControllerTest.php │ │ │ ├── LeadShowControllerTest.php │ │ │ └── hammer_lead_example_20221212.csv │ │ ├── Product │ │ │ ├── ProductImportSaveControllerTest.php │ │ │ ├── ProductSaveControllerTest.php │ │ │ └── prospero_product_example_20221206.csv │ │ ├── Profile │ │ │ └── ProfileSaveControllerTest.php │ │ ├── Supplier │ │ │ └── SupplierSaveControllerTest.php │ │ ├── Ticket │ │ │ ├── TicketIndexControllerTest.php │ │ │ └── TicketSaveControllerTest.php │ │ └── User │ │ │ └── UserSaveControllerTest.php │ ├── Helpers │ │ └── DomainTest.php │ ├── Mail │ │ └── EventCalendarEmailTest.php │ └── Models │ │ └── CalendarTest.php ├── TestCase.php └── Unit │ └── Helpers │ └── PredictEmailTest.php └── version.php /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.phpunit.cache 2 | /node_modules 3 | /public/build 4 | /public/hot 5 | /public/storage 6 | /public/info.php 7 | /public/asset/upload/company/* 8 | /storage/*.key 9 | /vendor 10 | .env 11 | .env.backup 12 | .env.production 13 | .phpunit.result.cache 14 | Homestead.json 15 | Homestead.yaml 16 | auth.json 17 | npm-debug.log 18 | yarn-error.log 19 | /.fleet 20 | /.idea 21 | /.vscode 22 | /packages/* 23 | /storage/api-docs/api-docs.json 24 | -------------------------------------------------------------------------------- /.hound.yml: -------------------------------------------------------------------------------- 1 | jshint: 2 | config_file: .jshintrc 3 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6 3 | } 4 | -------------------------------------------------------------------------------- /app/Console/Commands/ImportProductFromOpenCart.php: -------------------------------------------------------------------------------- 1 | 'secondary', 13 | 'sent' => 'success', 14 | 'error' => 'danger', 15 | null => '', 16 | default => '' 17 | }; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Helpers/ImageHelper.php: -------------------------------------------------------------------------------- 1 | 'text-bg-success', 15 | Lead::IN_PROGRESS => 'text-bg-warning', 16 | Lead::WAITING_FEEDBACK => 'text-bg-primary', 17 | Lead::CLOSED => 'text-bg-danger', 18 | default => 'text-bg-dark', 19 | }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Helpers/PhoneHelper.php: -------------------------------------------------------------------------------- 1 | $country_code.'-'.substr($phone, 3, 4).'-'.substr($phone, 7, 4), 16 | 12 => $country_code.'-'.substr($phone, 3, 3).'-'.substr($phone, 6, 3) 17 | .'-'.substr($phone, 9, 3), 18 | default => $phone, 19 | }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Helpers/TicketPriorityHelper.php: -------------------------------------------------------------------------------- 1 | 'success', 13 | 'medium' => 'warning', 14 | 'high' => 'danger', 15 | null => '', 16 | default => '' 17 | }; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Account/AccountCreateController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect()->back(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Account/AccountIndexController.php: -------------------------------------------------------------------------------- 1 | getAllActiveByCompany((int) Auth::user()->company_id); 18 | 19 | return view('account.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Account/AccountUpdateController.php: -------------------------------------------------------------------------------- 1 | user = Auth::user(); 19 | } catch (\PHPOpenSourceSaver\JWTAuth\Exceptions\UserNotDefinedException $e) { 20 | return response()->json(['error' => $e->getMessage()], 403); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Api/Company/CompanyCreateController.php: -------------------------------------------------------------------------------- 1 | companyRepository = $companyRepository; 18 | } 19 | 20 | public function create(Request $request): JsonResponse 21 | { 22 | $status = 400; 23 | $company = $this->companyRepository->save($request->all()); 24 | if ($company) { 25 | $status = 201; 26 | } 27 | 28 | return response()->json(['company' => $company, $status]); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Http/Controllers/Api/Email/EmailCreateController.php: -------------------------------------------------------------------------------- 1 | json(['company' => $email, $status]); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | check()) { 18 | return redirect()->route('login'); 19 | } 20 | session(['locked' => true]); 21 | 22 | return view('auth.lock'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/Account/BankAccountCreateController.php: -------------------------------------------------------------------------------- 1 | getAll(); 18 | $data['countries'] = Country::all(); 19 | $data['bank_account'] = $bank_account; 20 | 21 | return view('bank.account.bank_account', $data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/Account/BankAccountIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByCompanyId(Auth::user()->company_id); 16 | 17 | return view('bank.account.index'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/Account/BankAccountUpdateController.php: -------------------------------------------------------------------------------- 1 | getAll(); 20 | $data['countries'] = Country::all(); 21 | $data['bank_account'] = $bank_account; 22 | 23 | return view('bank.account.bank_account', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/BankCreateController.php: -------------------------------------------------------------------------------- 1 | company_id !== Company::DEFAULT_COMPANY) { 20 | return response()->json(['message' => 'Unauthorized'], 401); 21 | } 22 | $bank->delete(); 23 | 24 | return redirect('bank'); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/BankIndexController.php: -------------------------------------------------------------------------------- 1 | country_id)) { 18 | $filters['country_id'] = $request->country_id; 19 | } 20 | $data['banks'] = $bank->getAllPaginated($filters, 20); 21 | $data['countries'] = Country::all(); 22 | 23 | return view('bank.index', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Bank/BankUpdateController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect('/brand'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Brand/BrandIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByCompanyId((int) Auth::user()->company_id); 18 | 19 | return view('brand.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Brand/BrandSaveController.php: -------------------------------------------------------------------------------- 1 | id)) { 17 | $brand = new Brand; 18 | } else { 19 | $brand = Brand::find($request->id); 20 | } 21 | $brand->name = $request->name; 22 | $brand->company_id = (int) Auth::user()->company_id; 23 | $brand->save(); 24 | 25 | return redirect('/brand'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Brand/BrandUpdateController.php: -------------------------------------------------------------------------------- 1 | delete(); 16 | 17 | return back(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Calendar/CalendarSaveEventController.php: -------------------------------------------------------------------------------- 1 | calendarRepository = $calendarRepository; 20 | } 21 | 22 | public function save(Request $request): RedirectResponse 23 | { 24 | $this->calendarRepository->save($request->all()); 25 | 26 | return back(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/Calendar/CalendarUpdateEventController.php: -------------------------------------------------------------------------------- 1 | json(['calendar' => $calendar]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Campaign/CampaignCreateController.php: -------------------------------------------------------------------------------- 1 | Auth::user()->company->email, 'name' => Auth::user()->company->name], 20 | ['email' => Auth::user()->email, 'name' => Auth::user()->first_name.' '.Auth::user()->last_name], 21 | ]; 22 | 23 | return view('campaign.campaign', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Campaign/CampaignDeleteController.php: -------------------------------------------------------------------------------- 1 | company_id !== Auth::user()->company_id && Auth::user()->company_id !== 1) { 18 | return response()->json(['message' => 'Unauthorized'], 401); 19 | } 20 | $campaign->delete(); 21 | 22 | return redirect('campaign'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Controllers/Campaign/CampaignIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByCompany((int) Auth::user()->company_id); 26 | 27 | return view('campaign.index', $data); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/Http/Controllers/Campaign/CampaignUpdateController.php: -------------------------------------------------------------------------------- 1 | Auth::user()->company->email, 'name' => Auth::user()->company->name], 20 | ['email' => Auth::user()->email, 'name' => Auth::user()->first_name.' '.Auth::user()->last_name], 21 | ]; 22 | 23 | return view('campaign.campaign', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Category/CategoryCreateController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect('category'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Category/CategoryIndexController.php: -------------------------------------------------------------------------------- 1 | getAllActiveByCompanyPaginated((int) Auth::user()->company_id); 18 | 19 | return view('category.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Category/CategorySaveController.php: -------------------------------------------------------------------------------- 1 | id)) { 17 | $category = new Category; 18 | } else { 19 | $category = Category::find($request->id); 20 | } 21 | $category->name = $request->name; 22 | $category->company_id = (int) Auth::user()->company_id; 23 | $category->save(); 24 | 25 | return redirect('/category'); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Category/CategoryUpdateController.php: -------------------------------------------------------------------------------- 1 | company_id !== Company::DEFAULT_COMPANY) { 18 | return response()->json(['message' => 'Unauthorized'], 401); 19 | } 20 | $company->delete(); 21 | $company->save(); 22 | 23 | return redirect('/company'); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Company/CompanyIndexController.php: -------------------------------------------------------------------------------- 1 | hasRole('SuperAdmin')) { 18 | $companies = $company->getAllPaginated(); 19 | } else { 20 | $companies = Company::where('id', (int) Auth::user()->company_id)->paginate(); 21 | } 22 | $data['companies'] = $companies; 23 | 24 | return view('company.index', $data); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Company/CompanyUpdateController.php: -------------------------------------------------------------------------------- 1 | {$model.'_id'} = $id_model; 18 | 19 | return view('contact.contact', compact('contact')); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Contact/ContactDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return back(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Contact/ContactUpdateController.php: -------------------------------------------------------------------------------- 1 | fill([ 18 | 'customer_id' => $request->customer_id, 19 | 'body' => $request->message, 20 | 'author_id' => Auth::user()->id, 21 | ]); 22 | $message->save(); 23 | 24 | return back(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Customer/CustomerDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 20 | 21 | return redirect('/customer')->with(['status' => true, 'message' => __('Customer deleted successfully')]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Customer/CustomerImportExcelController.php: -------------------------------------------------------------------------------- 1 | file('upload')); 16 | 17 | return redirect('/customer')->with('success', 'All good!'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Customer/CustomerImportIndexController.php: -------------------------------------------------------------------------------- 1 | Auth::user()->company->email, 'name' => Auth::user()->company->name], 19 | ['email' => Auth::user()->email, 'name' => Auth::user()->first_name.' '.Auth::user()->last_name], 20 | ]; 21 | $data['email'] = $email; 22 | 23 | return view('email.email', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Email/EmailDeleteController.php: -------------------------------------------------------------------------------- 1 | company_id)->findOrFail($id); 17 | $email->delete(); 18 | 19 | return redirect('/email')->with(['status' => true, 'message' => __('Email deleted successfully')]); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Email/EmailDownloadAttachmentController.php: -------------------------------------------------------------------------------- 1 | file); 16 | 17 | return response()->download($filePath, $attach->original_name); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Email/EmailIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByCompanyId( 17 | (int) Auth::user()->company_id, 18 | $request->search 19 | ); 20 | 21 | return view('email.index', $data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Email/EmailUpdateController.php: -------------------------------------------------------------------------------- 1 | Auth::user()->company->email, 'name' => Auth::user()->company->name], 19 | ['email' => Auth::user()->email, 'name' => Auth::user()->first_name.' '.Auth::user()->last_name], 20 | ]; 21 | $data['email'] = $email; 22 | 23 | return view('email.email', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Email/EmailViewController.php: -------------------------------------------------------------------------------- 1 | signature)) { 20 | $data['signature'] = Auth::user()->signature_html; 21 | } 22 | 23 | return view('email.view', $data); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/EmailTemplate/EmailTemplateIndexController.php: -------------------------------------------------------------------------------- 1 | getAll(); 17 | 18 | return view('email_template.index', $data); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/HomeController.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 17 | } 18 | 19 | /** 20 | * Show the application dashboard. 21 | * 22 | * @return \Illuminate\Contracts\Support\Renderable 23 | */ 24 | public function index() 25 | { 26 | return view('home'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/Lead/LeadDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 20 | 21 | return redirect('/lead')->with(['status' => $status ? 'success' : 'error', 'message' => __('Lead deleted successfully')]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Lead/LeadImportIndexController.php: -------------------------------------------------------------------------------- 1 | delete(); 16 | 17 | return redirect()->back(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/Notification/GetLatestAjaxController.php: -------------------------------------------------------------------------------- 1 | json(['notifications' => $notification->getLatestByUser((int) Auth::user()->id)]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Notification/NotificationIndexController.php: -------------------------------------------------------------------------------- 1 | getLatestByUser((int) Auth::user()->id, 20, true); 18 | 19 | return view('notification.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Notification/SetNotificationReadAjaxController.php: -------------------------------------------------------------------------------- 1 | fill(['read' => 1, 'updated_at' => now()]); 17 | $notification->save(); 18 | 19 | return response()->json(''); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Order/OrderConfirmController.php: -------------------------------------------------------------------------------- 1 | status = Order::CONFIRMED; 17 | $order->save(); 18 | 19 | return redirect('order'); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Order/OrderDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect('order'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Order/OrderIndexController.php: -------------------------------------------------------------------------------- 1 | getAllActiveByCompany((int) Auth::user()->company_id); 18 | 19 | return view('order/index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Order/OrderSaveController.php: -------------------------------------------------------------------------------- 1 | orderRepository = $orderRepository; 18 | } 19 | 20 | public function save(Request $request) 21 | { 22 | $order = $this->orderRepository->save($request->all()); 23 | 24 | return redirect('order'); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Order/OrderShowController.php: -------------------------------------------------------------------------------- 1 | company_id; 21 | $data['customers'] = $order->customer->getAllByCompanyId($company_id); 22 | $data['products'] = $product->getAllByCompanyId($company_id); 23 | 24 | return view('order/order', $data); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Payroll/PayrollIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByYear((int) $year); 20 | 21 | return view('payroll.index', $data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Controllers/Permission/PermissionIndexController.php: -------------------------------------------------------------------------------- 1 | get(); 16 | $permissions = Permission::all(); 17 | 18 | return view('permissions.index', compact('roles', 'permissions')); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Permission/PermissionSaveController.php: -------------------------------------------------------------------------------- 1 | roles; 17 | 18 | foreach ($roles as $role_id => $permissions) { 19 | Role::findById($role_id)->syncPermissions($permissions); 20 | } 21 | 22 | return redirect('/permission'); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Controllers/Product/ProductDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect('/product'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Product/ProductImportIndexController.php: -------------------------------------------------------------------------------- 1 | getAllActiveByCompany(Auth::user()->company_id); 22 | $data['brands'] = $brand->getAllActiveByCompany(Auth::user()->company_id); 23 | 24 | return view('product/product', $data); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Profile/ProfileUpdateController.php: -------------------------------------------------------------------------------- 1 | id); 23 | $data['languages'] = config('app.locales'); 24 | $data['timezones'] = timezone_identifiers_list(); 25 | 26 | return view('user.profile', $data); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/Http/Controllers/Region/RegionGetAjaxController.php: -------------------------------------------------------------------------------- 1 | get()->pluck('name', 'id'); 15 | 16 | return response()->json(['regions' => $regions]); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/Http/Controllers/Report/ReportEmailController.php: -------------------------------------------------------------------------------- 1 | {$model.'_id'} = $id_model; 18 | 19 | return view('supplier.contact.contact', compact('contact')); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Supplier/Contact/ContactDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return back(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Supplier/Contact/ContactUpdateController.php: -------------------------------------------------------------------------------- 1 | get(); 19 | 20 | return view('supplier.supplier', $data); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Controllers/Supplier/SupplierIndexController.php: -------------------------------------------------------------------------------- 1 | getAllByCompany((int) Auth::user()->company_id); 18 | 19 | return view('supplier.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Supplier/SupplierSaveController.php: -------------------------------------------------------------------------------- 1 | supplierRepository = $supplierRepository; 18 | } 19 | 20 | public function save(Request $request) 21 | { 22 | $supplier = $this->supplierRepository->save($request->all()); 23 | 24 | return redirect('/supplier'); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Supplier/SupplierUpdateController.php: -------------------------------------------------------------------------------- 1 | get(); 17 | $data['supplier'] = Supplier::find($id); 18 | 19 | return view('supplier.supplier', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/Ticket/TicketCreateController.php: -------------------------------------------------------------------------------- 1 | getAllActiveByCompany((int) Auth::user()->company_id); 23 | $data['customers'] = $customer->getAllByCompanyId((int) Auth::user()->company_id); 24 | 25 | return view('ticket.ticket', $data); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Controllers/Ticket/TicketCreateMessageController.php: -------------------------------------------------------------------------------- 1 | fill([ 18 | 'author_id' => Auth::user()->id, 19 | 'ticket_id' => $request->ticket_id, 20 | 'body' => $request->message, 21 | ]); 22 | $message->save(); 23 | 24 | return redirect("ticket/update/$request->ticket_id"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Ticket/TicketDeleteController.php: -------------------------------------------------------------------------------- 1 | delete(); 17 | 18 | return redirect('/ticket'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Controllers/Ticket/TicketIndexController.php: -------------------------------------------------------------------------------- 1 | query('search'); 18 | $ticket = new Ticket; 19 | 20 | $data['tickets'] = $ticket->getAllByCompanyId((int) Auth::user()->company_id, $search); 21 | $data['search'] = $search; 22 | $data['customers'] = Customer::whereCompany(Auth::user()->company); 23 | 24 | return view('ticket.index', $data); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Controllers/Unsubscribe/UnsubscribeSaveController.php: -------------------------------------------------------------------------------- 1 | email) { 16 | $lead = Lead::where('email', $request->email)->first(); 17 | if ($lead) { 18 | $lead->opt_in = 0; 19 | $lead->save(); 20 | } 21 | } 22 | 23 | return redirect('/unsubscribe')->with(['message' => __('From this moment you will not receive any more notifications from us')]); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Http/Controllers/Unsubscribe/UnsubscribeUpdateController.php: -------------------------------------------------------------------------------- 1 | delete(); 16 | 17 | return redirect('/user'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Controllers/User/UserListController.php: -------------------------------------------------------------------------------- 1 | can('create company')) ? User::orderBy('company_id')->paginate(10) : User::orderBy('company_id')->where('company_id', Auth::user()->company_id)->paginate(10); 17 | $data['users'] = $users; 18 | 19 | return view('user.index', $data); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Controllers/WebForm/WebFormIndexController.php: -------------------------------------------------------------------------------- 1 | expectsJson() ? null : route('login'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $except = [ 17 | // 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Middleware/Localization.php: -------------------------------------------------------------------------------- 1 | lang); 23 | } 24 | 25 | if (session()->has('locale')) { 26 | App::setlocale(session()->get('locale')); 27 | } 28 | 29 | return $next($request); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Middleware/Locked.php: -------------------------------------------------------------------------------- 1 | is('unlock') || $request->is('lock')) { 14 | return $next($request); 15 | } 16 | 17 | if (session('locked', false) && $request->path() != 'lock') { 18 | return redirect('/lock'); 19 | } 20 | 21 | return $next($request); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/Http/Middleware/PreventRequestsDuringMaintenance.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $except = [ 17 | // 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $except = [ 17 | 'current_password', 18 | 'password', 19 | 'password_confirmation', 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustHosts.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | public function hosts(): array 17 | { 18 | return [ 19 | $this->allSubdomainsOfApplicationUrl(), 20 | ]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | |string|null 16 | */ 17 | protected $proxies; 18 | 19 | /** 20 | * The headers that should be used to detect proxies. 21 | * 22 | * @var int 23 | */ 24 | protected $headers = 25 | Request::HEADER_X_FORWARDED_FOR | 26 | Request::HEADER_X_FORWARDED_HOST | 27 | Request::HEADER_X_FORWARDED_PORT | 28 | Request::HEADER_X_FORWARDED_PROTO | 29 | Request::HEADER_X_FORWARDED_AWS_ELB; 30 | } 31 | -------------------------------------------------------------------------------- /app/Http/Middleware/ValidateSignature.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $except = [ 17 | // 'fbclid', 18 | // 'utm_campaign', 19 | // 'utm_content', 20 | // 'utm_medium', 21 | // 'utm_source', 22 | // 'utm_term', 23 | ]; 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $except = [ 17 | 'api/*', 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /app/Http/Resources/CustomerResource.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 21 | } 22 | 23 | public function getAllByYear(int $year) 24 | { 25 | return Payroll::whereYear('payment_date', $year)->get(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Models/Scopes/AssignedSellerScope.php: -------------------------------------------------------------------------------- 1 | hasRole(['SuperAdmin', 'CompanyAdmin', 'Support'])) { 21 | $builder->where('seller_id', Auth::id()); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/Models/Source.php: -------------------------------------------------------------------------------- 1 | belongsTo(User::class); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Models/User/Company.php: -------------------------------------------------------------------------------- 1 | created_at = now(); 17 | } else { 18 | $brand = Brand::find($data['id']); 19 | } 20 | $brand->name = $data['name']; 21 | $brand->company_id = Auth::user()->company_id; 22 | $brand->updated_at = now(); 23 | $brand->save(); 24 | 25 | return $brand; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Services/CsvExportService.php: -------------------------------------------------------------------------------- 1 | 0) { 17 | foreach ($calendar['guests'] as $guest) { 18 | if (filter_var($guest, FILTER_VALIDATE_EMAIL)) { 19 | Mail::to($guest)->send(new EventCalendarEmail($calendar)); 20 | } 21 | } 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | withRouting( 11 | web: __DIR__.'/../routes/web.php', 12 | commands: __DIR__.'/../routes/console.php', 13 | health: '/up', 14 | ) 15 | ->withMiddleware(function (Middleware $middleware) { 16 | $middleware->alias([ 17 | 'locked' => \App\Http\Middleware\Locked::class, 18 | ]); 19 | }) 20 | ->withExceptions(function (Exceptions $exceptions) { 21 | // 22 | })->create(); 23 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /bootstrap/providers.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class BrandFactory extends Factory 14 | { 15 | /** 16 | * Define the model's default state. 17 | * 18 | * @return array 19 | */ 20 | public function definition() 21 | { 22 | return [ 23 | 'company_id' => Company::factory(), 24 | 'name' => $this->faker->word(), 25 | ]; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/factories/CategoryFactory.php: -------------------------------------------------------------------------------- 1 | 12 | */ 13 | class CategoryFactory extends Factory 14 | { 15 | /** 16 | * Define the model's default state. 17 | * 18 | * @return array 19 | */ 20 | public function definition() 21 | { 22 | return [ 23 | 'company_id' => Company::factory(), 24 | 'name' => $this->faker->word(), 25 | ]; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/factories/EmailTemplateFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class EmailTemplateFactory extends Factory 13 | { 14 | /** 15 | * Define the model's default state. 16 | * 17 | * @return array 18 | */ 19 | public function definition() 20 | { 21 | return [ 22 | 'from' => $this->faker->email(), 23 | 'subject' => $this->faker->title(), 24 | 'body' => $this->faker->text(), 25 | 'lang' => 'en', // fake()->randomElement(array_keys(config('app.locales'))), 26 | 'version' => 1, 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/factories/IndustryFactory.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | class IndustryFactory extends Factory 13 | { 14 | /** 15 | * Define the model's default state. 16 | * 17 | * @return array 18 | */ 19 | public function definition() 20 | { 21 | return [ 22 | 'name' => fake()->name(), 23 | ]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /database/factories/Ticket/MessageFactory.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | class MessageFactory extends Factory 15 | { 16 | /** 17 | * Define the model's default state. 18 | * 19 | * @return array 20 | */ 21 | public function definition() 22 | { 23 | return [ 24 | 'body' => $this->faker->text(), 25 | 'author_id' => User::factory(), 26 | 'ticket_id' => Ticket::factory(), 27 | ]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /database/migrations/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /database/migrations/2021_01_01_000003_create_password_reset_token_table.php: -------------------------------------------------------------------------------- 1 | string('email')->primary(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | */ 26 | public function down(): void 27 | { 28 | Schema::dropIfExists('password_reset_token'); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2021_01_01_000004_create_user_company_table.php: -------------------------------------------------------------------------------- 1 | engine = 'InnoDB'; 20 | $table->bigInteger('user_id'); 21 | $table->bigInteger('company_id'); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('user_company'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2021_09_09_134840_alter_customer_table.php: -------------------------------------------------------------------------------- 1 | string('country_id', 2)->after('email'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('customer', function (Blueprint $table) { 31 | $table->dropColumn('country_id'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2021_09_10_080739_alter_order_table.php: -------------------------------------------------------------------------------- 1 | decimal('amount', 10, 3)->after('customer_id'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('order', function (Blueprint $table) { 31 | $table->dropColumn('amount'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2021_09_21_160418_alter_order_add_deleted_at.php: -------------------------------------------------------------------------------- 1 | softDeletes()->after('updated_at'); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::table('order', function (Blueprint $table) { 32 | $table->dropColumn('deleted_at'); 33 | }); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /database/migrations/2021_09_21_161552_alter_product_add_deleted_at.php: -------------------------------------------------------------------------------- 1 | softDeletes()->after('updated_at'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('product', function (Blueprint $table) { 31 | $table->dropColumn('deleted_at'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2021_09_21_161647_alter_company_add_deleted_at.php: -------------------------------------------------------------------------------- 1 | softDeletes()->after('updated_at'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('company', function (Blueprint $table) { 31 | $table->dropColumn('deleted_at'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2021_09_21_162037_alter_account_add_deleted_at.php: -------------------------------------------------------------------------------- 1 | softDeletes()->after('updated_at'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('account', function (Blueprint $table) { 31 | $table->dropColumn('deleted_at'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2022_08_11_113833_alter_contact_add_deleted_at.php: -------------------------------------------------------------------------------- 1 | softDeletes()->after('updated_at'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('contact', function (Blueprint $table) { 31 | $table->dropColumn('deleted_at'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2022_09_01_220512_create_industry_table.php: -------------------------------------------------------------------------------- 1 | id(); 20 | $table->string('name', '80'); 21 | $table->timestamps(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('industry'); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2022_09_24_152202_alter_lead_table_increase_name_column_size.php: -------------------------------------------------------------------------------- 1 | string('name', 80)->change(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() {} 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/2022_10_03_203341_alter_lead_table_add_column_dob.php: -------------------------------------------------------------------------------- 1 | date('dob')->nullable()->after('business_name'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('lead', function (Blueprint $table) { 31 | $table->dropColumn('dob'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2022_11_08_153841_alter_lead_table_add_column_tags.php: -------------------------------------------------------------------------------- 1 | json('tags')->nullable()->after('opt_in'); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('lead', function (Blueprint $table) { 31 | $table->dropColumn('tags'); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2022_11_29_233426_alter_category_table_alter_column_name_increase_size.php: -------------------------------------------------------------------------------- 1 | string('name', 50)->change(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | // 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /database/migrations/2022_12_02_130341_alter_supplier_table_add_columns_business_name_vat.php: -------------------------------------------------------------------------------- 1 | string('business_name', 80)->nullable()->after('name'); 20 | $table->string('vat', 20)->nullable()->after('business_name'); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | // 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /database/migrations/2022_12_06_193449_alter_product_table_alter_column_category_id_nullable.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('category_id')->nullable()->change(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | // 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /database/migrations/2023_02_28_123138_alter_product_table_add_currency.php: -------------------------------------------------------------------------------- 1 | string('currency', 3)->default('EUR')->after('price'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('product', function (Blueprint $table) { 27 | $table->dropColumn('currency'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_02_28_171204_alter_customer_table_add_auditable.php: -------------------------------------------------------------------------------- 1 | auditableWithDeletes(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('customer', function (Blueprint $table) { 31 | $table->dropAuditableWithDeletes(); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2023_02_28_171504_alter_order_table_add_auditable.php: -------------------------------------------------------------------------------- 1 | auditableWithDeletes(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('order', function (Blueprint $table) { 31 | $table->dropAuditableWithDeletes(); 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2023_03_04_002315_alter_user_table_increase_lang_size_column.php: -------------------------------------------------------------------------------- 1 | string('lang', 5)->change(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('user', function (Blueprint $table) { 27 | $table->string('lang', 2)->change(); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_03_13_131114_alter_email_attach_add_mimetype_column.php: -------------------------------------------------------------------------------- 1 | string('mime', 255)->nullable()->after('original_name'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('email_attach', function (Blueprint $table) { 27 | $table->dropColumn('mime'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_03_24_112907_alter_product_add_tax_column.php: -------------------------------------------------------------------------------- 1 | decimal('tax', 4, 2)->nullable(0.0)->after('price')->comment('%'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('product', function (Blueprint $table) { 27 | $table->dropColumn('tax'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_03_24_143632_alter_ticket_fix_priority_type_column.php: -------------------------------------------------------------------------------- 1 | string('priority', 20)->change(); 18 | $table->string('type', 20)->change(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::table('ticket', function (Blueprint $table) { 28 | // No rollback 29 | }); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/2023_03_27_090730_alter_customer_add_external_id_column.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('external_id')->after('company_id')->nullable(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('customer', function (Blueprint $table) { 27 | $table->dropColumn('external_id'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_03_31_142046_alter_order_item_add_tax_column.php: -------------------------------------------------------------------------------- 1 | decimal('tax', 4, 2)->nullable(0.0)->after('discount')->comment('%'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('order_item', function (Blueprint $table) { 27 | $table->dropColumn('tax'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_04_03_000013_alter_table_bank_fix_bic_size.php: -------------------------------------------------------------------------------- 1 | string('bic', 11)->nullable()->change(); // SWIFT 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | // No rollback action 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /database/migrations/2023_04_03_001503_alter_lead_table_lead_add_column_external_id.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('external_id')->after('company_id')->nullable(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('lead', function (Blueprint $table) { 27 | $table->dropColumn('external_id'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_04_03_100057_create_table_module.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name', 50); 19 | $table->timestamps(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | */ 26 | public function down(): void 27 | { 28 | Schema::dropIfExists('module'); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_04_04_104458_alter_bank_table_rename_column_country_to_country_id.php: -------------------------------------------------------------------------------- 1 | renameColumn('country', 'country_id'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('bank', function (Blueprint $table) { 27 | $table->renameColumn('country_id', 'country'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_04_17_223149_alter_customer_table_fix_name_size.php: -------------------------------------------------------------------------------- 1 | string('name', 80)->change(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::table('customer', function (Blueprint $table) { 31 | // 32 | }); 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /database/migrations/2023_05_30_202731_alter_email_table_add_column_from_name.php: -------------------------------------------------------------------------------- 1 | string('from_name', 100)->nullable()->after('from'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('email', function (Blueprint $table) { 27 | $table->dropColumn('from_name'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_06_07_205200_alter_email_add_column_bcc.php: -------------------------------------------------------------------------------- 1 | string('bcc', 254)->nullable()->after('cc'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('email', function (Blueprint $table) { 27 | $table->dropColumn('bcc'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_06_29_144442_alter_contact_table_add_column_email_verified.php: -------------------------------------------------------------------------------- 1 | boolean('email_verified')->default(false)->after('email'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('contact', function (Blueprint $table) { 27 | $table->dropColumn('email_verified'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_04_205341_alter_lead_increase_lat_long_size.php: -------------------------------------------------------------------------------- 1 | decimal('latitude', 11, 8)->change(); 18 | $table->decimal('longitude', 11, 8)->change(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::table('lead', function (Blueprint $table) { 28 | // 29 | }); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/2023_07_04_205350_alter_customer_increase_lat_long_size.php: -------------------------------------------------------------------------------- 1 | decimal('latitude', 11, 8)->change(); 18 | $table->decimal('longitude', 11, 8)->change(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::table('customer', function (Blueprint $table) { 28 | // 29 | }); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /database/migrations/2023_07_15_123154_alter_contact_table_add_column_twitter.php: -------------------------------------------------------------------------------- 1 | string('twitter', 255)->nullable()->after('linkedin'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('contact', function (Blueprint $table) { 27 | $table->dropColumn('twitter'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_27_161705_create_source_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name', 80); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::dropIfExists('source'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /database/migrations/2023_07_27_161804_alter_lead_add_source.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('source_id')->nullable()->after('website'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('lead', function (Blueprint $table) { 27 | $table->dropColumn('source_id'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_07_27_161819_alter_customer_add_source.php: -------------------------------------------------------------------------------- 1 | unsignedBigInteger('source_id')->nullable()->after('website'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('customer', function (Blueprint $table) { 27 | $table->dropColumn('source_id'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2023_09_28_162302_alter_email_table_subject_size.php: -------------------------------------------------------------------------------- 1 | string('subject', 100)->change(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | // 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /database/migrations/2024_03_11_120840_alter_calendar_add_organizer_foreign.php: -------------------------------------------------------------------------------- 1 | foreign('user_id')->references('id')->on('user')->onDelete('cascade'); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('calendar', function (Blueprint $table) { 27 | $table->dropForeign(['user_id']); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/migrations/2024_03_20_110710_alter_permission_add_module_column.php: -------------------------------------------------------------------------------- 1 | bigInteger('module_id')->after('id')->nullable(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::table('permission', function (Blueprint $table) { 27 | $table->dropColumn('module_id'); 28 | }); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /database/seeders/Bank/bank_ad.php: -------------------------------------------------------------------------------- 1 | 'ad', 'name' => 'Andbank', 'phone' => '+376739011', 'email' => 'info@andbank.com', 'website' => 'https://www.andbank.com', 'bic' => 'BACAADAD', 'created_at' => now()], 11 | ['country_id' => 'ad', 'name' => 'Crèdit Andorrà, SA', 'phone' => '+376888888', 'email' => 'info@creditandorra.ad', 'website' => 'https://comercial.creditandorragroup.ad/en', 'bic' => 'CRDAADAD', 'created_at' => now()], 12 | ['country_id' => 'ad', 'name' => 'Mora Banc Grup, SA', 'phone' => '+376884884', 'email' => 'morabanc@morabanc.ad', 'website' => 'https://www.morabanc.ad', 'bic' => 'BINAADAD', 'created_at' => now()], 13 | ]; 14 | -------------------------------------------------------------------------------- /database/seeders/Bank/bank_gb.php: -------------------------------------------------------------------------------- 1 | 'gb', 'name' => 'REVOLUT LTD', 'phone' => '+442033228352', 'email' => 'support@revolut.com', 'website' => 'https://www.revolut.com/', 'bic' => 'REVOGB2LXXX'], 7 | ]; 8 | -------------------------------------------------------------------------------- /database/seeders/Bank/bank_lt.php: -------------------------------------------------------------------------------- 1 | 'lt', 'name' => 'Revolut Bank UAB', 'phone' => '+37052143608', 'email' => 'support@revolut.com', 'website' => 'https://www.revolut.com/en-LT', 'bic' => 'REVOLT21XXX'], 10 | ]; 11 | -------------------------------------------------------------------------------- /database/seeders/CompanyTableSeeder.php: -------------------------------------------------------------------------------- 1 | count() === 0) { 18 | DB::table('company')->insert(['country_id' => 'ee', 'name' => 'Test company', 'email' => 'info@test.com', 'website' => 'https://test.com', 'status' => 1]); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(CompanyTableSeeder::class); 20 | $this->call(ModuleSeeder::class); 21 | $this->call(IndustrySeeder::class); 22 | $this->call(BankSeeder::class); 23 | $this->call(SourceSeeder::class); 24 | 25 | $this->call(RoleSeeder::class); 26 | $this->call(UserSeeder::class); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /database/seeders/RoleSeeder.php: -------------------------------------------------------------------------------- 1 | truncate(); 19 | 20 | DB::table('source')->insert(['name' => 'Cold call']); 21 | DB::table('source')->insert(['name' => 'Online paid campaign']); 22 | DB::table('source')->insert(['name' => 'Online funnel']); 23 | DB::table('source')->insert(['name' => 'Social media']); 24 | DB::table('source')->insert(['name' => 'Newsletter']); 25 | DB::table('source')->insert(['name' => 'Recommendation']); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /database/seeders/TicketSeeder.php: -------------------------------------------------------------------------------- 1 | has(Message::factory()->count(5))->count(15)->create([ 21 | 'created_by' => $user, 22 | 'company_id' => $user->company, 23 | ]); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /doc/screenshoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/doc/screenshoot.png -------------------------------------------------------------------------------- /docker-compose.mssql.yml: -------------------------------------------------------------------------------- 1 | services: 2 | mssql: 3 | image: mcr.microsoft.com/mssql/server:2019-latest 4 | container_name: crm-db 5 | environment: 6 | SA_PASSWORD: ${DB_PASSWORD} 7 | ACCEPT_EULA: "Y" 8 | ports: 9 | - "1433:1433" 10 | volumes: 11 | - mssql-data:/var/opt/mssql 12 | 13 | volumes: 14 | mssql-data: 15 | driver: local 16 | -------------------------------------------------------------------------------- /docker-compose.mysql.yml: -------------------------------------------------------------------------------- 1 | services: 2 | db: 3 | image: mariadb:latest 4 | container_name: crm-db 5 | ports: 6 | - "3306:3306" 7 | environment: 8 | - MYSQL_ROOT_PASSWORD=root 9 | - MYSQL_DATABASE=$DB_DATABASE 10 | - MYSQL_USER={$DB_USERNAME} 11 | - MYSQL_PASSWORD={$DB_PASSWORD} 12 | volumes: 13 | - mysql-data:/var/lib/mysql 14 | links: 15 | - php 16 | 17 | volumes: 18 | mysql-data: 19 | -------------------------------------------------------------------------------- /docker-compose.pgadmin.yml: -------------------------------------------------------------------------------- 1 | services: 2 | pgadmin: 3 | image: dpage/pgadmin4 4 | container_name: crm-pgadmin 5 | environment: 6 | PGADMIN_DEFAULT_EMAIL: "admin@example.com" 7 | PGADMIN_DEFAULT_PASSWORD: $DB_PASSWORD 8 | ports: 9 | - "5050:80" 10 | depends_on: 11 | - db 12 | -------------------------------------------------------------------------------- /docker-compose.pma.yml: -------------------------------------------------------------------------------- 1 | services: 2 | phpmyadmin: 3 | image: phpmyadmin 4 | container_name: crm-pma 5 | restart: always 6 | ports: 7 | - "8081:80" 8 | environment: 9 | - PMA_ARBITRARY=1 10 | depends_on: 11 | - db 12 | -------------------------------------------------------------------------------- /docker-compose.postgres.yml: -------------------------------------------------------------------------------- 1 | # docker-compose -f docker-compose.yml -f docker-compose.postgres.yml up -d 2 | services: 3 | db: 4 | image: postgres:latest 5 | container_name: crm-db 6 | environment: 7 | POSTGRES_DB: $DB_DATABASE 8 | POSTGRES_USER: $DB_USERNAME 9 | POSTGRES_PASSWORD: $DB_PASSWORD 10 | ports: 11 | - "5432:5432" 12 | volumes: 13 | - postgres-data:/var/lib/postgresql/data 14 | links: 15 | - php 16 | 17 | volumes: 18 | postgres-data: 19 | -------------------------------------------------------------------------------- /etc/.bashrc: -------------------------------------------------------------------------------- 1 | alias ll='ls -alF --color=auto' 2 | alias ls='ls --color=auto' 3 | -------------------------------------------------------------------------------- /etc/infrastructure/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:stable 2 | RUN apt-get update && apt-get install -y --no-install-recommends \ 3 | vim git wget zip unzip mc htop nano \ 4 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* 5 | -------------------------------------------------------------------------------- /etc/infrastructure/nginx/conf.d/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /etc/infrastructure/nginx/conf.d/default.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/etc/infrastructure/nginx/conf.d/default.conf -------------------------------------------------------------------------------- /etc/infrastructure/nginx/conf.d/static.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/etc/infrastructure/nginx/conf.d/static.conf -------------------------------------------------------------------------------- /etc/infrastructure/php/conf.d/custom_php.ini: -------------------------------------------------------------------------------- 1 | [php] 2 | memory_limit = 512M 3 | post_max_size=20M 4 | upload_max_filesize=20M 5 | -------------------------------------------------------------------------------- /etc/infrastructure/php/conf.d/xdebug.ini: -------------------------------------------------------------------------------- 1 | zend_extension=xdebug 2 | 3 | [xdebug] 4 | xdebug.mode=develop,debug 5 | xdebug.start_with_request=yes 6 | xdebug.client_host=host.docker.internal 7 | xdebug.client_port=9003 8 | -------------------------------------------------------------------------------- /etc/infrastructure/redis/redis.conf: -------------------------------------------------------------------------------- 1 | # https://raw.githubusercontent.com/redis/redis/unstable/redis.conf 2 | requirepass password 3 | #aclfile /etc/redis/users.acl 4 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Passwords must be at least six characters and match the confirmation.', 17 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /lang/es-MX/calendar.php: -------------------------------------------------------------------------------- 1 | 'Enero', 11 | 'February' => 'Febrero', 12 | 'March' => 'Marzo', 13 | 'April' => 'Abril', 14 | 'May' => 'Mayo', 15 | 'June' => 'Junio', 16 | 'July' => 'Julio', 17 | 'August' => 'Agosto', 18 | 'September' => 'Septiembre', 19 | 'October' => 'Octubre', 20 | 'November' => 'Noviembre', 21 | 'December' => 'Diciembre', 22 | // Days 23 | 'Sunday' => 'Domingo', 24 | 'Monday' => 'Lunes', 25 | 'Tuesday' => 'Martes', 26 | 'Wednesday' => 'Miércoles', 27 | 'Thursday' => 'Jueves', 28 | 'Friday' => 'Viernes', 29 | 'Saturday' => 'Sábado', 30 | ]; 31 | -------------------------------------------------------------------------------- /lang/es-MX/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Siguiente »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /lang/es/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 | -------------------------------------------------------------------------------- /lang/es/pagination.php: -------------------------------------------------------------------------------- 1 | '« Anterior', 17 | 'next' => 'Siguiente »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /pint.json: -------------------------------------------------------------------------------- 1 | { 2 | "preset": "laravel", 3 | "rules": { 4 | "phpdoc_separation": false 5 | } 6 | } -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/asset/css/print.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS Prospect Flow print file 3 | */ 4 | -------------------------------------------------------------------------------- /public/asset/img/bg-auth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/img/bg-auth.jpg -------------------------------------------------------------------------------- /public/asset/img/funnel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/img/funnel.png -------------------------------------------------------------------------------- /public/asset/img/notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/img/notification.png -------------------------------------------------------------------------------- /public/asset/img/pixel.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/img/pixel.gif -------------------------------------------------------------------------------- /public/asset/img/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/img/user.jpg -------------------------------------------------------------------------------- /public/asset/js/Contact.js: -------------------------------------------------------------------------------- 1 | const Contact = { 2 | update: function (id) { 3 | 4 | }, 5 | delete: function (id, message) 6 | { 7 | let response = confirm(message); 8 | if(response) { 9 | window.location.href = window.location.protocol+'//'+window.location.host + '/contact/delete/'+id; 10 | } 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /public/asset/js/Email.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Email 3 | * 4 | * @param int id 5 | * @param string message 6 | */ 7 | window.ProspectFlow.Email = { 8 | duplicate: function (id, message) { 9 | let email = prompt(message); 10 | if(email) { 11 | window.location = window.location.origin + '/email/duplicate?email_id=' + id + '&to=' + email; 12 | } 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /public/asset/js/Password.js: -------------------------------------------------------------------------------- 1 | $(".toggle-password").click(function() { 2 | $(this).toggleClass("la-eye la-eye-slash"); 3 | let input = $($(this).attr("toggle")); 4 | if (input.attr("type") == "password") { 5 | input.attr("type", "text"); 6 | } else { 7 | input.attr("type", "password"); 8 | } 9 | }); 10 | 11 | $( "#password" ).on( "change", function() { 12 | $(this).removeClass('is-invalid'); 13 | } ); 14 | -------------------------------------------------------------------------------- /public/asset/js/Product.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/js/Product.js -------------------------------------------------------------------------------- /public/asset/js/Supplier.js: -------------------------------------------------------------------------------- 1 | const Supplier = { 2 | delete: function (id, message) 3 | { 4 | let response = confirm(message); 5 | if(response) { 6 | window.location.href = window.location.protocol+'//'+window.location.host + '/supplier/delete/'+id; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public/asset/js/User.js: -------------------------------------------------------------------------------- 1 | const User = { 2 | delete: function (id, message) 3 | { 4 | let response = confirm(message); 5 | if(response) { 6 | window.location.href = window.location.protocol+'//'+window.location.host + '/user/delete/'+id; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /public/asset/sound/button_tiny.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/sound/button_tiny.mp3 -------------------------------------------------------------------------------- /public/asset/sound/button_tiny.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/asset/sound/button_tiny.ogg -------------------------------------------------------------------------------- /public/asset/theme/space/css/space.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Space Theme 3 | * https://coolors.co/palette/353535-3c6e71-ffffff-d9d9d9-284b63 4 | */ 5 | .nav-pills { 6 | --bs-nav-pills-link-active-bg: #284B63 !important; 7 | } 8 | 9 | .nav-pills .nav-link { 10 | --bs-nav-link-color: #284B63 !important; 11 | } 12 | -------------------------------------------------------------------------------- /public/asset/upload/example/pflow_customer_example_20230414.csv: -------------------------------------------------------------------------------- 1 | external_id;name;business_name;vat;dob;phone;phone2;mobile;email;email2;website;country_id;province;city;locality;street;zipcode;notes;facebook;instagram;linkedin;twitter;youtube;tiktok;tags 2 | 11111122233;John Doe;John Doe Corp.;ABC123456XX;1990-01-01;1111111111;22222222222;333333333;john.doe@jhondoecorp.com;john.doe2@jhondoecorp.com;https://www.jhondoecorp.com;us;Nueva York;New York;New Jersey;First AV, 5;CNB123;Joe Doe Corportaion LTD other notes;https://facebook.com/joedoe;;;;;john,example 3 | -------------------------------------------------------------------------------- /public/asset/upload/example/pflow_lead_example_20221212.csv: -------------------------------------------------------------------------------- 1 | name;business_name;phone;phone2;mobile;email;email2;website;country_id;city;notes;facebook;instagram;linkedin;twitter;youtube;tiktok;tags 2 | John Doe Corp.;John Doe Corp.;1111111111;22222222222;33333333333;john.doe@jhondoecorp.com;john.doe2@jhondoecorp.com;https://www.jhondoecorp.com;us;New York;Joe Doe Corportaion LTD other notes;https://facebook.com/joedoe;;;;;john,example 3 | -------------------------------------------------------------------------------- /public/asset/upload/example/pflow_product_example_20221206.csv: -------------------------------------------------------------------------------- 1 | name;category;brand;model;sku;barcode;cost;price;description;tags 2 | Test product XPS13;category test;DELL;JD9DY;DELL-JD9DY;5397184753866;1000;1383.82;Intel Core i7-1250U/16GB/512GB SSD/13.4";notebook,intel,dell,xps 3 | -------------------------------------------------------------------------------- /public/asset/upload/import/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /public/asset/upload/product/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/favicon.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/airmail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/airmail.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/cerberus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/cerberus.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/cleave.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/cleave.jpg -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/go.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/goldstar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/goldstar.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/mantra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/mantra.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/meow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/meow.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/narrative.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/narrative.jpg -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/neopolitan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/neopolitan.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/oxygen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/oxygen.jpg -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/plain.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/skyline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/skyline.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/sunday.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/sunday.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/html/zenflat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/html/zenflat.jpg -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/markdown/plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/markdown/plain.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/markdown/postmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/markdown/postmark.png -------------------------------------------------------------------------------- /public/vendor/maileclipse/images/skeletons/no-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/maileclipse/images/skeletons/no-image.png -------------------------------------------------------------------------------- /public/vendor/swagger-ui/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/swagger-ui/favicon-16x16.png -------------------------------------------------------------------------------- /public/vendor/swagger-ui/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/public/vendor/swagger-ui/favicon-32x32.png -------------------------------------------------------------------------------- /public/vendor/swagger-ui/index.css: -------------------------------------------------------------------------------- 1 | html { 2 | box-sizing: border-box; 3 | overflow: -moz-scrollbars-vertical; 4 | overflow-y: scroll; 5 | } 6 | 7 | *, 8 | *:before, 9 | *:after { 10 | box-sizing: inherit; 11 | } 12 | 13 | body { 14 | margin: 0; 15 | background: #fafafa; 16 | } 17 | -------------------------------------------------------------------------------- /public/vendor/swagger-ui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Swagger UI 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /public/vendor/swagger-ui/swagger-initializer.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | // 3 | 4 | // the following lines will be replaced by docker/configurator, when it runs in a docker-container 5 | window.ui = SwaggerUIBundle({ 6 | url: "https://petstore.swagger.io/v2/swagger.json", 7 | dom_id: '#swagger-ui', 8 | deepLinking: true, 9 | presets: [ 10 | SwaggerUIBundle.presets.apis, 11 | SwaggerUIStandalonePreset 12 | ], 13 | plugins: [ 14 | SwaggerUIBundle.plugins.DownloadUrl 15 | ], 16 | layout: "StandaloneLayout" 17 | }); 18 | 19 | // 20 | }; 21 | -------------------------------------------------------------------------------- /rector.php: -------------------------------------------------------------------------------- 1 | sets([ 9 | SetList::DEAD_CODE, 10 | LevelSetList::UP_TO_PHP_81, 11 | ]); 12 | 13 | $rectorConfig->paths([ 14 | __DIR__.'/app', 15 | __DIR__.'/database', 16 | __DIR__.'/tests', 17 | ]); 18 | }; 19 | -------------------------------------------------------------------------------- /resources/views/account/account.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

{{ __('Account') }}

6 |
7 | 8 | 9 | @endsection 10 | -------------------------------------------------------------------------------- /resources/views/bank_account/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('layouts.partials._header', ['title' => __('Bank Account')]) 5 | 6 | @endsection 7 | -------------------------------------------------------------------------------- /resources/views/components/country.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | @foreach ($countries as $country) 6 | 7 | @endforeach 8 | 9 | -------------------------------------------------------------------------------- /resources/views/components/seller.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @foreach($sellers as $seller) 5 | 8 | @endforeach 9 | 10 | -------------------------------------------------------------------------------- /resources/views/contact/contact.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('layouts.partials._header', ['title' => __('Contact')]) 5 | 6 | @include('contact.contact_form') 7 | 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/email_template/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

E-mail templates

6 |
7 | 8 |
9 | {{ __('New') }} 10 |
11 | 12 | @foreach($templates as $template) 13 |
14 | 15 |
16 | @endforeach 17 | @endsection 18 | -------------------------------------------------------------------------------- /resources/views/errors/401.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Unauthorized')) 4 | @section('code', '401') 5 | @section('message', __('Unauthorized')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/403.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Forbidden')) 4 | @section('code', '403') 5 | @section('message', __($exception->getMessage() ?: 'Forbidden')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Not Found')) 4 | @section('code', '404') 5 | @section('message', __('Not Found')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/419.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Page Expired')) 4 | @section('code', '419') 5 | @section('message', __('Page Expired')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/429.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Too Many Requests')) 4 | @section('code', '429') 5 | @section('message', __('Too Many Requests')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/500.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Server Error')) 4 | @section('code', '500') 5 | @section('message', __('Server Error')) 6 | -------------------------------------------------------------------------------- /resources/views/errors/503.blade.php: -------------------------------------------------------------------------------- 1 | @extends('errors::minimal') 2 | 3 | @section('title', __('Service Unavailable')) 4 | @section('code', '503') 5 | @section('message', __('Service Unavailable')) 6 | -------------------------------------------------------------------------------- /resources/views/layouts/partials/_errors.blade.php: -------------------------------------------------------------------------------- 1 | @if ($errors->any()) 2 |
3 |
    4 | @foreach ($errors->all() as $error) 5 |
  • {{ $error }}
  • 6 | @endforeach 7 |
8 |
9 | @endif 10 | -------------------------------------------------------------------------------- /resources/views/mail/generic.blade.php: -------------------------------------------------------------------------------- 1 | {!! $body !!} 2 | 3 | @isset($signature) 4 | {!! $signature !!} 5 | @endisset 6 | -------------------------------------------------------------------------------- /resources/views/mail/internal-crm.blade.php: -------------------------------------------------------------------------------- 1 | @extends('mail.templates.default') 2 | 3 | @section('content') 4 |
5 | {!! $data['body'] !!} 6 | 7 | @isset($data['signature']) 8 | {!! $data['signature'] !!} 9 | @endisset 10 |
11 | @endsection 12 | -------------------------------------------------------------------------------- /resources/views/mail/ticket/status-changed.blade.php: -------------------------------------------------------------------------------- 1 | @extends('mail.templates.default') 2 | 3 | @section('content') 4 |

{{ __('Hi') }}, {{ $ticket->customer->name }}

5 |

{{ $body }}

6 | 10 | @endsection 11 | -------------------------------------------------------------------------------- /resources/views/order/print.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.print') 2 | 3 | @section('content') 4 | @push('styles') 5 | 6 | @endpush 7 | @include('order.partial._order', ['order' => $order]) 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/order/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('layouts.partials._header', ['title' => __('Order').' #'.$order->orderNumber(), 'print' => true]) 5 | @include('order.partial._order', ['order' => $order]) 6 | 7 | 12 | @endsection 13 | -------------------------------------------------------------------------------- /resources/views/powered.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Powered by Roskus 5 | 6 | 7 | -------------------------------------------------------------------------------- /resources/views/report/email.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

{{ __('Email marketing report') }}

6 |
7 | 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/report/sale.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

{{ __('Sales report') }}

6 |
7 | 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/setup/step1.blade.php: -------------------------------------------------------------------------------- 1 |
2 |

{{ trans('hammer.Setup') }} - {{ trans('hammer.Step') }} 1

3 |
4 |
5 |
6 | 7 | 11 |
12 |
13 | 14 |
15 |
-------------------------------------------------------------------------------- /resources/views/setup/step3.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/setup/step4.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/setup/step5.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/supplier/contact/contact.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 | @include('layouts.partials._header', ['title' => __('Contact')]) 5 | 6 | @include('supplier.contact.contact_form') 7 | 8 | @endsection 9 | -------------------------------------------------------------------------------- /resources/views/vendor/l5-swagger/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/resources/views/vendor/l5-swagger/.gitkeep -------------------------------------------------------------------------------- /resources/views/vendor/maileclipse/templates/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Roskus/prospero-flow-crm/588d75a0ba7732843c033fd9d1c5c1cc3b0f726c/resources/views/vendor/maileclipse/templates/.gitkeep -------------------------------------------------------------------------------- /resources/views/web_form/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('content') 4 |
5 |

{{ __('Web forms') }}

6 |
7 | 8 |
9 | {{ __('New') }} 10 |
11 | 12 | 13 | @endsection 14 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 20 | }); 21 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 21 | })->purpose('Display an inspiring quote'); 22 | -------------------------------------------------------------------------------- /routes/module/bank_account.php: -------------------------------------------------------------------------------- 1 | can('read bank'); 10 | 11 | Route::get('/bank-account/create', 12 | [\App\Http\Controllers\Bank\Account\BankAccountCreateController::class, 'create']) 13 | ->can('create bank'); 14 | 15 | Route::get('/bank-account/update/{id}', 16 | [\App\Http\Controllers\Bank\Account\BankAccountUpdateController::class, 'update']) 17 | ->can('update bank'); 18 | 19 | Route::get('/bank-account/save', 20 | [\App\Http\Controllers\Bank\Account\BankAccountSaveController::class, 'save']) 21 | ->can('create bank'); 22 | -------------------------------------------------------------------------------- /routes/module/brand.php: -------------------------------------------------------------------------------- 1 | middleware('auth'); 10 | Route::get('/notification/read/{id}', 11 | [\App\Http\Controllers\Notification\SetNotificationReadAjaxController::class, 'setRead']) 12 | ->middleware('auth'); 13 | Route::get('/notification/delete/{id}', 14 | [\App\Http\Controllers\Notification\DeleteNotificationController::class, 'delete']); 15 | -------------------------------------------------------------------------------- /routes/module/payroll.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | $uri = urldecode( 9 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 10 | ); 11 | 12 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 13 | // built-in PHP web server. This provides a convenient way to test a Laravel 14 | // application without having installed a "real" web server software here. 15 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 16 | return false; 17 | } 18 | 19 | require_once __DIR__.'/public/index.php'; 20 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | sonar.projectKey=Roskus_prospero-flow-crm 2 | sonar.organization=roskus 3 | 4 | sonar.php.coverage.reportPaths=coverage.xml 5 | sonar.exclusions=**/CreatesApplication.php 6 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/certs/jwt-rsa-4096-public.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt7pg4j9pP4OXYgUSO9cT 3 | cFdfeIpfTU6/7p9euAbJfNy5zFP0h5I1lFNb+ZOfvTSVsnzNlFgz777egwxN3HXh 4 | nMVeqCkWlu7Tvg9HYzdxdgc5DC960T+Q9kUYG2FtxIcLXUkPwFxFbOJvZkfT/bzX 5 | vmfLOef+zKdQrTmxDofeWcFTRxIRE/Kbvl8q7K2MChBodt7XSzAUkbmh/jwA1mz9 6 | uqqr1xc0wP26Yvq43sNa01m78yzThheXe5Yqpo0ZhqxstY+OaCrMC+Us98YcUorK 7 | FIEU/pBk9zQTyIM5EoM58/72KI8S0wWPRX1N0WnGsalPOd4cA0iMYl1wI9S26Tah 8 | 02yCpyi7EHW2rmZcsPfXLNEpBAJsmJRGizr3EyliHDoZrS0ndJknbHSZsb2xLNzr 9 | IAHOxv3VVx9vILhmI/8GKoyeGY6f6XsGZEAxKf30cuKvDeo36xlaQrfFTnBbjSSJ 10 | JXYUytYxHG4nyu1oWNZayenPH7s9wbHQNzpQpSZ1uUmijytWWLpB8Ystk6s8738x 11 | oDhmrYnP46yCuIHf0IJnIuyCsjK2suYjonJCypOQay8HjpHl3sNyQO5+GwgAjpeE 12 | QPA0oxPhfBANB0iXeaDPJtya4iqm+UcLXS/oXlXlxH8Q4HSBb+nT0jHovevZGS7f 13 | wFObzINEdSc/xoW77te4SUECAwEAAQ== 14 | -----END PUBLIC KEY----- 15 | -------------------------------------------------------------------------------- /storage/debugbar/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 20 | 21 | return $app; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Bank/BankCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/bank/create'); 16 | 17 | $response->assertOk(); 18 | $response->assertViewIs('bank.bank'); 19 | $response->assertSee(__('Name')); 20 | $response->assertSee(__('Phone')); 21 | $response->assertSee(__('Email')); 22 | $response->assertSee(__('Website')); 23 | $response->assertSee(__('Country')); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Bank/BankUpdateControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('bank/update/'.$bank->uuid); 19 | $response->assertSee($bank->name); 20 | $response->assertSee($bank->country->flag); 21 | $response->assertSee($bank->phone); 22 | $response->assertSee($bank->email); 23 | $response->assertSee($bank->website); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Brand/BrandCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/brand/create'); 16 | 17 | $response->assertOk(); 18 | $response->assertViewIs('brand.brand'); 19 | $response->assertSee(__('Name')); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Brand/BrandDeleteControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $this->get('brand/delete/'.$brand->id); 19 | 20 | // Convertir el modelo a array y eliminar 'created_at' y 'updated_at' antes de la aserción 21 | $brandData = $brand->toArray(); 22 | unset($brandData['created_at'], $brandData['updated_at']); 23 | 24 | $this->assertDatabaseMissing('brand', $brandData); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Brand/BrandIndexControllerTest.php: -------------------------------------------------------------------------------- 1 | count(2)->create(['company_id' => $this->user->company_id]); 17 | 18 | $response = $this->get('/brand'); 19 | $response->assertOk(); 20 | 21 | foreach ($brands as $brand) { 22 | $response->assertSee($brand->name); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Brand/BrandUpdateControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('brand/update/'.$brand->id); 19 | $response->assertSee($brand->name); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Company/CompanyCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/company/create'); 16 | $response->assertOk(); 17 | $response->assertViewIs('company.company'); 18 | $response->assertSee(__('Name')); 19 | $response->assertSee(__('E-mail')); 20 | $response->assertSee(__('Country')); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Company/CompanyDeleteControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('/company/delete/'.$company->id); 19 | $response->assertRedirect('/company'); 20 | 21 | $this->assertEquals(Company::find($company->id), null); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Customer/CustomerCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/customer/create'); 16 | 17 | $response->assertOk(); 18 | $response->assertViewIs('customer.customer'); 19 | $response->assertSee(__('Name')); 20 | $response->assertSee(__('Phone')); 21 | $response->assertSee(__('Country')); 22 | $response->assertSee(__('Street')); 23 | $response->assertSee(__('Facebook')); 24 | $response->assertSee(__('Status')); 25 | $response->assertSee(__('Seller')); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Customer/CustomerDeleteControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('/customer/delete/'.$customer->id); 19 | 20 | $response->assertRedirect('/customer'); 21 | $response->assertSessionHas('message', __('Customer deleted successfully')); 22 | $this->assertDatabaseMissing('customer', $customer->toArray()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Customer/CustomerImportIndexControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/customer/import'); 16 | 17 | $response->assertOk(); 18 | $response->assertViewIs('customer.import'); 19 | $response->assertSee(__('Download example file')); 20 | $response->assertSee(__('Save')); 21 | $response->assertSee(__('Separator')); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Customer/CustomerShowControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('/customer/show/'.$customer->id); 19 | 20 | $response->assertOk(); 21 | $response->assertViewIs('lead_customer.show'); 22 | $response->assertSee($customer->name); 23 | $response->assertSee($customer->business_name); 24 | $response->assertSee($customer->phone); 25 | $response->assertSee(__('Contacts')); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Email/EmailCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/email/create'); 16 | 17 | $response->assertOk(); 18 | $response->assertViewIs('email.email'); 19 | $response->assertSee(__('Subject')); 20 | $response->assertSee(__('From')); 21 | $response->assertSee(__('Attachments')); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Email/EmailDeleteControllerTest.php: -------------------------------------------------------------------------------- 1 | create(['company_id' => $this->user->company_id]); 17 | 18 | $response = $this->get('email/delete/'.$email->id); 19 | 20 | $response->assertRedirect('email'); 21 | $response->assertSessionHas('message', 'Email deleted successfully'); 22 | $this->assertDatabaseMissing('email', $email->toArray()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Email/EmailSendControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 21 | 22 | $response = $this->get('/email/send/'.$email->id); 23 | 24 | $response->assertRedirect('/email'); 25 | Mail::assertSent(GenericEmail::class); 26 | $this->equalTo($email->status, Email::SENT); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Email/EmailViewControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 17 | 18 | $response = $this->get('/email/view/'.$email->id); 19 | 20 | $response->assertOk(); 21 | $response->assertViewIs('email.view'); 22 | $response->assertSee($email->subject); 23 | $response->assertSee($email->body); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Lead/LeadCreateControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/lead/create'); 15 | 16 | $response->assertOk(); 17 | $response->assertViewIs('lead.lead'); 18 | $response->assertSee(__('Name')); 19 | $response->assertSee(__('Phone')); 20 | $response->assertSee(__('Country')); 21 | $response->assertSee(__('Street')); 22 | $response->assertSee(__('Facebook')); 23 | $response->assertSee(__('Status')); 24 | $response->assertSee(__('Seller')); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Lead/LeadDeleteControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 16 | 17 | $response = $this->get('/lead/delete/'.$lead->id); 18 | 19 | $response->assertRedirect('/lead'); 20 | $response->assertSessionHas('message', 'Lead deleted successfully'); 21 | $this->assertDatabaseMissing('lead', $lead->toArray()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Lead/LeadImportIndexControllerTest.php: -------------------------------------------------------------------------------- 1 | get('/lead/import'); 15 | 16 | $response->assertOk(); 17 | $response->assertViewIs('lead.import'); 18 | $response->assertSee('Download example file'); 19 | $response->assertSee(__('Save')); 20 | $response->assertSee(__('Separator')); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Lead/LeadShowControllerTest.php: -------------------------------------------------------------------------------- 1 | create(); 16 | 17 | $response = $this->get('/lead/show/'.$lead->id); 18 | 19 | $response->assertOk(); 20 | $response->assertViewIs('lead_customer.show'); 21 | $response->assertSee($lead->name); 22 | $response->assertSee($lead->business_name); 23 | $response->assertSee($lead->phone); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Lead/hammer_lead_example_20221212.csv: -------------------------------------------------------------------------------- 1 | name;business_name;phone;phone2;mobile;email;email2;website;country_id;city;notes;facebook;instagram;linkedin;twitter;youtube;tiktok;tags 2 | John Doe Corp.;John Doe Corp.;1111111111;22222222222;33333333333;john.doe@jhondoecorp.com;john.doe2@jhondoecorp.com;https://www.jhondoecorp.com;us;New York;Joe Doe Corportaion LTD other notes;https://facebook.com/joedoe;;;;;john,example 3 | -------------------------------------------------------------------------------- /tests/Feature/Controllers/Product/prospero_product_example_20221206.csv: -------------------------------------------------------------------------------- 1 | name;category;brand;model;sku;barcode;cost;price;description;tags 2 | Test product XPS13;category test;DELL;JD9DY;DELL-JD9DY;5397184753866;1000;1383.82;Intel Core i7-1250U/16GB/512GB SSD/13.4";notebook,intel,dell,xps 3 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | freezeTime(); 24 | 25 | $role = Role::create(['name' => 'SuperAdmin', 'guard_name' => 'web']); 26 | 27 | $this->user = User::factory()->create(); 28 | $this->user->assignRole($role); 29 | 30 | $this->actingAs($this->user); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /version.php: -------------------------------------------------------------------------------- 1 |