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,13 @@
|
|
1
|
+
class ChatChannel < ApplicationCable::Channel
|
2
|
+
def subscribed
|
3
|
+
user = params[:user]
|
4
|
+
stream_from "ChatChannel"
|
5
|
+
ActionCable.server.broadcast("chat_channel", { message: "Hello, world!", user: user })
|
6
|
+
end
|
7
|
+
|
8
|
+
def received(data)
|
9
|
+
end
|
10
|
+
|
11
|
+
def unsubscribed
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Stay
|
2
|
+
module BookingValidations
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
before_action :validate_booking_params, only: :create
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def validate_booking_params
|
12
|
+
property = Stay::Property.friendly.find_by(slug: booking_params[:property_id])
|
13
|
+
|
14
|
+
return render_error("Property not found.", :not_found) unless property
|
15
|
+
|
16
|
+
return render_error("Property Host not active.", :not_found) unless property.user
|
17
|
+
|
18
|
+
return render_error("You cannot create a booking for your own property.", :unprocessable_entity) if property.user == current_devise_api_user
|
19
|
+
|
20
|
+
return render_error("Hosts cannot create bookings for properties.", :unprocessable_entity) if current_devise_api_user.stay_host?
|
21
|
+
|
22
|
+
if booking_params[:check_in_date].nil? || booking_params[:check_out_date].nil?
|
23
|
+
return render_error("Please select both check-in and check-out dates.", :unprocessable_entity)
|
24
|
+
end
|
25
|
+
|
26
|
+
return render_error("Please select the guest count.", :unprocessable_entity) if booking_params[:number_of_guests].nil?
|
27
|
+
|
28
|
+
if property.shared_property && booking_params[:line_items_attributes].nil?
|
29
|
+
return render_error("Please select a room for the shared property.", :unprocessable_entity)
|
30
|
+
end
|
31
|
+
|
32
|
+
validate_shared_property_room(property) if property.shared_property
|
33
|
+
validate_guest_limit(property)
|
34
|
+
validate_property_availability(property)
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate_shared_property_room(property)
|
38
|
+
line_item = booking_params[:line_items_attributes][0]
|
39
|
+
return unless line_item
|
40
|
+
|
41
|
+
room_id = line_item[:room_id]
|
42
|
+
check_in_date = booking_params[:check_in_date].to_date
|
43
|
+
check_out_date = booking_params[:check_out_date].to_date
|
44
|
+
room = Stay::Room.find_by(id: room_id)
|
45
|
+
|
46
|
+
if room.nil?
|
47
|
+
render_error("Room not found.", :not_found)
|
48
|
+
elsif room.property_id != property.id
|
49
|
+
render_error("Room not found in the property.", :not_found)
|
50
|
+
elsif room.status == "inactive"
|
51
|
+
render_error("Room is inactive.", :unprocessable_entity)
|
52
|
+
elsif !property.allow_extra_guest && booking_params[:number_of_guests] > room.max_guests
|
53
|
+
render_error("No extra guests allowed. Maximum guest limit for this room is #{room.max_guests || 1}.", :unprocessable_entity)
|
54
|
+
elsif check_in_date < room.booking_start.to_date
|
55
|
+
render_error("Room not available on your check-in date.", :unprocessable_entity)
|
56
|
+
elsif check_out_date > room.booking_end.to_date
|
57
|
+
render_error("Room not available on your check-out date.", :unprocessable_entity)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_guest_limit(property)
|
62
|
+
if !property.shared_property && !property.allow_extra_guest && booking_params[:number_of_guests] > property.guest_number
|
63
|
+
render_error("No extra guests allowed. Maximum guest limit for this property is #{property.guest_number || 1}.", :unprocessable_entity)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def validate_property_availability(property)
|
68
|
+
check_in_date = booking_params[:check_in_date].to_date
|
69
|
+
check_out_date = booking_params[:check_out_date].to_date
|
70
|
+
|
71
|
+
if property.unlimited_availability
|
72
|
+
if check_in_date < property.availability_start.to_date
|
73
|
+
render_error("Property not available on your check-in date.", :unprocessable_entity)
|
74
|
+
elsif check_in_date > check_out_date
|
75
|
+
render_error("Check-out date cannot be earlier than check-in date.", :unprocessable_entity)
|
76
|
+
end
|
77
|
+
else
|
78
|
+
if check_in_date < property.availability_start.to_date
|
79
|
+
render_error("Property not available on your check-in date.", :unprocessable_entity)
|
80
|
+
elsif check_out_date > property.availability_end.to_date
|
81
|
+
render_error("Property not available on your check-out date.", :unprocessable_entity)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Stay
|
2
|
+
module StripeConcern
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
def user
|
5
|
+
current_devise_api_user || current_user
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_payment_method
|
9
|
+
Stripe::PaymentMethod.create({
|
10
|
+
type: params[:payment_method_type],
|
11
|
+
card: {
|
12
|
+
number: params[:number],
|
13
|
+
exp_month: params[:exp_month],
|
14
|
+
exp_year: params[:exp_year],
|
15
|
+
cvc: params[:cvc],
|
16
|
+
},
|
17
|
+
})
|
18
|
+
end
|
19
|
+
def create_customer
|
20
|
+
Stripe::Customer.create({
|
21
|
+
email: user.email,
|
22
|
+
name: "#{user.first_name} #{user.last_name}",
|
23
|
+
address: {
|
24
|
+
city: user.addresses.last&.city,
|
25
|
+
state: user.addresses.last&.state.name,
|
26
|
+
country: user.addresses.last&.country.name,
|
27
|
+
line1: user.addresses.last&.address1,
|
28
|
+
line2: user.addresses.last&.address2,
|
29
|
+
postal_code: user.addresses.last&.zipcode
|
30
|
+
},
|
31
|
+
metadata: { order_id: user.id }
|
32
|
+
})
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_or_retrieve_customer
|
36
|
+
customers = Stripe::Customer.list(email: user.email).data
|
37
|
+
if customers.empty?
|
38
|
+
create_customer
|
39
|
+
else
|
40
|
+
customers.first
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_payment_intent
|
45
|
+
Stripe::PaymentIntent.create(
|
46
|
+
amount: @booking.total.to_i* 100,
|
47
|
+
description: @booking.user.email,
|
48
|
+
currency: params[:currency] || 'INR',
|
49
|
+
payment_method: params[:payment_method_id],
|
50
|
+
automatic_payment_methods: { enabled: true },
|
51
|
+
receipt_email: user.email,
|
52
|
+
customer: @customer,
|
53
|
+
confirm: params[:confirm],
|
54
|
+
return_url: params[:redirect_url]
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_payment_intent
|
59
|
+
Stripe::PaymentIntent.retrieve(@booking.payment_intent_id)
|
60
|
+
end
|
61
|
+
|
62
|
+
def confirm_payment_intent
|
63
|
+
Stripe::PaymentIntent.confirm(
|
64
|
+
params[:payment_intent_id],
|
65
|
+
{
|
66
|
+
payment_method: params[:payment_method_id],
|
67
|
+
return_url: params[redirect_url],
|
68
|
+
})
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class AddressesController < Stay::Admin::BaseController
|
4
|
+
before_action :set_address, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
# GET /Stay/admin/addresses
|
7
|
+
# GET /Stay/admin/addresses.json
|
8
|
+
def index
|
9
|
+
@addresses = Stay::Address.page(params[:page])
|
10
|
+
end
|
11
|
+
|
12
|
+
# GET /Stay/admin/addresses/1
|
13
|
+
# GET /Stay/admin/addresses/1.json
|
14
|
+
def show
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /Stay/admin/addresses/new
|
18
|
+
def new
|
19
|
+
@address = Stay::Address.new
|
20
|
+
end
|
21
|
+
|
22
|
+
# GET /Stay/admin/addresses/1/edit
|
23
|
+
def edit
|
24
|
+
end
|
25
|
+
|
26
|
+
# POST /Stay/admin/addresses
|
27
|
+
# POST /Stay/admin/addresses.json
|
28
|
+
def create
|
29
|
+
@address = Stay::Address.new(address_params)
|
30
|
+
|
31
|
+
respond_to do |format|
|
32
|
+
if @address.save
|
33
|
+
format.html { redirect_to [:admin, @address], notice: 'Address was successfully created.' }
|
34
|
+
format.json { render :show, status: :created, location: @address }
|
35
|
+
else
|
36
|
+
format.html { render :new }
|
37
|
+
format.json { render json: @address.errors, status: :unprocessable_entity }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# PATCH/PUT /Stay/admin/addresses/1
|
43
|
+
# PATCH/PUT /Stay/admin/addresses/1.json
|
44
|
+
def update
|
45
|
+
respond_to do |format|
|
46
|
+
if @address.update(address_params)
|
47
|
+
format.html { redirect_to [:admin, @address], notice: 'Address was successfully updated.' }
|
48
|
+
format.json { render :show, status: :ok, location: @address }
|
49
|
+
else
|
50
|
+
format.html { render :edit }
|
51
|
+
format.json { render json: @address.errors, status: :unprocessable_entity }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# DELETE /Stay/admin/addresses/1
|
57
|
+
# DELETE /Stay/admin/addresses/1.json
|
58
|
+
def destroy
|
59
|
+
@address.destroy
|
60
|
+
respond_to do |format|
|
61
|
+
format.html { redirect_to admin_addresses_url, notice: 'Address was successfully destroyed.' }
|
62
|
+
format.json { head :no_content }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def set_address
|
68
|
+
@address = Stay::Address.find(params[:id])
|
69
|
+
end
|
70
|
+
|
71
|
+
def address_params
|
72
|
+
params.require(:address).permit(:address1, :address2, :city, :state, :country, :zipcode)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::AmenitiesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_amenity, only: %i[ show edit update destroy ]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@amenities = Stay::Amenity.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@amenity = Stay::Amenity.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
@amenity = Stay::Amenity.new(amenity_params)
|
21
|
+
|
22
|
+
if @amenity.save
|
23
|
+
redirect_to admin_amenity_path(@amenity), notice: "Amenity was successfully created."
|
24
|
+
else
|
25
|
+
render :new, status: :unprocessable_entity
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @amenity.update(amenity_params)
|
31
|
+
redirect_to admin_amenity_path(@amenity), notice: "Amenity was successfully updated.", status: :see_other
|
32
|
+
else
|
33
|
+
render :edit, status: :unprocessable_entity
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@amenity.destroy!
|
39
|
+
redirect_to admin_amenities_url, notice: "Amenity was successfully destroyed.", status: :see_other
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_amenity
|
45
|
+
@amenity = Stay::Amenity.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def amenity_params
|
49
|
+
params.require(:amenity).permit(:name, :amenity_type)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::AmenityCategoriesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_amenity_category, only: %i[ show edit update destroy ]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@amenity_categories = Stay::AmenityCategory.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@amenity_category = Stay::AmenityCategory.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
@amenity_category = Stay::AmenityCategory.new(amenity_category_params)
|
21
|
+
|
22
|
+
if @amenity_category.save
|
23
|
+
redirect_to admin_amenity_category_path(@amenity_category), notice: "Amenity was successfully created."
|
24
|
+
else
|
25
|
+
render :new, status: :unprocessable_entity
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @amenity_category.update(amenity_category_params)
|
31
|
+
redirect_to admin_amenity_category_path(@amenity_category), notice: "Amenity was successfully updated.", status: :see_other
|
32
|
+
else
|
33
|
+
render :edit, status: :unprocessable_entity
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@amenity_category.destroy!
|
39
|
+
redirect_to admin_amenity_categories_url, notice: "Amenity was successfully destroyed.", status: :see_other
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_amenity_category
|
45
|
+
@amenity_category = Stay::AmenityCategory.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def amenity_category_params
|
49
|
+
params.require(:amenity_category).permit(:name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class BaseController < ApplicationController
|
4
|
+
include Stay::ControllerHelpers::Currency
|
5
|
+
include Stay::ControllerHelpers::Store
|
6
|
+
layout "stay/admin"
|
7
|
+
before_action :authenticate_user!
|
8
|
+
before_action :ensure_admin
|
9
|
+
before_action :load_stores
|
10
|
+
|
11
|
+
def stores_scope
|
12
|
+
Stay::Store.includes(:translations)
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_stores
|
16
|
+
@stores = stores_scope.order(default: :desc)
|
17
|
+
end
|
18
|
+
|
19
|
+
def set_current_store
|
20
|
+
return if @object.nil?
|
21
|
+
|
22
|
+
ensure_current_store(@object)
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_currency
|
26
|
+
return if @object.nil?
|
27
|
+
|
28
|
+
@object.currency = current_currency if model_class.method_defined?(:currency=)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def ensure_admin
|
34
|
+
redirect_to root_path, alert: "Access denied!" unless current_user.stay_admin?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::BedTypesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_bed_type, only: %i[show edit update destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@bed_types = Stay::BedType.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@bed_type = Stay::BedType.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@bed_type = Stay::BedType.new(bed_type_params)
|
15
|
+
if @bed_type.save
|
16
|
+
redirect_to admin_bed_types_path, notice: 'Bed 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 @bed_type.update(bed_type_params)
|
30
|
+
redirect_to admin_bed_types_path, notice: 'Bed type was successfully updated.'
|
31
|
+
else
|
32
|
+
render :edit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
@bed_type.destroy
|
38
|
+
redirect_to admin_bed_types_path, notice: 'Bed type was successfully deleted.'
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def set_bed_type
|
44
|
+
@bed_type = Stay::BedType.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def bed_type_params
|
48
|
+
params.require(:bed_type).permit(:name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class BookingsController < Stay::Admin::BaseController
|
4
|
+
before_action :set_booking, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@q = current_store.bookings.ransack(params[:q])
|
8
|
+
@bookings = @q.result.order(created_at: :desc).page(params[:page])
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
@booking = current_store.bookings.build
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
@booking = current_store.bookings.build(booking_params)
|
20
|
+
if @booking.save
|
21
|
+
redirect_to admin_booking_path(@booking), notice: 'Booking was successfully created.'
|
22
|
+
else
|
23
|
+
render :new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def edit
|
28
|
+
end
|
29
|
+
|
30
|
+
def update
|
31
|
+
if @booking.update(booking_params)
|
32
|
+
redirect_to admin_booking_path(@booking), notice: 'Booking was successfully updated.'
|
33
|
+
else
|
34
|
+
render :edit
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy
|
39
|
+
@booking.destroy
|
40
|
+
redirect_to admin_bookings_url, notice: 'Booking was successfully destroyed.'
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def set_booking
|
46
|
+
@booking = current_store.bookings.find_by(id: params[:id])
|
47
|
+
end
|
48
|
+
|
49
|
+
def booking_params
|
50
|
+
params.require(:booking).permit(:user_id, :check_in_date, :check_out_date, :number_of_guests, :status)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::CancellationPoliciesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_policy_type, only: %i[show edit update destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@policies = Stay::CancellationPolicy.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@policy = Stay::CancellationPolicy.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@policy = Stay::CancellationPolicy.new(policy_params)
|
15
|
+
if @policy.save
|
16
|
+
redirect_to admin_cancellation_policies_path, notice: "Policy 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 @policy.update(policy_params)
|
30
|
+
redirect_to admin_cancellation_policies_path, notice: "Policy was successfully updated."
|
31
|
+
else
|
32
|
+
render :edit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
@policy.destroy
|
38
|
+
redirect_to admin_cancellation_policies_path, notice: "Policy was successfully deleted."
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def set_policy_type
|
44
|
+
@policy = Stay::CancellationPolicy.find(params[:id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def policy_params
|
48
|
+
params.require(:cancellation_policy).permit(:name, :description)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Stay
|
2
|
+
module Admin
|
3
|
+
class ChatsController < Stay::Admin::BaseController
|
4
|
+
before_action :set_chat, only: %i[show edit update destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@chats = Stay::Chat.all
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
end
|
12
|
+
|
13
|
+
def new
|
14
|
+
@chat = Stay::Chat.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
@chat = Stay::Chat.new(chat_params)
|
19
|
+
if @chat.save
|
20
|
+
redirect_to admin_chat_path(@chat), notice: 'Chat was successfully created.'
|
21
|
+
else
|
22
|
+
render :new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
end
|
28
|
+
|
29
|
+
def update
|
30
|
+
if @chat.update(chat_params)
|
31
|
+
redirect_to admin_chat_path(@chat), notice: 'Chat was successfully updated.'
|
32
|
+
else
|
33
|
+
render :edit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
@chat.destroy
|
39
|
+
redirect_to admin_chats_path, notice: 'Chat was successfully destroyed.'
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def set_chat
|
45
|
+
@chat = Stay::Chat.find(params[:id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def chat_params
|
49
|
+
params.require(:chat).permit(:sender_id, :receiver_id, :property_id)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Stay
|
2
|
+
class Admin::CitiesController < Stay::Admin::BaseController
|
3
|
+
before_action :set_state
|
4
|
+
before_action :set_city, only: [:edit, :update, :destroy]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@cities = @state.cities
|
8
|
+
respond_to do |format|
|
9
|
+
format.html
|
10
|
+
format.json { render json: @cities }
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def new
|
16
|
+
@city = @state.cities.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
@city = @state.cities.new(city_params)
|
21
|
+
if @city.save
|
22
|
+
redirect_to admin_state_cities_path(@state), notice: 'City was successfully created.'
|
23
|
+
else
|
24
|
+
flash.now[:alert] = @city.errors.full_messages.join(', ')
|
25
|
+
render :new
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def edit
|
30
|
+
end
|
31
|
+
|
32
|
+
def update
|
33
|
+
if @city.update(city_params)
|
34
|
+
redirect_to admin_state_cities_path(@state), notice: 'City was successfully updated.'
|
35
|
+
else
|
36
|
+
flash.now[:alert] = @city.errors.full_messages.join(', ')
|
37
|
+
render :edit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def destroy
|
42
|
+
if @city.destroy
|
43
|
+
flash[:alert] = "City was successfully deleted."
|
44
|
+
redirect_to admin_state_cities_path(@state)
|
45
|
+
else
|
46
|
+
flash[:alert] = @city.errors.full_messages.join(', ')
|
47
|
+
redirect_to admin_state_cities_path(@state)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
|
54
|
+
def set_state
|
55
|
+
@state = Stay::State.find(params[:state_id])
|
56
|
+
end
|
57
|
+
|
58
|
+
def set_city
|
59
|
+
@city = @state.cities.find(params[:id])
|
60
|
+
end
|
61
|
+
|
62
|
+
def city_params
|
63
|
+
params.require(:city).permit(:name)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Stay::Admin::ConfirmationsController < Devise::ConfirmationsController
|
4
|
+
# GET /resource/confirmation/new
|
5
|
+
# def new
|
6
|
+
# super
|
7
|
+
# end
|
8
|
+
|
9
|
+
# POST /resource/confirmation
|
10
|
+
# def create
|
11
|
+
# super
|
12
|
+
# end
|
13
|
+
|
14
|
+
# GET /resource/confirmation?confirmation_token=abcdef
|
15
|
+
# def show
|
16
|
+
# super
|
17
|
+
# end
|
18
|
+
|
19
|
+
# protected
|
20
|
+
|
21
|
+
# The path used after resending confirmation instructions.
|
22
|
+
# def after_resending_confirmation_instructions_path_for(resource_name)
|
23
|
+
# super(resource_name)
|
24
|
+
# end
|
25
|
+
|
26
|
+
# The path used after confirmation.
|
27
|
+
# def after_confirmation_path_for(resource_name, resource)
|
28
|
+
# super(resource_name, resource)
|
29
|
+
# end
|
30
|
+
end
|