_balance_and_payments.php
1 year ago
_full_summary.php
1 year ago
_price_breakdown.php
1 year ago
_table_body.php
3 months ago
_transaction_box.php
1 year ago
index.php
1 year ago
quick_edit.php
9 months ago
reload_balance_and_payments.php
1 year ago
reload_price_breakdown.php
1 year ago
view_order_log.php
1 year ago
quick_edit.php
330 lines
| 1 | <?php |
| 2 | /** |
| 3 | * @var $order OsOrderModel |
| 4 | * @var $booking OsBookingModel |
| 5 | * @var $bundles OsBundleModel[] |
| 6 | * @var $services OsServiceModel[] |
| 7 | * @var $transactions OsTransactionModel[] |
| 8 | * @var $customers OsCustomerModel[] |
| 9 | * @var $order_bookings OsBookingModel[] |
| 10 | * @var $order_bundles OsBundleModel[] |
| 11 | * @var $preselected_booking OsBundleModel |
| 12 | * @var $preselected_order_item OsOrderItemModel |
| 13 | * @var $show_only_preselected_items bool |
| 14 | **/ |
| 15 | |
| 16 | |
| 17 | if ( ! defined( 'ABSPATH' ) ) { |
| 18 | exit; // Exit if accessed directly |
| 19 | } |
| 20 | |
| 21 | |
| 22 | ?> |
| 23 | |
| 24 | |
| 25 | <div class="os-form-w quick-order-form-w <?php echo ( $order->is_new_record() ) ? 'is-new-order' : 'is-existing-order'; ?>" |
| 26 | data-refresh-route-name="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'quick_edit' ) ); ?>"> |
| 27 | <form action="" |
| 28 | data-route-name="<?php echo ( $order->is_new_record() ) ? esc_attr( OsRouterHelper::build_route_name( 'orders', 'create' ) ) : esc_attr( OsRouterHelper::build_route_name( 'orders', 'update' ) ); ?>" |
| 29 | class="order-quick-edit-form"> |
| 30 | <div class="os-form-header"> |
| 31 | <?php if ( $order->is_new_record() ) { ?> |
| 32 | <h2><?php esc_html_e( 'New Order', 'latepoint' ); ?></h2> |
| 33 | <?php } else { ?> |
| 34 | <h2><?php esc_html_e( 'Edit Order', 'latepoint' ); ?></h2> |
| 35 | <?php } ?> |
| 36 | <a href="#" class="latepoint-side-panel-close latepoint-side-panel-close-trigger"><i class="latepoint-icon latepoint-icon-x"></i></a> |
| 37 | </div> |
| 38 | <div class="os-form-content"> |
| 39 | <?php if ( ! $order->is_new_record() ) { ?> |
| 40 | <div class="quick-booking-info"> |
| 41 | <?php echo '<span>' . esc_html__( 'Order ID:', 'latepoint' ) . '</span><strong>' . esc_html( $order->id ) . '</strong>'; ?> |
| 42 | <?php echo '<span>' . esc_html__( 'Code:', 'latepoint' ) . '</span><strong>' . esc_html( $order->confirmation_code ) . '</strong>'; ?> |
| 43 | <?php echo '<a target="_blank" href="' . $order->manage_by_key_url( 'customer' ) . '"><i class="latepoint-icon latepoint-icon-link-2"></i>' . esc_html__( 'Share', 'latepoint' ) . '</a>'; ?> |
| 44 | <?php if ( OsAuthHelper::get_current_user()->has_capability( 'activity__view' ) ) { |
| 45 | echo '<a href="#" data-order-id="' . esc_attr( $order->id ) . '" data-route="' . esc_attr( OsRouterHelper::build_route_name( 'orders', 'view_order_log' ) ) . '" class="quick-order-form-view-log-btn"><i class="latepoint-icon latepoint-icon-clock"></i>' . esc_html__( 'History', 'latepoint' ) . '</a>'; |
| 46 | } ?> |
| 47 | </div> |
| 48 | <?php } ?> |
| 49 | <div class="os-row"> |
| 50 | <div class="os-col-6"> |
| 51 | <?php echo OsFormHelper::select_field( 'order[status]', __( 'Order Status', 'latepoint' ), OsOrdersHelper::get_order_statuses_list(), $order->status, array( 'placeholder' => __( 'Set Status', 'latepoint' ) ) ); ?> |
| 52 | </div> |
| 53 | <div class="os-col-6"> |
| 54 | <?php echo OsFormHelper::select_field( 'order[fulfillment_status]', __( 'Fulfillment Status', 'latepoint' ), OsOrdersHelper::get_fulfillment_statuses_list(), $order->fulfillment_status, array( 'placeholder' => __( 'Set Status', 'latepoint' ) ) ); ?> |
| 55 | </div> |
| 56 | </div> |
| 57 | <div class="os-row"> |
| 58 | <div class="os-col-12"> |
| 59 | <?php if ( ! empty( $order->customer_comment ) ) { |
| 60 | echo OsFormHelper::textarea_field( 'order[customer_comment]', __( 'Comment left by the customer', 'latepoint' ), $order->customer_comment, [ |
| 61 | 'rows' => 1, |
| 62 | 'theme' => 'simple', |
| 63 | 'placeholder' => '' |
| 64 | ] ); |
| 65 | } ?> |
| 66 | </div> |
| 67 | </div> |
| 68 | |
| 69 | <div class="order-items-info-w <?php if ( empty( $bundles ) ) { |
| 70 | echo 'no-bundles'; |
| 71 | } ?> <?php if ( $show_only_preselected_items ) { |
| 72 | echo 'show-preselected-only'; |
| 73 | } ?>"> |
| 74 | <div class="os-form-sub-header"> |
| 75 | <h3><?php echo OsCartsHelper::can_checkout_multiple_items() ? esc_html__( 'Order Items', 'latepoint' ) : esc_html__( 'Order Item', 'latepoint' ); ?></h3> |
| 76 | <div class="os-form-sub-header-actions"> |
| 77 | <?php if ( OsCartsHelper::can_checkout_multiple_items() ) { ?> |
| 78 | <a href="#" data-add-label="<?php esc_attr_e( 'Add Another Item', 'latepoint' ); ?>" data-cancel-label="<?php esc_attr_e( 'Cancel', 'latepoint' ); ?>" |
| 79 | class="latepoint-btn latepoint-btn-sm latepoint-btn-link order-form-add-item-btn" |
| 80 | data-booking-form-route-name="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'generate_booking_order_item_block' ) ); ?>" |
| 81 | data-bundle-form-route-name="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'generate_bundle_order_item_block' ) ); ?>" |
| 82 | data-fold-booking-data-route-name="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'fold_booking_data_form' ) ); ?>"> |
| 83 | <i class="latepoint-icon latepoint-icon-plus"></i><span><?php esc_attr_e( 'Add Another Item', 'latepoint' ); ?></span> |
| 84 | </a> |
| 85 | <?php } ?> |
| 86 | </div> |
| 87 | </div> |
| 88 | <?php if ( ! empty( $bundles ) ) { ?> |
| 89 | <div class="new-order-item-list-bundles-wrapper"> |
| 90 | <div class="centered-question-label"><?php esc_html_e( 'Select a bundle that you want to add', 'latepoint' ); ?></div> |
| 91 | <div class="new-order-item-list-bundles"> |
| 92 | <?php |
| 93 | foreach ( $bundles as $bundle ) { |
| 94 | echo '<div class="new-order-item-list-bundle" |
| 95 | data-os-after-call="latepoint_bundle_added_to_quick_order" |
| 96 | data-os-output-target=".order-items-list" |
| 97 | data-os-output-target-do="prepend" |
| 98 | data-os-action="' . esc_attr( OsRouterHelper::build_route_name( 'orders', 'generate_bundle_order_item_block' ) ) . '" |
| 99 | data-os-params="' . esc_attr( OsUtilHelper::build_os_params( [ 'order_id' => $order->id, 'bundle_id' => $bundle->id ] ) ) . '"> |
| 100 | <div class="noi-description-wrapper"> |
| 101 | <div class="noi-label">' . esc_html( $bundle->name ) . '</div> |
| 102 | <div class="noi-description">' . esc_html( implode( ', ', $bundle->get_service_and_quantity_descriptions() ) ) . '</div> |
| 103 | </div> |
| 104 | <div class="noi-price">' . esc_html( $bundle->get_formatted_charge_amount() ) . '</div> |
| 105 | </div>'; |
| 106 | } |
| 107 | ?> |
| 108 | </div> |
| 109 | </div> |
| 110 | <?php if ( $bundles ) { ?> |
| 111 | <div class="new-order-item-variant-selector-wrapper"> |
| 112 | <div class="centered-question-label"><?php esc_html_e( 'What type of item would you like to add?', 'latepoint' ); ?></div> |
| 113 | <div class="new-order-item-variant-selector"> |
| 114 | <div class="new-order-item-variant new-order-item-variant-booking"> |
| 115 | <i class="latepoint-icon latepoint-icon-calendar2"></i> |
| 116 | <div><?php esc_html_e( 'Booking', 'latepoint' ); ?></div> |
| 117 | </div> |
| 118 | <div class="new-order-item-variant new-order-item-variant-bundle"> |
| 119 | <i class="latepoint-icon latepoint-icon-layers"></i> |
| 120 | <div><?php esc_html_e( 'Bundle', 'latepoint' ); ?></div> |
| 121 | </div> |
| 122 | </div> |
| 123 | </div> |
| 124 | <?php } ?> |
| 125 | <?php } ?> |
| 126 | <div class="order-items-list"> |
| 127 | <?php if ( empty( $order_bookings ) && empty( $order_bundles ) ) { |
| 128 | echo '<div class="no-results">' . esc_html__( 'Order is empty', 'latepoint' ) . '</div>'; |
| 129 | } else { ?> |
| 130 | <?php foreach ( $order_bundles as $order_item_id => $order_bundle ) { |
| 131 | $preselected_bundle_booking_id = ( $preselected_order_item && ( $preselected_order_item->id == $order_item_id ) ) ? $preselected_booking->id : false; |
| 132 | $preselected_css = ( $preselected_bundle_booking_id ? 'holds-preselected-booking is-open' : '' ); |
| 133 | echo '<div class="order-item order-item-variant-bundle ' . esc_attr( $preselected_css ) . '" data-order-item-id="' . esc_attr( $order_item_id ) . '">'; |
| 134 | echo OsOrdersHelper::generate_order_item_pill_for_bundle( $order_bundle, $order_item_id, $preselected_bundle_booking_id ); |
| 135 | echo '</div>'; |
| 136 | } ?> |
| 137 | <?php foreach ( $order_bookings as $order_item_id => $order_booking ) { |
| 138 | if ( empty( $order_booking ) ) { |
| 139 | continue; |
| 140 | } |
| 141 | $can_view = OsRolesHelper::can_user_make_action_on_model_record( $order_booking, 'view' ); |
| 142 | $unfold = ( count( $order_bookings ) == 1 && empty( $order_bundles ) || ( $preselected_booking && $preselected_booking->id == $order_booking->id ) ); |
| 143 | $preselected_css = $unfold ? 'holds-preselected-booking is-open' : ''; |
| 144 | |
| 145 | if ( ! $can_view ) { |
| 146 | $preselected_css .= ' non-viewable'; |
| 147 | } |
| 148 | |
| 149 | echo '<div class="order-item order-item-variant-booking ' . esc_attr( $preselected_css ) . '" data-order-item-id="' . esc_attr( $order_item_id ) . '">'; |
| 150 | echo OsOrdersHelper::booking_data_form_for_order_item_id( $order_item_id, $order_booking, LATEPOINT_ITEM_VARIANT_BOOKING, ! $unfold ); |
| 151 | echo '</div>'; |
| 152 | } |
| 153 | } |
| 154 | ?> |
| 155 | </div> |
| 156 | <?php if ( $show_only_preselected_items ) { |
| 157 | $total_count_other_items = count( $order->get_items() ) - 1; |
| 158 | if ( $total_count_other_items > 0 ) { |
| 159 | echo '<div class="hidden-order-items-notice">'; |
| 160 | if ( $total_count_other_items > 1 ) { |
| 161 | // translators: %d number of items in the order |
| 162 | echo '<div class="hidden-order-items-notice-message">' . esc_html( sprintf( __( 'There are %d more items in this order.', 'latepoint' ), ( $total_count_other_items ) ) ) . '</div>'; |
| 163 | } else { |
| 164 | echo '<div class="hidden-order-items-notice-message">' . esc_html__( 'There is one more item in this order.', 'latepoint' ) . '</div>'; |
| 165 | } |
| 166 | echo '<div class="hidden-order-items-notice-link">' . esc_html__( 'Show All Items', 'latepoint' ) . '</div>'; |
| 167 | echo '</div>'; |
| 168 | } |
| 169 | } ?> |
| 170 | </div> |
| 171 | |
| 172 | <div class="customer-info-w selected"> |
| 173 | <div class="os-form-sub-header"> |
| 174 | <h3><?php esc_html_e( 'Customer', 'latepoint' ); ?></h3> |
| 175 | <div class="os-form-sub-header-actions"> |
| 176 | <?php if ( OsRolesHelper::can_user( 'customer__create' ) ) { ?> |
| 177 | <a href="#" class="latepoint-btn latepoint-btn-sm latepoint-btn-link customer-info-create-btn" |
| 178 | data-os-output-target=".customer-quick-edit-form-w" |
| 179 | data-os-after-call="latepoint_quick_order_customer_cleared" |
| 180 | data-os-action="<?php echo esc_attr( OsRouterHelper::build_route_name( 'customers', 'inline_edit_form' ) ); ?>"> |
| 181 | <i class="latepoint-icon latepoint-icon-plus"></i><span><?php esc_html_e( 'New', 'latepoint' ); ?></span> |
| 182 | </a> |
| 183 | <?php } ?> |
| 184 | <a href="#" class="latepoint-btn latepoint-btn-sm latepoint-btn-link customer-info-load-btn"> |
| 185 | <i class="latepoint-icon latepoint-icon-search"></i><span><?php esc_html_e( 'Find', 'latepoint' ); ?></span> |
| 186 | </a> |
| 187 | </div> |
| 188 | </div> |
| 189 | <div class="customers-selector-w"> |
| 190 | <div class="customers-selector-search-w"> |
| 191 | <i class="latepoint-icon latepoint-icon-search"></i> |
| 192 | <input type="text" data-route="<?php echo esc_attr( OsRouterHelper::build_route_name( 'customers', 'query_for_booking_form' ) ); ?>" class="customers-selector-search-input" |
| 193 | placeholder="<?php esc_attr_e( 'Start typing to search...', 'latepoint' ); ?>"> |
| 194 | <span class="customers-selector-cancel"> |
| 195 | <i class="latepoint-icon latepoint-icon-x"></i> |
| 196 | <span><?php esc_html_e( 'cancel', 'latepoint' ); ?></span> |
| 197 | </span> |
| 198 | </div> |
| 199 | <?php if ( $customers ) { ?> |
| 200 | <div class="customers-options-list"> |
| 201 | <?php foreach ( $customers as $customer ) { ?> |
| 202 | <div class="customer-option" data-os-params="<?php echo esc_attr( OsUtilHelper::build_os_params( [ 'customer_id' => $customer->id ] ) ); ?>" |
| 203 | data-os-after-call="latepoint_quick_order_customer_selected" |
| 204 | data-os-after-call-error="latepoint_quick_order_customer_selected" |
| 205 | data-os-output-target=".customer-quick-edit-form-w" |
| 206 | data-os-action="<?php echo esc_attr( OsRouterHelper::build_route_name( 'customers', 'inline_edit_form' ) ); ?>"> |
| 207 | <div class="customer-option-avatar" style="background-image: url(<?php echo esc_url( OsCustomerHelper::get_avatar_url( $customer ) ); ?>)"></div> |
| 208 | <div class="customer-option-info"> |
| 209 | <h4 class="customer-option-info-name"><span><?php echo esc_html( $customer->full_name ); ?></span></h4> |
| 210 | <ul> |
| 211 | <li> |
| 212 | <?php esc_html_e( 'Email: ', 'latepoint' ); ?> |
| 213 | <strong><?php echo esc_html( $customer->email ); ?></strong> |
| 214 | </li> |
| 215 | <li> |
| 216 | <?php esc_html_e( 'Phone: ', 'latepoint' ); ?> |
| 217 | <strong><?php echo esc_html( $customer->phone ); ?></strong> |
| 218 | </li> |
| 219 | </ul> |
| 220 | </div> |
| 221 | </div> |
| 222 | <?php } ?> |
| 223 | </div> |
| 224 | <?php } ?> |
| 225 | </div> |
| 226 | <div class="customer-quick-edit-form-w"> |
| 227 | <?php require( LATEPOINT_VIEWS_ABSPATH . 'customers/inline_edit_form.php' ); ?> |
| 228 | </div> |
| 229 | </div> |
| 230 | <div> |
| 231 | <div class="os-form-sub-header"> |
| 232 | <h3><?php esc_html_e( 'Price Breakdown', 'latepoint' ); ?></h3> |
| 233 | <div class="os-form-sub-header-actions"> |
| 234 | <a href="#" class="latepoint-btn latepoint-btn-sm latepoint-btn-link reload-price-breakdown" |
| 235 | data-route="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'reload_price_breakdown' ) ); ?>"> |
| 236 | <i class="latepoint-icon latepoint-icon-refresh-cw"></i> |
| 237 | <span><?php esc_html_e( 'Recalculate', 'latepoint' ); ?></span> |
| 238 | </a> |
| 239 | </div> |
| 240 | </div> |
| 241 | <div class="price-breakdown-wrapper"> |
| 242 | <?php include '_price_breakdown.php'; ?> |
| 243 | </div> |
| 244 | </div> |
| 245 | <div class="balance-payment-wrapper"> |
| 246 | <?php include '_balance_and_payments.php'; ?> |
| 247 | </div> |
| 248 | |
| 249 | <?php |
| 250 | if ( OsRolesHelper::can_user( 'transaction__view' ) ) { ?> |
| 251 | <div class="transactions-info-w"> |
| 252 | <div class="os-form-sub-header"> |
| 253 | <h3><?php esc_html_e( 'Transactions', 'latepoint' ); ?></h3> |
| 254 | </div> |
| 255 | <div class="quick-transactions-list-w"> |
| 256 | <?php |
| 257 | if ( $transactions ) { |
| 258 | foreach ( $transactions as $transaction ): |
| 259 | include '_transaction_box.php'; |
| 260 | endforeach; |
| 261 | } |
| 262 | ?> |
| 263 | </div> |
| 264 | <?php if ( OsRolesHelper::can_user( 'transaction__create' ) ) { ?> |
| 265 | <div class="quick-add-item-button" |
| 266 | data-os-after-call="latepoint_init_quick_transaction_form" |
| 267 | data-os-before-after="before" |
| 268 | data-os-params="<?php echo OsUtilHelper::build_os_params( [ 'order_id' => $order->id ] ) ?>" |
| 269 | data-os-action="<?php echo esc_attr( OsRouterHelper::build_route_name( 'transactions', 'edit_form' ) ); ?>"> |
| 270 | <i class="latepoint-icon latepoint-icon-plus2"></i> |
| 271 | <span><?php esc_html_e( 'Add Transaction', 'latepoint' ); ?></span> |
| 272 | </div> |
| 273 | <?php } ?> |
| 274 | </div> |
| 275 | <?php } |
| 276 | if ( ! $order->is_new_record() ) { |
| 277 | if ( OsRolesHelper::can_user( 'invoices__view' ) ) { |
| 278 | if ( ! apply_filters( 'latepoint_feature_invoices', false ) ) { ?> |
| 279 | <div class="transactions-info-w"> |
| 280 | <div class="os-form-sub-header"> |
| 281 | <h3><?php esc_html_e( 'Invoices', 'latepoint' ); ?></h3> |
| 282 | </div> |
| 283 | <a href="#" class="pro-upgrade-required"> |
| 284 | <div class="pur-heading"><?php esc_html_e( 'Upgrade to PRO', 'latepoint' ); ?></div> |
| 285 | <div class="pur-desc"><?php esc_html_e( 'To unlock invoicing feature, you need to upgrade to a PRO version', 'latepoint' ); ?></div> |
| 286 | </a> |
| 287 | </div> |
| 288 | <?php |
| 289 | } |
| 290 | } |
| 291 | } |
| 292 | |
| 293 | /** |
| 294 | * Content after order edit form |
| 295 | * |
| 296 | * @param {OsOrderModel} $order instance of order model that is being edited |
| 297 | * |
| 298 | * @since 5.1.0 |
| 299 | * @hook latepoint_order_quick_edit_form_content_after |
| 300 | * |
| 301 | */ |
| 302 | do_action( 'latepoint_order_quick_edit_form_content_after', $order ); |
| 303 | ?> |
| 304 | </div> |
| 305 | <div class="os-form-buttons os-quick-form-buttons"> |
| 306 | <?php if ( $order->is_new_record() ) { ?> |
| 307 | <button type="submit" class="latepoint-btn latepoint-btn-block latepoint-btn-lg"><?php esc_html_e( 'Create Order', 'latepoint' ); ?></button> |
| 308 | <?php } else { ?> |
| 309 | <div class="os-full"> |
| 310 | <button type="submit" class="latepoint-btn latepoint-btn-block latepoint-btn-lg"><?php esc_html_e( 'Save Changes', 'latepoint' ); ?></button> |
| 311 | </div> |
| 312 | <div class="os-compact"> |
| 313 | <a href="#" |
| 314 | data-os-success-action="reload" |
| 315 | data-os-action="<?php echo esc_attr( OsRouterHelper::build_route_name( 'orders', 'destroy' ) ); ?>" |
| 316 | data-os-params="<?php echo esc_attr( OsUtilHelper::build_os_params( [ 'id' => $order->id ], 'destroy_order_' . $order->id ) ); ?>" |
| 317 | data-os-prompt="<?php esc_attr_e( 'Are you sure you want to delete this order? All appointments that are attached ot this order will be removed as well', 'latepoint' ); ?>" |
| 318 | class="latepoint-delete-order latepoint-btn latepoint-btn-secondary latepoint-btn-lg latepoint-btn-just-icon" |
| 319 | title="<?php esc_attr_e( 'Delete Order', 'latepoint' ); ?>"> |
| 320 | <i class="latepoint-icon latepoint-icon-trash1"></i> |
| 321 | </a> |
| 322 | </div> |
| 323 | <?php } ?> |
| 324 | </div> |
| 325 | <?php |
| 326 | echo OsFormHelper::hidden_field( 'order[id]', $order->id ); |
| 327 | wp_nonce_field( $order->is_new_record() ? 'new_order' : 'edit_order_' . $order->id ); |
| 328 | ?> |
| 329 | </form> |
| 330 | </div> |