stay_commerce 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +53 -0
- data/Rakefile +8 -0
- data/app/assets/config/stay_manifest.js +1 -0
- data/app/assets/fonts/bootstrap-icons.woff +0 -0
- data/app/assets/fonts/bootstrap-icons.woff2 +0 -0
- data/app/assets/images/chevron-down.svg +3 -0
- data/app/assets/images/circle-fill.svg +3 -0
- data/app/assets/images/circle.svg +3 -0
- data/app/assets/images/plus-circle.svg +4 -0
- data/app/assets/images/save.svg +3 -0
- data/app/assets/images/store.svg +3 -0
- data/app/assets/javascripts/stay/admin/address.js +165 -0
- data/app/assets/javascripts/stay/admin/ckeditor.min.js +7 -0
- data/app/assets/javascripts/stay/admin/flatpickr.min.js +2 -0
- data/app/assets/javascripts/stay/admin/index.js +28 -0
- data/app/assets/javascripts/stay/admin/property.js +37 -0
- data/app/assets/javascripts/stay/admin/select2.min.js +2 -0
- data/app/assets/javascripts/stay/application.js +14 -0
- data/app/assets/javascripts/stay/bootstrap.bundle.min.js +7 -0
- data/app/assets/javascripts/stay/ckeditor.js +11 -0
- data/app/assets/javascripts/stay/custom.js +56 -0
- data/app/assets/javascripts/stay/jquery-ui.min.js +13 -0
- data/app/assets/javascripts/stay/jquery.min.js +2 -0
- data/app/assets/stylesheets/stay/admin/flatpickr.min.css +13 -0
- data/app/assets/stylesheets/stay/admin/index.css +100 -0
- data/app/assets/stylesheets/stay/admin/select2.min.css +1 -0
- data/app/assets/stylesheets/stay/application.css +24 -0
- data/app/assets/stylesheets/stay/badges.css +72 -0
- data/app/assets/stylesheets/stay/bootstrap-icons.min.css +5 -0
- data/app/assets/stylesheets/stay/bootstrap-icons_fix.css +5 -0
- data/app/assets/stylesheets/stay/common.css +283 -0
- data/app/assets/stylesheets/stay/jquery-ui.css +1311 -0
- data/app/assets/stylesheets/stay/webpixels.css +7 -0
- data/app/channels/chat_channel.rb +13 -0
- data/app/controllers/concerns/stay/booking_validations.rb +86 -0
- data/app/controllers/concerns/stay/stripe_concern.rb +72 -0
- data/app/controllers/stay/admin/addresses_controller.rb +76 -0
- data/app/controllers/stay/admin/amenities_controller.rb +52 -0
- data/app/controllers/stay/admin/amenity_categories_controller.rb +52 -0
- data/app/controllers/stay/admin/base_controller.rb +38 -0
- data/app/controllers/stay/admin/bed_types_controller.rb +51 -0
- data/app/controllers/stay/admin/bookings_controller.rb +54 -0
- data/app/controllers/stay/admin/cancellation_policies_controller.rb +51 -0
- data/app/controllers/stay/admin/chats_controller.rb +53 -0
- data/app/controllers/stay/admin/cities_controller.rb +66 -0
- data/app/controllers/stay/admin/confirmations_controller.rb +30 -0
- data/app/controllers/stay/admin/countries_controller.rb +53 -0
- data/app/controllers/stay/admin/dashboard_controller.rb +8 -0
- data/app/controllers/stay/admin/features_controller.rb +54 -0
- data/app/controllers/stay/admin/home_controller.rb +15 -0
- data/app/controllers/stay/admin/house_rules_controller.rb +51 -0
- data/app/controllers/stay/admin/messages_controller.rb +53 -0
- data/app/controllers/stay/admin/passwords_controller.rb +32 -0
- data/app/controllers/stay/admin/payment_methods_controller.rb +53 -0
- data/app/controllers/stay/admin/payments_controller.rb +63 -0
- data/app/controllers/stay/admin/properties_controller.rb +118 -0
- data/app/controllers/stay/admin/property_categories_controller.rb +51 -0
- data/app/controllers/stay/admin/property_types_controller.rb +51 -0
- data/app/controllers/stay/admin/registrations_controller.rb +19 -0
- data/app/controllers/stay/admin/reviews_Controller.rb +63 -0
- data/app/controllers/stay/admin/roles_controller.rb +54 -0
- data/app/controllers/stay/admin/room_amenities_controller.rb +43 -0
- data/app/controllers/stay/admin/room_types_controller.rb +58 -0
- data/app/controllers/stay/admin/rooms_controller.rb +62 -0
- data/app/controllers/stay/admin/sessions_controller.rb +29 -0
- data/app/controllers/stay/admin/states_controller.rb +68 -0
- data/app/controllers/stay/admin/stores_controller.rb +132 -0
- data/app/controllers/stay/admin/taxes_controller.rb +51 -0
- data/app/controllers/stay/admin/users_controller.rb +85 -0
- data/app/controllers/stay/api/v1/amenities_controller.rb +13 -0
- data/app/controllers/stay/api/v1/amenity_categories_controller.rb +13 -0
- data/app/controllers/stay/api/v1/bed_types_controller.rb +9 -0
- data/app/controllers/stay/api/v1/booking_queries_controller.rb +205 -0
- data/app/controllers/stay/api/v1/bookings_controller.rb +299 -0
- data/app/controllers/stay/api/v1/cancellation_policies_controller.rb +10 -0
- data/app/controllers/stay/api/v1/chats_controller.rb +116 -0
- data/app/controllers/stay/api/v1/credit_cards_controller.rb +62 -0
- data/app/controllers/stay/api/v1/features_controller.rb +21 -0
- data/app/controllers/stay/api/v1/house_rules_controller.rb +9 -0
- data/app/controllers/stay/api/v1/invoices_controller.rb +47 -0
- data/app/controllers/stay/api/v1/messages_controller.rb +144 -0
- data/app/controllers/stay/api/v1/payments_controller.rb +61 -0
- data/app/controllers/stay/api/v1/profiles_controller.rb +23 -0
- data/app/controllers/stay/api/v1/properties_controller.rb +233 -0
- data/app/controllers/stay/api/v1/property_categories_controller.rb +14 -0
- data/app/controllers/stay/api/v1/property_types_controller.rb +14 -0
- data/app/controllers/stay/api/v1/room_types_controller.rb +14 -0
- data/app/controllers/stay/api/v1/rooms_controller.rb +23 -0
- data/app/controllers/stay/api/v1/user_paypal_controller.rb +53 -0
- data/app/controllers/stay/api/v1/users_controller.rb +17 -0
- data/app/controllers/stay/application_controller.rb +44 -0
- data/app/controllers/stay/base_api_controller.rb +14 -0
- data/app/controllers/stay/bookings_controller.rb +29 -0
- data/app/controllers/stay/payments_controller.rb +50 -0
- data/app/controllers/stay/profiles_controller.rb +26 -0
- data/app/controllers/stay/properties_controller.rb +15 -0
- data/app/controllers/stay/rooms_controller.rb +22 -0
- data/app/controllers/stay/users/confirmations_controller.rb +30 -0
- data/app/controllers/stay/users/omniauth_callbacks_controller.rb +30 -0
- data/app/controllers/stay/users/passwords_controller.rb +51 -0
- data/app/controllers/stay/users/registrations_controller.rb +62 -0
- data/app/controllers/stay/users/sessions_controller.rb +27 -0
- data/app/controllers/stay/users/unlocks_controller.rb +30 -0
- data/app/helpers/stay/admin/cities_helper.rb +4 -0
- data/app/helpers/stay/admin/countries_helper.rb +4 -0
- data/app/helpers/stay/admin/states_helper.rb +4 -0
- data/app/helpers/stay/admin/stores_helper.rb +25 -0
- data/app/helpers/stay/application_helper.rb +63 -0
- data/app/helpers/stay/currency_helper.rb +34 -0
- data/app/helpers/stay/locale_helper.rb +107 -0
- data/app/jobs/stay/application_job.rb +4 -0
- data/app/mailers/stay/application_mailer.rb +6 -0
- data/app/mailers/stay/user_mailer.rb +13 -0
- data/app/models/concerns/stay/translatable_resource.rb +25 -0
- data/app/models/stay/additional_rule.rb +5 -0
- data/app/models/stay/address.rb +40 -0
- data/app/models/stay/amenity.rb +13 -0
- data/app/models/stay/amenity_category.rb +6 -0
- data/app/models/stay/application_record.rb +5 -0
- data/app/models/stay/bed_type.rb +7 -0
- data/app/models/stay/booking.rb +199 -0
- data/app/models/stay/booking_query.rb +23 -0
- data/app/models/stay/cancellation_policy.rb +6 -0
- data/app/models/stay/chat.rb +23 -0
- data/app/models/stay/city.rb +9 -0
- data/app/models/stay/country.rb +23 -0
- data/app/models/stay/credit_card.rb +6 -0
- data/app/models/stay/discount.rb +4 -0
- data/app/models/stay/expense.rb +4 -0
- data/app/models/stay/feature.rb +11 -0
- data/app/models/stay/house_rule.rb +4 -0
- data/app/models/stay/invoice.rb +23 -0
- data/app/models/stay/line_item.rb +7 -0
- data/app/models/stay/message.rb +30 -0
- data/app/models/stay/payment.rb +54 -0
- data/app/models/stay/payment_method.rb +13 -0
- data/app/models/stay/price.rb +18 -0
- data/app/models/stay/property.rb +243 -0
- data/app/models/stay/property_amenity.rb +6 -0
- data/app/models/stay/property_category.rb +6 -0
- data/app/models/stay/property_feature.rb +6 -0
- data/app/models/stay/property_house_rule.rb +6 -0
- data/app/models/stay/property_tax.rb +6 -0
- data/app/models/stay/property_type.rb +15 -0
- data/app/models/stay/review.rb +5 -0
- data/app/models/stay/role.rb +11 -0
- data/app/models/stay/role_user.rb +6 -0
- data/app/models/stay/room.rb +93 -0
- data/app/models/stay/room_amenity.rb +6 -0
- data/app/models/stay/room_feature.rb +6 -0
- data/app/models/stay/room_type.rb +7 -0
- data/app/models/stay/state.rb +13 -0
- data/app/models/stay/store.rb +139 -0
- data/app/models/stay/store_property.rb +9 -0
- data/app/models/stay/tax.rb +8 -0
- data/app/models/stay/user.rb +111 -0
- data/app/models/stay/user_paypal.rb +5 -0
- data/app/serializers/amenity_category_serializer.rb +13 -0
- data/app/serializers/amenity_serializer.rb +3 -0
- data/app/serializers/bed_type_serializer.rb +5 -0
- data/app/serializers/booking_query_serializer.rb +6 -0
- data/app/serializers/booking_serializer.rb +68 -0
- data/app/serializers/cancellation_policy_serializer.rb +3 -0
- data/app/serializers/chat_serializer.rb +63 -0
- data/app/serializers/credit_card_serializer.rb +7 -0
- data/app/serializers/house_rules_serializer.rb +3 -0
- data/app/serializers/invoice_serializer.rb +41 -0
- data/app/serializers/last_5_messages_serializer.rb +7 -0
- data/app/serializers/line_item_serializer.rb +6 -0
- data/app/serializers/message_serializer.rb +44 -0
- data/app/serializers/property_category_serializer.rb +7 -0
- data/app/serializers/property_feature_serializer.rb +5 -0
- data/app/serializers/property_listing_serializer.rb +13 -0
- data/app/serializers/property_serializer.rb +77 -0
- data/app/serializers/property_type_serializer.rb +7 -0
- data/app/serializers/room_serializer.rb +36 -0
- data/app/serializers/room_type_serializer.rb +5 -0
- data/app/serializers/user_listing_serializer.rb +23 -0
- data/app/serializers/user_serializer.rb +41 -0
- data/app/services/stay/bookings/create_booking_service.rb +49 -0
- data/app/services/stay/bookings/create_line_item_service.rb +15 -0
- data/app/services/stay/bookings/existing_booking_service.rb +50 -0
- data/app/services/stay/chat/chat_messaging_service.rb +82 -0
- data/app/services/stay/chat/query_messaging_service.rb +56 -0
- data/app/services/stay/seeds/all.rb +27 -0
- data/app/services/stay/seeds/cancellation_policy.rb +21 -0
- data/app/services/stay/seeds/countries.rb +33 -0
- data/app/services/stay/seeds/roles.rb +9 -0
- data/app/services/stay/seeds/states.rb +63 -0
- data/app/services/stay/seeds/stores.rb +34 -0
- data/app/views/devise/mailer/reset_password_instructions.html.rb +10 -0
- data/app/views/kaminari/_first_page.html.erb +3 -0
- data/app/views/kaminari/_gap.html.erb +3 -0
- data/app/views/kaminari/_last_page.html.erb +3 -0
- data/app/views/kaminari/_next_page.html.erb +3 -0
- data/app/views/kaminari/_page.html.erb +9 -0
- data/app/views/kaminari/_paginator.html.erb +17 -0
- data/app/views/kaminari/_prev_page.html.erb +3 -0
- data/app/views/layouts/stay/admin.html.erb +45 -0
- data/app/views/layouts/stay/application.html.erb +34 -0
- data/app/views/stay/admin/addresses/_form.html.erb +49 -0
- data/app/views/stay/admin/addresses/edit.html.erb +5 -0
- data/app/views/stay/admin/addresses/index.html.erb +68 -0
- data/app/views/stay/admin/addresses/new.html.erb +5 -0
- data/app/views/stay/admin/addresses/show.html.erb +40 -0
- data/app/views/stay/admin/amenities/_form.html.erb +38 -0
- data/app/views/stay/admin/amenities/edit.html.erb +14 -0
- data/app/views/stay/admin/amenities/index.html.erb +58 -0
- data/app/views/stay/admin/amenities/new.html.erb +14 -0
- data/app/views/stay/admin/amenities/show.html.erb +19 -0
- data/app/views/stay/admin/amenity_categories/_form.html.erb +29 -0
- data/app/views/stay/admin/amenity_categories/edit.html.erb +14 -0
- data/app/views/stay/admin/amenity_categories/index.html.erb +53 -0
- data/app/views/stay/admin/amenity_categories/new.html.erb +14 -0
- data/app/views/stay/admin/amenity_categories/show.html.erb +18 -0
- data/app/views/stay/admin/bed_types/_form.html.erb +29 -0
- data/app/views/stay/admin/bed_types/edit.html.erb +14 -0
- data/app/views/stay/admin/bed_types/index.html.erb +56 -0
- data/app/views/stay/admin/bed_types/new.html.erb +14 -0
- data/app/views/stay/admin/bed_types/show.html.erb +0 -0
- data/app/views/stay/admin/bookings/_booking_invoice.html.erb +37 -0
- data/app/views/stay/admin/bookings/_booking_summary.html.erb +61 -0
- data/app/views/stay/admin/bookings/_form.html.erb +59 -0
- data/app/views/stay/admin/bookings/edit.html.erb +14 -0
- data/app/views/stay/admin/bookings/index.html.erb +74 -0
- data/app/views/stay/admin/bookings/new.html.erb +14 -0
- data/app/views/stay/admin/bookings/show.html.erb +80 -0
- data/app/views/stay/admin/cancellation_policies/_form.html.erb +38 -0
- data/app/views/stay/admin/cancellation_policies/edit.html.erb +14 -0
- data/app/views/stay/admin/cancellation_policies/index.html.erb +58 -0
- data/app/views/stay/admin/cancellation_policies/new.html.erb +14 -0
- data/app/views/stay/admin/cancellation_policies/show.html.erb +0 -0
- data/app/views/stay/admin/chats/_form.html.erb +31 -0
- data/app/views/stay/admin/chats/edit.html.erb +5 -0
- data/app/views/stay/admin/chats/index.html.erb +58 -0
- data/app/views/stay/admin/chats/new.html.erb +5 -0
- data/app/views/stay/admin/chats/show.html.erb +19 -0
- data/app/views/stay/admin/cities/_form.html.erb +30 -0
- data/app/views/stay/admin/cities/edit.html.erb +14 -0
- data/app/views/stay/admin/cities/index.html.erb +62 -0
- data/app/views/stay/admin/cities/new.html.erb +14 -0
- data/app/views/stay/admin/countries/_form.html.erb +64 -0
- data/app/views/stay/admin/countries/edit.html.erb +14 -0
- data/app/views/stay/admin/countries/index.html.erb +62 -0
- data/app/views/stay/admin/countries/new.html.erb +14 -0
- data/app/views/stay/admin/countries/show.html.erb +23 -0
- data/app/views/stay/admin/dashboard/index.html.erb +1 -0
- data/app/views/stay/admin/features/_form.html.erb +38 -0
- data/app/views/stay/admin/features/edit.html.erb +14 -0
- data/app/views/stay/admin/features/index.html.erb +58 -0
- data/app/views/stay/admin/features/new.html.erb +14 -0
- data/app/views/stay/admin/features/show.html.erb +19 -0
- data/app/views/stay/admin/house_rules/_form.html.erb +29 -0
- data/app/views/stay/admin/house_rules/edit.html.erb +14 -0
- data/app/views/stay/admin/house_rules/index.html.erb +54 -0
- data/app/views/stay/admin/house_rules/new.html.erb +14 -0
- data/app/views/stay/admin/house_rules/show.html.erb +18 -0
- data/app/views/stay/admin/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/stay/admin/mailer/email_changed.html.erb +7 -0
- data/app/views/stay/admin/mailer/password_change.html.erb +3 -0
- data/app/views/stay/admin/mailer/reset_password_instructions.html.erb +7 -0
- data/app/views/stay/admin/messages/_form.html.erb +36 -0
- data/app/views/stay/admin/messages/edit.html.erb +5 -0
- data/app/views/stay/admin/messages/index.html.erb +60 -0
- data/app/views/stay/admin/messages/new.html.erb +5 -0
- data/app/views/stay/admin/messages/show.html.erb +24 -0
- data/app/views/stay/admin/passwords/edit.html.erb +37 -0
- data/app/views/stay/admin/passwords/new.html.erb +28 -0
- data/app/views/stay/admin/payment_methods/_form.html.erb +22 -0
- data/app/views/stay/admin/payment_methods/edit.html.erb +14 -0
- data/app/views/stay/admin/payment_methods/index.html.erb +54 -0
- data/app/views/stay/admin/payment_methods/new.html.erb +14 -0
- data/app/views/stay/admin/payment_methods/show.html.erb +18 -0
- data/app/views/stay/admin/payments/_form.html.erb +36 -0
- data/app/views/stay/admin/payments/edit.html.erb +5 -0
- data/app/views/stay/admin/payments/index.html.erb +60 -0
- data/app/views/stay/admin/payments/new.html.erb +5 -0
- data/app/views/stay/admin/payments/show.html.erb +24 -0
- data/app/views/stay/admin/properties/_amenities.html.erb +38 -0
- data/app/views/stay/admin/properties/_calendar.html.erb +37 -0
- data/app/views/stay/admin/properties/_description.html.erb +126 -0
- data/app/views/stay/admin/properties/_details.html.erb +75 -0
- data/app/views/stay/admin/properties/_features.html.erb +39 -0
- data/app/views/stay/admin/properties/_form.html.erb +118 -0
- data/app/views/stay/admin/properties/_images.html.erb +48 -0
- data/app/views/stay/admin/properties/_location.html.erb +55 -0
- data/app/views/stay/admin/properties/_price.html.erb +88 -0
- data/app/views/stay/admin/properties/_sidebar.html.erb +47 -0
- data/app/views/stay/admin/properties/edit.html.erb +17 -0
- data/app/views/stay/admin/properties/index.html.erb +82 -0
- data/app/views/stay/admin/properties/new.html.erb +14 -0
- data/app/views/stay/admin/properties/show.html.erb +149 -0
- data/app/views/stay/admin/property_categories/_form.html.erb +29 -0
- data/app/views/stay/admin/property_categories/edit.html.erb +14 -0
- data/app/views/stay/admin/property_categories/index.html.erb +57 -0
- data/app/views/stay/admin/property_categories/new.html.erb +14 -0
- data/app/views/stay/admin/property_categories/show.html.erb +18 -0
- data/app/views/stay/admin/property_types/_form.html.erb +29 -0
- data/app/views/stay/admin/property_types/edit.html.erb +14 -0
- data/app/views/stay/admin/property_types/index.html.erb +56 -0
- data/app/views/stay/admin/property_types/new.html.erb +14 -0
- data/app/views/stay/admin/property_types/show.html.erb +18 -0
- data/app/views/stay/admin/registrations/edit.html.erb +43 -0
- data/app/views/stay/admin/registrations/new.html.erb +35 -0
- data/app/views/stay/admin/reviews/_form.html.erb +37 -0
- data/app/views/stay/admin/reviews/edit.html.erb +14 -0
- data/app/views/stay/admin/reviews/index.html.erb +58 -0
- data/app/views/stay/admin/reviews/new.html.erb +14 -0
- data/app/views/stay/admin/reviews/show.html.erb +20 -0
- data/app/views/stay/admin/roles/_form.html.erb +24 -0
- data/app/views/stay/admin/roles/edit.html.erb +14 -0
- data/app/views/stay/admin/roles/index.html.erb +55 -0
- data/app/views/stay/admin/roles/new.html.erb +14 -0
- data/app/views/stay/admin/roles/show.html.erb +18 -0
- data/app/views/stay/admin/room_types/_form.html.erb +37 -0
- data/app/views/stay/admin/room_types/edit.html.erb +14 -0
- data/app/views/stay/admin/room_types/index.html.erb +58 -0
- data/app/views/stay/admin/room_types/new.html.erb +14 -0
- data/app/views/stay/admin/room_types/show.html.erb +19 -0
- data/app/views/stay/admin/rooms/_form.html.erb +136 -0
- data/app/views/stay/admin/rooms/edit.html.erb +14 -0
- data/app/views/stay/admin/rooms/index.html.erb +69 -0
- data/app/views/stay/admin/rooms/new.html.erb +14 -0
- data/app/views/stay/admin/rooms/show.html.erb +25 -0
- data/app/views/stay/admin/sessions/new.html.erb +36 -0
- data/app/views/stay/admin/shared/_common-table.html.erb +334 -0
- data/app/views/stay/admin/shared/_error_messages.html.erb +15 -0
- data/app/views/stay/admin/shared/_header.html.erb +55 -0
- data/app/views/stay/admin/shared/_links.html.erb +15 -0
- data/app/views/stay/admin/shared/_sidebar.html.erb +154 -0
- data/app/views/stay/admin/shared/_store_switcher.html.erb +30 -0
- data/app/views/stay/admin/states/_form.html.erb +39 -0
- data/app/views/stay/admin/states/edit.html.erb +14 -0
- data/app/views/stay/admin/states/index.html.erb +61 -0
- data/app/views/stay/admin/states/new.html.erb +14 -0
- data/app/views/stay/admin/states/show.html.erb +0 -0
- data/app/views/stay/admin/stores/_form.html.erb +30 -0
- data/app/views/stay/admin/stores/_tabs.html.erb +17 -0
- data/app/views/stay/admin/stores/edit.html.erb +14 -0
- data/app/views/stay/admin/stores/form/_basic.html.erb +35 -0
- data/app/views/stay/admin/stores/form/_emails.html.erb +34 -0
- data/app/views/stay/admin/stores/form/_footer.html.erb +28 -0
- data/app/views/stay/admin/stores/form/_internationalization.html.erb +52 -0
- data/app/views/stay/admin/stores/form/_seo.html.erb +42 -0
- data/app/views/stay/admin/stores/form/_social.html.erb +34 -0
- data/app/views/stay/admin/stores/index.html.erb +66 -0
- data/app/views/stay/admin/stores/new.html.erb +14 -0
- data/app/views/stay/admin/stores/translations.html.erb +8 -0
- data/app/views/stay/admin/taxes/_form.html.erb +29 -0
- data/app/views/stay/admin/taxes/edit.html.erb +14 -0
- data/app/views/stay/admin/taxes/index.html.erb +56 -0
- data/app/views/stay/admin/taxes/new.html.erb +14 -0
- data/app/views/stay/admin/taxes/show.html.erb +18 -0
- data/app/views/stay/admin/users/_address.html.erb +57 -0
- data/app/views/stay/admin/users/_address_form.html.erb +29 -0
- data/app/views/stay/admin/users/_form.html.erb +73 -0
- data/app/views/stay/admin/users/_sidebar.html.erb +12 -0
- data/app/views/stay/admin/users/addresses.html.erb +17 -0
- data/app/views/stay/admin/users/edit.html.erb +17 -0
- data/app/views/stay/admin/users/index.html.erb +74 -0
- data/app/views/stay/admin/users/new.html.erb +14 -0
- data/app/views/stay/admin/users/show.html.erb +23 -0
- data/app/views/stay/bookings/new.html.erb +92 -0
- data/app/views/stay/payments/_payment.js.erb +127 -0
- data/app/views/stay/payments/new.html.erb +187 -0
- data/app/views/stay/properties/index.html.erb +56 -0
- data/app/views/stay/properties/show.html.erb +137 -0
- data/app/views/stay/shared/_navbar.html.erb +35 -0
- data/app/views/stay/user_mailer/new_host_signup.html.erb +12 -0
- data/app/views/stay/user_mailer/welcome_email.html.erb +9 -0
- data/app/views/stay/users/confirmations/new.html.erb +16 -0
- data/app/views/stay/users/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/stay/users/mailer/email_changed.html.erb +7 -0
- data/app/views/stay/users/mailer/password_change.html.erb +3 -0
- data/app/views/stay/users/mailer/reset_password_instructions.html.erb +7 -0
- data/app/views/stay/users/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/stay/users/passwords/edit.html.erb +37 -0
- data/app/views/stay/users/passwords/new.html.erb +28 -0
- data/app/views/stay/users/registrations/edit.html.erb +43 -0
- data/app/views/stay/users/registrations/new.html.erb +42 -0
- data/app/views/stay/users/sessions/new.html.erb +43 -0
- data/app/views/stay/users/shared/_error_messages.html.erb +15 -0
- data/app/views/stay/users/shared/_links.html.erb +25 -0
- data/app/views/stay/users/unlocks/new.html.erb +16 -0
- data/config/initializers/devise.rb +358 -0
- data/config/initializers/friendly_id.rb +107 -0
- data/config/initializers/geocoder.rb +4 -0
- data/config/initializers/kaminari_config.rb +14 -0
- data/config/initializers/mobility.rb +17 -0
- data/config/initializers/stripe.rb +8 -0
- data/config/locales/devise.en.yml +65 -0
- data/config/locales/devise_api.en.yml +23 -0
- data/config/locales/en.yml +38 -0
- data/config/routes.rb +187 -0
- data/db/migrate/20240912073149_devise_create_stay_users.rb +50 -0
- data/db/migrate/20240912073248_create_devise_api_tables.rb +29 -0
- data/db/migrate/20240912092842_create_stay_roles.rb +9 -0
- data/db/migrate/20240912093003_create_stay_role_users.rb +10 -0
- data/db/migrate/20240912093151_create_stay_properties.rb +16 -0
- data/db/migrate/20240912093213_create_stay_rooms.rb +12 -0
- data/db/migrate/20240912093240_create_stay_bookings.rb +15 -0
- data/db/migrate/20240912093346_create_stay_payment_methods.rb +9 -0
- data/db/migrate/20240912093408_create_stay_payments.rb +12 -0
- data/db/migrate/20240912093603_create_stay_reviews.rb +11 -0
- data/db/migrate/20240912093644_create_stay_chats.rb +11 -0
- data/db/migrate/20240912093717_create_stay_messages.rb +12 -0
- data/db/migrate/20240912093759_create_stay_countries.rb +14 -0
- data/db/migrate/20240912093824_create_stay_states.rb +11 -0
- data/db/migrate/20240912093903_create_stay_cities.rb +10 -0
- data/db/migrate/20240912094149_create_stay_addresses.rb +19 -0
- data/db/migrate/20240916071141_create_active_storage_tables.rb +57 -0
- data/db/migrate/20240918080551_add_columns_to_stay_bookings.rb +12 -0
- data/db/migrate/20240918101502_add_columns_to_stay_payments.rb +16 -0
- data/db/migrate/20240918110958_create_stay_prices.rb +13 -0
- data/db/migrate/20240918112045_add_columns_to_stay_rooms.rb +5 -0
- data/db/migrate/20240918114609_add_payment_intent_in_bookings.rb +6 -0
- data/db/migrate/20240919045205_add_user_to_stay_addresses.rb +5 -0
- data/db/migrate/20240919063400_create_stay_room_types.rb +10 -0
- data/db/migrate/20240919070423_rename_room_type_to_room_type_id_in_stay_rooms.rb +5 -0
- data/db/migrate/20240919071642_rename_status_to_state_in_stay_payments.rb +5 -0
- data/db/migrate/20240919100508_remove_room_id_from_stay_properties.rb +5 -0
- data/db/migrate/20240919111801_create_stay_line_items.rb +16 -0
- data/db/migrate/20240919124704_remove_room_id_from_stay_bookings.rb +5 -0
- data/db/migrate/20240924053658_add_is_master_in_stay_rooms.rb +5 -0
- data/db/migrate/20240925063733_add_zipcode_required_in_countries.rb +5 -0
- data/db/migrate/20240926055951_remove_city_reference_from_stay_addresses.rb +5 -0
- data/db/migrate/20240927055935_change_price_per_night_to_decimal_in_stay_rooms.rb +5 -0
- data/db/migrate/20240927063023_add_first_name_to_stay_addresses.rb +8 -0
- data/db/migrate/20240927070538_change_description_to_text_in_stay_properties.rb +6 -0
- data/db/migrate/20240927111110_create_stay_stores.rb +33 -0
- data/db/migrate/20240930095921_create_stay_cancellation_policies.rb +9 -0
- data/db/migrate/20240930100157_add_cancellation_id_to_stay_properties.rb +5 -0
- data/db/migrate/20240930152331_create_stay_store_translations.rb +22 -0
- data/db/migrate/20240930162337_create_stay_store_properties.rb +10 -0
- data/db/migrate/20241001101816_create_stay_property_categories.rb +8 -0
- data/db/migrate/20241001102646_add_property_category_id_to_property.rb +5 -0
- data/db/migrate/20241001103758_create_stay_property_types.rb +9 -0
- data/db/migrate/20241001111306_add_store_id_to_stay_bookings.rb +5 -0
- data/db/migrate/20241001160330_add_deleted_at_to_stay_store_translations.rb +5 -0
- data/db/migrate/20241004061647_add_field_to_stay_properties.rb +20 -0
- data/db/migrate/20241004062057_create_stay_bed_types.rb +9 -0
- data/db/migrate/20241004062251_add_details_to_stay_rooms.rb +9 -0
- data/db/migrate/20241004070456_add_property_type_id_to_stay_property_categories.rb +6 -0
- data/db/migrate/20241004105821_create_stay_amenity_categories.rb +8 -0
- data/db/migrate/20241004112600_create_stay_amenities.rb +9 -0
- data/db/migrate/20241004115207_create_stay_house_rules.rb +8 -0
- data/db/migrate/20241004115317_create_stay_additional_rules.rb +9 -0
- data/db/migrate/20241004115608_create_stay_property_amenities.rb +9 -0
- data/db/migrate/20241004115615_create_stay_room_amenities.rb +9 -0
- data/db/migrate/20241007051646_add_preferences_to_stay_users.rb +5 -0
- data/db/migrate/20241007165530_create_stay_creates.rb +10 -0
- data/db/migrate/20241008111346_add_deleted_at_to_stay_users.rb +7 -0
- data/db/migrate/20241008151958_add_price_per_night_in_stay_properties.rb +5 -0
- data/db/migrate/20241010071855_add_zipcode_to_stay_property.rb +8 -0
- data/db/migrate/20241014085441_add_amenity_type_in_amenities.rb +5 -0
- data/db/migrate/20241015055940_create_stay_features.rb +10 -0
- data/db/migrate/20241015060804_create_stay_property_features.rb +9 -0
- data/db/migrate/20241015060854_create_stay_room_features.rb +9 -0
- data/db/migrate/20241016055948_create_stay_tax.rb +9 -0
- data/db/migrate/20241016060354_create_stay_property_tax.rb +11 -0
- data/db/migrate/20241016091120_remove_column_from_stay_properties_categories.rb +6 -0
- data/db/migrate/20241016091829_add_column_to_stay_property.rb +5 -0
- data/db/migrate/20241016112707_add_country_to_stay_properties.rb +6 -0
- data/db/migrate/20241016153847_add_state_to_properties.rb +7 -0
- data/db/migrate/20241016170528_up_date_price_column_in_stay_property.rb +5 -0
- data/db/migrate/20241017031520_add_new_field_to_stay_properties.rb +8 -0
- data/db/migrate/20241017051450_add_column_to_stay_chat.rb +7 -0
- data/db/migrate/20241018090158_create_stay_stay_credit_cards.rb +16 -0
- data/db/migrate/20241021090444_create_stay_stay_user_paypals.rb +9 -0
- data/db/migrate/20241024065949_add_stay_property_to_stay_b0okings.rb +5 -0
- data/db/migrate/20241027062126_add_events_to_stay_messages.rb +8 -0
- data/db/migrate/20241028105007_create_stay_invoices.rb +15 -0
- data/db/migrate/20241028105323_create_stay_expenses.rb +10 -0
- data/db/migrate/20241028105331_create_stay_discounts.rb +10 -0
- data/db/migrate/20241101044618_create_stay_booking_queries.rb +17 -0
- data/db/migrate/20241101093057_add_read_at_to_stay_messages.rb +5 -0
- data/db/migrate/20241113061248_modify_cancellation_policy_on_properties.rb +7 -0
- data/db/migrate/20241118064033_rename_columns_in_stay_properties.rb +7 -0
- data/db/migrate/20241127060541_add_new_fields_to_property.rb +11 -0
- data/db/migrate/20241128111832_add_name_to_stay_rooms.rb +5 -0
- data/db/migrate/20241129063922_change_amenity_category_null_on_stay_amenities.rb +5 -0
- data/db/migrate/20241205092935_add_slug_to_stay_properties.rb +6 -0
- data/db/migrate/20241205092943_create_friendly_id_slugs.rb +21 -0
- data/db/migrate/20241217044817_add_deleted_atto_stay_property.rb +6 -0
- data/db/migrate/20241230064432_modify_property_category_on_properties.rb +7 -0
- data/db/seeds.rb +1 -0
- data/lib/stay/controller_helpers/currency.rb +54 -0
- data/lib/stay/controller_helpers/store.rb +37 -0
- data/lib/stay/engine.rb +16 -0
- data/lib/stay/money.rb +77 -0
- data/lib/stay/version.rb +3 -0
- data/lib/stay.rb +16 -0
- data/lib/tasks/stay_tasks.rake +4 -0
- metadata +967 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class CountriesController < Stay::Admin::BaseController
|
4
|
+
before_action :set_country, only: [:edit, :update, :destroy, :show]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@countries = Stay::Country.page(params[:page])
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
@country = Stay::Country.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
@country = Stay::Country.new(country_params)
|
16
|
+
if @country.save
|
17
|
+
redirect_to admin_countries_path, notice: 'Country was successfully created.'
|
18
|
+
else
|
19
|
+
render :new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def edit
|
24
|
+
end
|
25
|
+
|
26
|
+
def show
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @country.update(country_params)
|
31
|
+
redirect_to admin_countries_path, notice: 'Country was successfully updated.'
|
32
|
+
else
|
33
|
+
render :edit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@country.destroy
|
39
|
+
redirect_to admin_countries_path, notice: 'Country was successfully deleted.'
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_country
|
45
|
+
@country = Stay::Country.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def country_params
|
49
|
+
params.require(:country).permit(:name, :iso_name, :iso, :iso3, :states_required)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class FeaturesController < Stay::Admin::BaseController
|
4
|
+
before_action :set_feature, only: [:show, :edit, :update, :destroy]
|
5
|
+
|
6
|
+
|
7
|
+
def index
|
8
|
+
@features = Stay::Feature.page(params[:page])
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
@feature = Stay::Feature.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
@feature = Stay::Feature.new(feature_params)
|
20
|
+
if @feature.save
|
21
|
+
redirect_to admin_features_path, notice: 'Feature was successfully created.'
|
22
|
+
else
|
23
|
+
render :new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def edit
|
28
|
+
end
|
29
|
+
|
30
|
+
def update
|
31
|
+
if @feature.update(feature_params)
|
32
|
+
redirect_to admin_features_path, notice: 'Feature was successfully updated.'
|
33
|
+
else
|
34
|
+
render :edit
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy
|
39
|
+
@feature.destroy
|
40
|
+
redirect_to admin_features_path, notice: 'Feature was successfully deleted.'
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def set_feature
|
46
|
+
@feature = Stay::Feature.find(params[:id])
|
47
|
+
end
|
48
|
+
|
49
|
+
def feature_params
|
50
|
+
params.require(:feature).permit(:name, :feature_type)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class HomeController < Stay::Admin::BaseController
|
4
|
+
#skip_before_action :authenticate_user!
|
5
|
+
|
6
|
+
def index
|
7
|
+
if user_signed_in?
|
8
|
+
redirect_to admin_users_path
|
9
|
+
else
|
10
|
+
redirect_to admin_login_path
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::HouseRulesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_house_rule, only: %i[ show edit update destroy ]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@house_rules = Stay::HouseRule.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@house_rule = Stay::HouseRule.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
@house_rule = Stay::HouseRule.new(house_rule_params)
|
21
|
+
if @house_rule.save
|
22
|
+
redirect_to admin_house_rule_path(@house_rule), notice: "House Rule was successfully created."
|
23
|
+
else
|
24
|
+
render :new, status: :unprocessable_entity
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
if @house_rule.update(house_rule_params)
|
30
|
+
redirect_to admin_house_rule_path(@house_rule), notice: "House Rule was successfully updated.", status: :see_other
|
31
|
+
else
|
32
|
+
render :edit, status: :unprocessable_entity
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
@house_rule.destroy!
|
38
|
+
redirect_to admin_house_rules_url, notice: "House Rule was successfully destroyed.", status: :see_other
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def set_house_rule
|
44
|
+
@house_rule = Stay::HouseRule.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def house_rule_params
|
48
|
+
params.require(:house_rule).permit(:name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class MessagesController < Stay::Admin::BaseController
|
4
|
+
before_action :set_message, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@messages = Stay::Message.all
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@message = Stay::Message.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
@message = Stay::Message.new(message_params)
|
19
|
+
if @message.save
|
20
|
+
redirect_to admin_message_path(@message), notice: 'Message was successfully created.'
|
21
|
+
else
|
22
|
+
render :new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @message.update(message_params)
|
31
|
+
redirect_to admin_message_path(@message), notice: 'Message was successfully updated.'
|
32
|
+
else
|
33
|
+
render :edit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@message.destroy
|
39
|
+
redirect_to admin_messages_path, notice: 'Message was successfully destroyed.'
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_message
|
45
|
+
@message = Stay::Message.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def message_params
|
49
|
+
params.require(:message).permit(:body, :sender_id, :receiver_id, :chat_id)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Stay::Admin::PasswordsController < Devise::PasswordsController
|
2
|
+
|
3
|
+
# GET /admin/password/new
|
4
|
+
# def new
|
5
|
+
# super
|
6
|
+
# end
|
7
|
+
|
8
|
+
# POST /admin/password
|
9
|
+
# def create
|
10
|
+
# super
|
11
|
+
# end
|
12
|
+
|
13
|
+
# GET /admin/password/edit?reset_password_token=abcdef
|
14
|
+
# def edit
|
15
|
+
# super
|
16
|
+
# end
|
17
|
+
|
18
|
+
# PUT /admin/password
|
19
|
+
# def update
|
20
|
+
# super
|
21
|
+
# end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def after_resetting_password_path_for(resource)
|
26
|
+
admin_login_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def after_sending_reset_password_instructions_path_for(resource_name)
|
30
|
+
admin_login_path
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class PaymentMethodsController < Stay::Admin::BaseController
|
4
|
+
before_action :set_payment_method, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@payment_methods = Stay::PaymentMethod.page(params[:page])
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@payment_method = Stay::PaymentMethod.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
@payment_method = Stay::PaymentMethod.new(payment_method_params)
|
19
|
+
if @payment_method.save
|
20
|
+
redirect_to admin_payment_method_path(@payment_method), notice: 'Payment method was successfully created.'
|
21
|
+
else
|
22
|
+
render :new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @payment_method.update(payment_method_params)
|
31
|
+
redirect_to admin_payment_method_path(@payment_method), notice: 'Payment method was successfully updated.'
|
32
|
+
else
|
33
|
+
render :edit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@payment_method.destroy
|
39
|
+
redirect_to admin_payment_methods_url, notice: 'Payment method was successfully destroyed.'
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_payment_method
|
45
|
+
@payment_method = Stay::PaymentMethod.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def payment_method_params
|
49
|
+
params.require(:payment_method).permit(:name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class PaymentsController < Stay::Admin::BaseController
|
4
|
+
before_action :set_payment, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
# GET /payments
|
7
|
+
def index
|
8
|
+
@payments = Stay::Payment.all
|
9
|
+
end
|
10
|
+
|
11
|
+
# GET /payments/1
|
12
|
+
def show
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /payments/new
|
16
|
+
def new
|
17
|
+
@payment = Stay::Payment.new
|
18
|
+
end
|
19
|
+
|
20
|
+
# GET /payments/1/edit
|
21
|
+
def edit
|
22
|
+
end
|
23
|
+
|
24
|
+
# POST /payments
|
25
|
+
def create
|
26
|
+
@payment = Stay::Payment.new(payment_params)
|
27
|
+
|
28
|
+
if @payment.save
|
29
|
+
redirect_to admin_payment_path(@payment), notice: 'Payment was successfully created.'
|
30
|
+
else
|
31
|
+
render :new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# PATCH/PUT /payments/1
|
36
|
+
def update
|
37
|
+
if @payment.update(payment_params)
|
38
|
+
redirect_to admin_payment_path(@payment), notice: 'Payment was successfully updated.'
|
39
|
+
else
|
40
|
+
render :edit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# DELETE /payments/1
|
45
|
+
def destroy
|
46
|
+
@payment.destroy
|
47
|
+
redirect_to admin_payments_url, notice: 'Payment was successfully destroyed.'
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
# Use callbacks to share common setup or constraints between actions.
|
53
|
+
def set_payment
|
54
|
+
@payment = Stay::Payment.find(params[:id])
|
55
|
+
end
|
56
|
+
|
57
|
+
# Only allow a list of trusted parameters through.
|
58
|
+
def payment_params
|
59
|
+
params.require(:payment).permit(:booking_id, :payment_method_id, :amount, :state)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class PropertiesController < Stay::Admin::BaseController
|
4
|
+
before_action :set_property, only: %i[show edit update destroy approve reject]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@q = current_store.properties.ransack(params[:q] || {})
|
8
|
+
per_page = (params[:per_page].presence || 30).to_i.clamp(1, 100)
|
9
|
+
@properties = @q.result.order(updated_at: :desc).page(params[:page]).per(per_page)
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
@property = current_store.properties.build
|
17
|
+
@step = "description"
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
@property = current_store.properties.build(property_params)
|
22
|
+
if @property.save
|
23
|
+
redirect_to edit_admin_property_path(@property, step: determine_next_step(@step)), notice: "Property was successfully created."
|
24
|
+
else
|
25
|
+
render :new
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def edit
|
30
|
+
@step = params[:step] || "description"
|
31
|
+
|
32
|
+
if valid_step?(@step)
|
33
|
+
render :edit, locals: { step: @step, property: @property }
|
34
|
+
else
|
35
|
+
redirect_to admin_properties_path, alert: "Invalid step."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def update
|
40
|
+
@step = params[:step] || "description"
|
41
|
+
if @property.update(property_params)
|
42
|
+
next_step = determine_next_step(@step)
|
43
|
+
if @step == "calendar"
|
44
|
+
redirect_to admin_properties_path, notice: "Property was successfully updated and all steps are completed."
|
45
|
+
else
|
46
|
+
redirect_to edit_admin_property_path(@property, step: next_step), notice: "Property step '#{@step}' was successfully updated. Continue to the next step."
|
47
|
+
end
|
48
|
+
else
|
49
|
+
render :edit, locals: { step: @step, property: @property }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def destroy
|
54
|
+
@property.destroy
|
55
|
+
redirect_to admin_properties_url, notice: "Property was successfully destroyed."
|
56
|
+
end
|
57
|
+
|
58
|
+
def approve
|
59
|
+
@property.approved
|
60
|
+
flash[:success] = "Your property has been approved!"
|
61
|
+
redirect_to edit_admin_property_path(@property)
|
62
|
+
end
|
63
|
+
|
64
|
+
def reject
|
65
|
+
@property.rejected
|
66
|
+
flash[:success] = "Your property has been rejected!"
|
67
|
+
redirect_to edit_admin_property_path(@property)
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def set_property
|
73
|
+
@property = current_store.properties.friendly.find(params[:id])
|
74
|
+
end
|
75
|
+
|
76
|
+
def property_params
|
77
|
+
params.require(:property).permit(:active, :title, :description, :availability_start, :availability_end, :address, :user_id, :property_type_id,
|
78
|
+
:price_per_month, :property_category_id, :guest_number, :country_id, :state_id, :bedroom_description,
|
79
|
+
:university_nearby, :about_neighbourhoods, :instant_booking, :minimum_months_of_booking, :security_deposit,
|
80
|
+
:extra_guest, :allow_extra_guest, :city, :total_bedrooms, :latitude, :longitude, :total_rooms, :country, :state,
|
81
|
+
:total_bathrooms, :property_size, :cover_image, :zipcode, amenity_ids: [], feature_ids: [], place_images: [],
|
82
|
+
property_taxes_attributes: [ :id, :tax_id, :value, :_destroy ],
|
83
|
+
property_amenities_attributes: [ :id, :property_id, :amenity_id, :_destroy ],
|
84
|
+
property_features_attributes: [ :id, :name, :feature_id, :_destroy ],
|
85
|
+
additional_rules_attributes: [ :id, :name, :property_id, :_destroy ],
|
86
|
+
rooms_attributes: [ :id, :property_id, :max_guests, :price_per_month, :room_type_id, :status, :is_master, :booking_start, :booking_end, :description, :size, :bed_type_id, :_destroy ],
|
87
|
+
property_house_rules_attributes: [ :id, :property_id, :house_rule_id, :value, :_destroy ]
|
88
|
+
)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def determine_next_step(current_step)
|
93
|
+
case current_step
|
94
|
+
when "description"
|
95
|
+
"price"
|
96
|
+
when "price"
|
97
|
+
"images"
|
98
|
+
when "images"
|
99
|
+
"details"
|
100
|
+
when "details"
|
101
|
+
"location"
|
102
|
+
when "location"
|
103
|
+
"amenities"
|
104
|
+
when "amenities"
|
105
|
+
"features"
|
106
|
+
when "features"
|
107
|
+
"calendar"
|
108
|
+
else
|
109
|
+
"description"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def valid_step?(step)
|
114
|
+
%w[description price images details location amenities features calendar].include?(step)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::PropertyCategoriesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_property_category, only: %i[show edit update destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@property_categories = Stay::PropertyCategory.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@property_category = Stay::PropertyCategory.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@property_category = Stay::PropertyCategory.new(property_category_params)
|
15
|
+
if @property_category.save
|
16
|
+
redirect_to admin_property_categories_path, notice: "Property Category was successfully created."
|
17
|
+
else
|
18
|
+
render :new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def show
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
if @property_category.update(property_category_params)
|
30
|
+
redirect_to admin_property_categories_path, notice: "Property Category was successfully updated."
|
31
|
+
else
|
32
|
+
render :edit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
@property_category.destroy
|
38
|
+
redirect_to admin_property_categories_path, notice: "Property Category was successfully deleted."
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def set_property_category
|
44
|
+
@property_category = Stay::PropertyCategory.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def property_category_params
|
48
|
+
params.require(:property_category).permit(:name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::PropertyTypesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_property_type, only: %i[show edit update destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@property_types = Stay::PropertyType.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@property_type = Stay::PropertyType.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@property_type = Stay::PropertyType.new(property_type_params)
|
15
|
+
if @property_type.save
|
16
|
+
redirect_to admin_property_types_path, notice: 'Property Type was successfully created.'
|
17
|
+
else
|
18
|
+
render :new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def show
|
23
|
+
end
|
24
|
+
|
25
|
+
def edit
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
if @property_type.update(property_type_params)
|
30
|
+
redirect_to admin_property_types_path, notice: 'Property Type was successfully updated.'
|
31
|
+
else
|
32
|
+
render :edit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
@property_type.destroy
|
38
|
+
redirect_to admin_property_types_path, notice: 'Property Type was successfully deleted.'
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def set_property_type
|
44
|
+
@property_type = Stay::PropertyType.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def property_type_params
|
48
|
+
params.require(:property_type).permit(:name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Stay::Admin::RegistrationsController < Devise::RegistrationsController
|
2
|
+
layout 'stay/admin'
|
3
|
+
|
4
|
+
protected
|
5
|
+
|
6
|
+
def after_sign_up_path_for(resource)
|
7
|
+
assign_admin_role(resource)
|
8
|
+
admin_users_path
|
9
|
+
end
|
10
|
+
|
11
|
+
def assign_admin_role(user)
|
12
|
+
admin_role = Stay::Role.find_by(name: 'admin')
|
13
|
+
if admin_role
|
14
|
+
user.stay_roles << admin_role unless user.stay_roles.include?(admin_role)
|
15
|
+
else
|
16
|
+
Rails.logger.error "Admin role not found. Please ensure the 'admin' role exist."
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class ReviewsController < Stay::Admin::BaseController
|
4
|
+
before_action :set_review, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
# GET /reviews
|
7
|
+
def index
|
8
|
+
@reviews = Stay::Review.page(params[:page])
|
9
|
+
end
|
10
|
+
|
11
|
+
# GET /reviews/1
|
12
|
+
def show
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET /reviews/new
|
16
|
+
def new
|
17
|
+
@review = Stay::Review.new
|
18
|
+
end
|
19
|
+
|
20
|
+
# GET /reviews/1/edit
|
21
|
+
def edit
|
22
|
+
end
|
23
|
+
|
24
|
+
# POST /reviews
|
25
|
+
def create
|
26
|
+
@review = Stay::Review.new(review_params)
|
27
|
+
|
28
|
+
if @review.save
|
29
|
+
redirect_to admin_review_path(@review), notice: 'Review was successfully created.'
|
30
|
+
else
|
31
|
+
render :new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# PATCH/PUT /reviews/1
|
36
|
+
def update
|
37
|
+
if @review.update(review_params)
|
38
|
+
redirect_to admin_review_path(@review), notice: 'Review was successfully updated.'
|
39
|
+
else
|
40
|
+
render :edit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# DELETE /reviews/1
|
45
|
+
def destroy
|
46
|
+
@review.destroy
|
47
|
+
redirect_to admin_reviews_url, notice: 'Review was successfully destroyed.'
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
# Use callbacks to share common setup or constraints between actions.
|
53
|
+
def set_review
|
54
|
+
@review = Stay::Review.find(params[:id])
|
55
|
+
end
|
56
|
+
|
57
|
+
# Only allow a list of trusted parameters through.
|
58
|
+
def review_params
|
59
|
+
params.require(:review).permit(:booking_id, :rating, :comment)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|