PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress / 5.2.9
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress v5.2.9
5.6.8 5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / helpers / order_intent_helper.php
latepoint / lib / helpers Last commit date
activities_helper.php 1 year ago agent_helper.php 1 year ago auth_helper.php 9 months ago blocks_helper.php 1 year ago booking_helper.php 1 year ago bricks_helper.php 1 year ago bundles_helper.php 1 year ago calendar_helper.php 9 months ago carts_helper.php 1 year ago connector_helper.php 9 months ago csv_helper.php 9 months ago customer_helper.php 9 months ago customer_import_helper.php 4 months ago database_helper.php 9 months ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 9 months ago encrypt_helper.php 1 year ago events_helper.php 9 months ago form_helper.php 9 months ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 9 months ago license_helper.php 1 year ago location_helper.php 1 year ago marketing_systems_helper.php 1 year ago meeting_systems_helper.php 1 year ago menu_helper.php 9 months ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 9 months ago order_intent_helper.php 9 months ago orders_helper.php 1 year ago otp_helper.php 9 months ago pages_helper.php 1 year ago params_helper.php 1 year ago payments_helper.php 1 year ago price_breakdown_helper.php 1 year ago process_jobs_helper.php 1 year ago processes_helper.php 1 year ago replacer_helper.php 1 year ago resource_helper.php 1 year ago roles_helper.php 7 months ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 4 months ago short_links_systems_helper.php 9 months ago shortcodes_helper.php 9 months ago sms_helper.php 1 year ago steps_helper.php 5 months ago stripe_connect_helper.php 9 months ago styles_helper.php 9 months ago support_topics_helper.php 1 year ago time_helper.php 9 months ago timeline_helper.php 9 months ago transaction_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 7 months ago version_specific_updates_helper.php 9 months ago whatsapp_helper.php 1 year ago work_periods_helper.php 5 months ago wp_datetime.php 1 year ago wp_user_helper.php 1 year ago
order_intent_helper.php
192 lines
1 <?php
2 /*
3 * Copyright (c) 2024 LatePoint LLC. All rights reserved.
4 */
5
6 class OsOrderIntentHelper {
7
8 public static function generate_continue_intent_url( $order_intent_key ) {
9 return OsRouterHelper::build_admin_post_link( [
10 'orders',
11 'continue_order_intent'
12 ], [ 'order_intent_key' => $order_intent_key ] );
13 }
14
15 public static function get_order_id_from_intent_key( $intent_key ) {
16 if ( empty( $intent_key ) ) {
17 return false;
18 }
19 $order_intent = new OsOrderIntentModel();
20 $order_intent = $order_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
21
22 if ( $order_intent && $order_intent->order_id ) {
23 return $order_intent->order_id;
24 } else {
25 return null;
26 }
27 }
28
29 public static function set_order_intent_data_from_cart( OsOrderIntentModel $order_intent, OsCartModel $cart ): OsOrderIntentModel {
30
31 $cart_items = $cart->get_items();
32
33 $cart_items_data = [];
34 foreach ( $cart_items as $cart_item ) {
35 $cart_item_data = json_decode( $cart_item->item_data, true );
36 // cart item could have been added while user was not logged in, make sure to update customer id when creating order intent
37 $cart_item_data['customer_id'] = $order_intent->customer_id;
38
39
40 $cart_items_data[] = [
41 'variant' => $cart_item->variant,
42 'item_data' => $cart_item_data,
43 'subtotal' => $cart_item->get_subtotal(),
44 'total' => $cart_item->get_total(),
45 'coupon_discount' => $cart_item->get_coupon_discount(),
46 'coupon_code' => $cart_item->get_coupon_code(),
47 'tax_total' => $cart_item->get_tax_total(),
48 ];
49 }
50
51 $order_intent->cart_items_data = wp_json_encode( $cart_items_data );
52 $order_intent->charge_amount = $cart->amount_to_charge();
53 $order_intent->specs_charge_amount = $cart->specs_calculate_amount_to_charge();
54 $order_intent->total = $cart->get_total();
55 $order_intent->subtotal = $cart->get_subtotal();
56 $order_intent->tax_total = $cart->get_tax_total();
57 $order_intent->coupon_code = $cart->get_coupon_code();
58 if ( ! empty( $cart->get_coupon_code() ) ) {
59 $order_intent->coupon_discount = $cart->get_coupon_discount();
60 }
61
62
63 // hide "payments & credits" row if we are not accepting payments
64 $rows_to_hide = ( ! OsPaymentsHelper::is_accepting_payments() ) ? [ 'payments' ] : [];
65 $order_intent->price_breakdown = wp_json_encode( $cart->generate_price_breakdown_rows( $rows_to_hide ) );
66 $order_intent->payment_data = wp_json_encode( [
67 'processor' => $cart->payment_processor,
68 'time' => $cart->payment_time,
69 'method' => $cart->payment_method,
70 'portion' => $cart->payment_portion,
71 'token' => $cart->payment_token
72 ] );
73
74 /**
75 * Sets order intent from a cart
76 *
77 * @param {OsOrderIntentModel} $order_intent Order intent
78 * @param {OsCartModel} $cart Cart that order intent is using
79 * @returns {OsOrderIntentModel} The filtered order intent object
80 *
81 * @since 5.0.0
82 * @hook set_order_intent_data_from_cart
83 *
84 */
85 return apply_filters( 'set_order_intent_data_from_cart', $order_intent, $cart );
86 }
87
88 /**
89 * @param OsCartItemModel $cart
90 * @param array $restrictions_data
91 * @param array $presets_data
92 * @param string $booking_form_page_url
93 *
94 * @return OsOrderIntentModel
95 */
96 public static function create_or_update_order_intent( OsCartModel $cart, array $restrictions_data = [], array $presets_data = [], string $booking_form_page_url = '', $customer_id = false ): OsOrderIntentModel {
97 if ( empty( $booking_form_page_url ) ) {
98 $booking_form_page_url = OsUtilHelper::get_referrer();
99 }
100 $order_intent = new OsOrderIntentModel();
101 if ( ! empty( $cart->order_intent_id ) ) {
102 $order_intent->load_by_id( $cart->order_intent_id );
103 }
104 $is_new = $order_intent->is_new_record();
105
106 if ( ! $is_new ) {
107 if($order_intent->is_converted()){
108 return $order_intent;
109 }
110 $old_order_intent = clone $order_intent;
111 }
112
113 $order_intent->restrictions_data = wp_json_encode( $restrictions_data );
114 $order_intent->presets_data = wp_json_encode( $presets_data );
115 // override only if not empty
116 if(!empty($booking_form_page_url)) $order_intent->booking_form_page_url = urldecode( $booking_form_page_url );
117
118 if(empty($customer_id)){
119 $order_intent->customer_id = OsAuthHelper::get_logged_in_customer_id();
120 }else{
121 $order_intent->customer_id = $customer_id;
122 }
123
124 $order_intent = self::set_order_intent_data_from_cart( $order_intent, $cart );
125
126
127 /**
128 * Filters order intent right before it's about to be saved when created or updated from cart
129 *
130 * @param {OsOrderIntentModel} $order_intent Order intent to be filtered
131 * @returns {OsOrderIntentModel} The filtered order intent
132 *
133 * @since 5.0.0
134 * @hook latepoint_before_order_intent_save_from_cart
135 *
136 */
137 $order_intent = apply_filters( 'latepoint_before_order_intent_save_from_cart', $order_intent );
138 if ( $order_intent->save() ) {
139 if ( $is_new ) {
140 $cart->update_attributes( [ 'order_intent_id' => $order_intent->id ] );
141 /**
142 * Order intent is created
143 *
144 * @param {OsOrderIntentModel} $order_intent Instance of order intent model that was created
145 *
146 * @since 5.0.0
147 * @hook latepoint_order_intent_created
148 *
149 */
150 do_action( 'latepoint_order_intent_created', $order_intent );
151 } else {
152 /**
153 * Order intent is updated
154 *
155 * @param {OsOrderIntentModel} $order_intent Updated instance of order intent model
156 * @param {OsOrderIntentModel} $old_order_intent Instance of order intent model before it was updated
157 *
158 * @since 5.0.0
159 * @hook latepoint_order_intent_updated
160 *
161 */
162 do_action( 'latepoint_order_intent_updated', $order_intent, $old_order_intent );
163 }
164 } else {
165 $action_type = $is_new ? 'creating' : 'updating';
166 OsDebugHelper::log( 'Error ' . $action_type . ' order intent', 'error_saving_order_intent', $order_intent->get_error_messages() );
167 }
168
169 return $order_intent;
170 }
171
172 public static function get_order_intent_by_intent_key( string $intent_key ) : OsOrderIntentModel {
173 $order_intent = new OsOrderIntentModel();
174 if(empty($intent_key)) return $order_intent;
175 $order_intent = $order_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
176 if(!empty($order_intent)){
177 return $order_intent;
178 }else{
179 return new OsOrderIntentModel();
180 }
181 }
182
183 public static function is_converted( $order_intent_id ) {
184 $order_intent = new OsOrderIntentModel( $order_intent_id );
185 if ( ! empty( $order_intent->order_id ) ) {
186 return $order_intent->order_id;
187 } else {
188 return false;
189 }
190 }
191
192 }