FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
latepoint
/
lib
/
models
Edit File: bundle_model.php
<?php /* * Copyright (c) 2023 LatePoint LLC. All rights reserved. */ class OsBundleModel extends OsModel { var $services; var $id, $name, $short_description, $charge_amount, $deposit_amount, $status, $visibility, $order_number, $updated_at, $created_at; function __construct( $id = false ) { parent::__construct(); $this->table_name = LATEPOINT_TABLE_BUNDLES; $this->join_table_name_bundles_services = LATEPOINT_TABLE_JOIN_BUNDLES_SERVICES; if ( $id ) { $this->load_by_id( $id ); } } public function generate_data_vars(): array { $vars = [ 'id' => $this->id, 'name' => $this->name, ]; return $vars; } function has_service( $service_id ): bool { $services = $this->get_services(); foreach ( $services as $service ) { if ( $service->id == $service_id ) { return true; } } return false; } function quantity_for_service( $service_id ): int { $services = $this->get_services(); foreach ( $services as $service ) { if ( $service->id == $service_id ) { return ( ! empty( $service->join_attributes['quantity'] ) ? $service->join_attributes['quantity'] : 0 ); } } return 0; } function duration_for_service( $service_id ): int { $services = $this->get_services(); foreach ( $services as $service ) { if ( $service->id == $service_id ) { return ( ! empty( $service->join_attributes['duration'] ) ? $service->join_attributes['duration'] : $service->duration ); } } return 0; } function total_attendees_for_service( $service_id ): int { $services = $this->get_services(); foreach ( $services as $service ) { if ( $service->id == $service_id ) { return ( ! empty( $service->join_attributes['total_attendees'] ) ? $service->join_attributes['total_attendees'] : 1 ); } } return 0; } public function generate_params_for_booking_form() { $params = [ 'bundle_id' => $this->id, ]; /** * Returns an array of params generated from OsBundleModel to be used in a booking form * * @since 5.0.0 * @hook latepoint_generated_bundle_params_for_booking_form * * @param {array} $params Array of booking params * @param {OsBundleModel} $bundle Instance of <code>OsBundleModel</code> that params are being generated for * * @returns {array} Filtered array of booking params */ return apply_filters( 'latepoint_generated_bundle_params_for_booking_form', $params, $this ); } /** * @return mixed|void * * Returns full amount to charge in database format 1999.0000 * */ public function full_amount_to_charge() { return OsBundlesHelper::calculate_full_amount_for_bundle( $this ); } /** * @return mixed|void * * Returns deposit amount to charge in database format 1999.0000 * */ public function deposit_amount_to_charge() { return OsBundlesHelper::calculate_deposit_amount_for_bundle( $this ); } public function save_services( $services ) { if ( ! $services ) { return true; } $connections_to_save = []; $connections_to_remove = []; foreach ( $services as $service_key => $service ) { $service_id = str_replace( 'service_', '', $service_key ); $connection = [ 'bundle_id' => $this->id, 'service_id' => $service_id, 'quantity' => $service['quantity'], 'total_attendees' => $service['total_attendees'], 'duration' => $service['duration'], ]; if ( $service['connected'] == 'yes' ) { $connections_to_save[] = $connection; } else { $connections_to_remove[] = $connection; } } if ( ! empty( $connections_to_save ) ) { foreach ( $connections_to_save as $connection_to_save ) { $join_bundle_service = new OsJoinBundlesServicesModel(); $existing = $join_bundle_service->where( [ 'bundle_id' => $connection_to_save['bundle_id'], 'service_id' => $connection_to_save['service_id'], ] )->set_limit( 1 )->get_results_as_models(); if ( $existing ) { $existing->quantity = $connection_to_save['quantity']; $existing->total_attendees = $connection_to_save['total_attendees']; $existing->duration = $connection_to_save['duration']; $existing->save(); } else { $join_bundle_service->set_data( $connection_to_save ); $join_bundle_service->save(); } } } if ( ! empty( $connections_to_remove ) ) { foreach ( $connections_to_remove as $connection_to_remove ) { $join_bundle_service = new OsJoinBundlesServicesModel(); $join_bundle_service->delete_where( [ 'bundle_id' => $connection_to_remove['bundle_id'], 'service_id' => $connection_to_remove['service_id'], ] ); } } return true; } public function get_formatted_charge_amount() { if ( $this->charge_amount > 0 ) { return OsMoneyHelper::format_price( $this->charge_amount ); } else { return 0; } } public function get_service_and_quantity_descriptions(): array { $bundle_services = $this->get_services(); $bundle_services_descriptions = []; foreach ( $bundle_services as $service ) { $qty = $service->join_attributes['quantity']; $qty_html = $qty > 1 ? ' [' . $qty . ']' : ''; $bundle_services_descriptions[] = $service->name . $qty_html; } return $bundle_services_descriptions; } public function get_services( $order_item_id = false ): array { if ( ! isset( $this->services ) ) { $bundle_services = new OsJoinBundlesServicesModel(); $bundle_services = $bundle_services->get_services_for_bundle_id( $this->id ); $this->services = []; if ( $bundle_services ) { foreach ( $bundle_services as $bundle_service ) { $service = new OsServiceModel( $bundle_service->service_id ); $service->join_attributes['quantity'] = $bundle_service->quantity; $service->join_attributes['total_attendees'] = $bundle_service->total_attendees; $service->join_attributes['duration'] = $bundle_service->duration; if ( $order_item_id ) { $bookings = new OsBookingModel(); $service->join_attributes['total_scheduled_bookings'] = $bookings->where( [ 'order_item_id' => $order_item_id, 'service_id' => $service->id, ] )->should_not_be_cancelled()->count(); } $this->services[] = $service; } } } return $this->services; } public function is_hidden() { return ( $this->visibility == LATEPOINT_BUNDLE_VISIBILITY_HIDDEN ); } public function should_be_active() { return $this->where( [ 'status' => LATEPOINT_BUNDLE_STATUS_ACTIVE ] ); } public function should_not_be_hidden() { return $this->where( [ 'visibility !=' => LATEPOINT_BUNDLE_VISIBILITY_HIDDEN ] ); } public function is_active() { return ( $this->status == LATEPOINT_BUNDLE_STATUS_ACTIVE ); } public function delete_meta_by_key( $meta_key ) { if ( $this->is_new_record() ) { return false; } $meta = new OsBundleMetaModel(); return $meta->delete_by_key( $meta_key, $this->id ); } public function get_meta_by_key( $meta_key, $default = false ) { if ( $this->is_new_record() ) { return $default; } $meta = new OsBundleMetaModel(); return $meta->get_by_key( $meta_key, $this->id, $default ); } public function save_meta_by_key( $meta_key, $meta_value ) { if ( $this->is_new_record() ) { return false; } $meta = new OsBundleMetaModel(); return $meta->save_by_key( $meta_key, $meta_value, $this->id ); } public function delete( $id = false ) { if ( ! $id && isset( $this->id ) ) { $id = $this->id; } if ( $id && $this->db->delete( $this->table_name, array( 'id' => $id ), array( '%d' ) ) ) { $this->db->delete( LATEPOINT_TABLE_BUNDLE_META, array( 'object_id' => $id ), array( '%d' ) ); do_action( 'latepoint_bundle_deleted', $id ); return true; } return false; } protected function properties_to_validate() { $validations = array( 'name' => array( 'presence' ), ); return $validations; } protected function params_to_sanitize() { return [ 'charge_amount' => 'money', 'deposit_amount' => 'money', ]; } protected function allowed_params( $role = 'admin' ) { $allowed_params = array( 'id', 'name', 'short_description', 'charge_amount', 'deposit_amount', 'status', 'visibility', 'order_number', 'updated_at', 'created_at', ); return $allowed_params; } protected function params_to_save( $role = 'admin' ) { $params_to_save = array( 'id', 'name', 'short_description', 'charge_amount', 'deposit_amount', 'status', 'visibility', 'order_number', 'updated_at', 'created_at', ); return $params_to_save; } }
Save
Back