shop-old/modules/admin_order_editor.php
2026-04-20 01:03:43 +02:00

669 lines
22 KiB
PHP

<?php
/*
* @version $Id: index.php 10381 2008-06-01 03:35:53Z $
* @package Carteasy
* @copyright Copyright (C) 2005 - 2011 Wlanium
* @license proprietary
* @author Thomas Bartelt
* Carteasy is a web shop system
*/
include_once './core/country.class.php';
include_once './core/order.class.php';
include_once './core/orderhelper.class.php';
include_once './core/itemhelper.class.php';
include_once './core/customer.class.php';
include_once './core/customergroups.class.php';
include_once './core/customerhelper.class.php';
include_once './core/tax.class.php';
include_once './core/payment_method.class.php';
include_once './core/item.class.php';
include_once './core/cs_ticket.class.php';
include_once './core/cs_ticket_message.class.php';
include_once './core/deliverer.class.php';
include_once './core/delivererhelper.class.php';
include_once './core/cstickethelper.php';
include_once './core/cancellationreasons.class.php';
include_once './core/config.class.php';
class admin_order_editor {
protected $layout_object;
protected $base_object;
protected $order_object;
protected $customer_object;
protected $country_object;
protected $customer_group_object;
protected $item_object;
protected $deliverer_object;
protected $cancellation_reasons_object;
function __construct($base_object, $layout_object) {
$this->layout_object = $layout_object;
$this->base_object = $base_object;
$this->order_object = new Order($base_object);
$this->customer_object = new Customer($this->base_object);
$this->country_object = new Country($this->base_object);
$this->item_object = new Item($this->base_object);
$this->deliverer_object = new Deliverer($this->base_object);
$this->customer_group_object = new CustomerGroups($this->base_object);
$this->cancellation_reasons_object = new CancellationReasons($base_object);
}
function run() {
if (isset($_GET['action'])) {
$action = $_GET['action'];
} else if (isset($_POST['action'])) {
$action = $_POST['action'];
} else {
$action = 'add_order';
}
if (isset($_GET['id'])) {
$id = $_GET['id'];
} else if (isset($_POST['id'])) {
$id = $_POST['id'];
} else {
$id = false;
}
if ($action == 'submit') {
$this->save($id);
} else {
return $this->edit($id);
}
}
private function edit($id) {
if ($id) {
// get order tickets
$revised_orders_list = OrderHelper::get_revision_history_for_order($id);
$ticket_object = new Cs_ticket($this->base_object);
$ticket_message_object = new Cs_ticket_message($this->base_object);
$all_tickets = CSTicketHelper::get_tickets_by_ids($revised_orders_list);
$tickets = array();
foreach ($all_tickets as $ticket) {
// get first message
$ticket->first_message = $ticket_message_object->get_first_message($ticket->id);
$tickets[] = $ticket;
}
$this->layout_object->assign('tickets', $tickets);
try {
$order = $this->order_object->get_order_by_id($id);
$customer_id = $order['header']->customer_id;
if (OrderHelper::order_has_revision($id)) {
$order_revisions = OrderHelper::get_all_orders_by_order_number($order['header']->order_number);
$this->layout_object->assign('order_history', $order_revisions);
}
$this->customer_group_object->get_by_user($customer_group_id);
$order_data = $order['header'];
$customer_group_id = CustomerHelper::get_customer_group_id_by_customer_id($customer_id);
$customer_email = CustomerHelper::get_customer_email($customer_id);
$group_data = $this->customer_group_object->get($customer_group_id);
$order_data->group_id = $group_data->id;
$order_data->group_name = $group_data->name;
$order_data->group_show_tax = $group_data->show_tax;
$order_data->customer_email = $customer_email;
$order_items = array_reverse($order['items']);
$order_footer = $order['footer'];
// deliverers
$deliverers = DelivererHelper::get_deliverers_with_prices_by_country($order_data->shipping_country);
$this->layout_object->assign('deliverers', $deliverers);
// payment method
$payment_method = PaymentHelper::getActivePaymentMethodsByCountry($order['header']->shipping_country);
$this->layout_object->assign('payment_method_list', $payment_method);
// cancellation reasons
$cancellation_reasons = $this->cancellation_reasons_object->get_all('active');
$this->layout_object->assign('cancellation_reasons', $cancellation_reasons);
$this->layout_object->assign('addresses', $this->customer_object->get_address_by_customer_id($customer_id));
$shipping_charge_taxes = ($order_footer->shipping_charges / 119.0) * 19;
$payment_method_charge_taxes = ($order_footer->payment_method_charges / 119.0) * 19;
$additional_chrges = $shipping_charge_taxes + $payment_method_charge_taxes;
if (isset($order_footer->taxes['19.00'])) {
$order_footer->taxes['19.00'] += $shipping_charge_taxes + $payment_method_charge_taxes;
} else {
if ($additional_chrges > 0) {
$order_footer->taxes['19.00'] = $shipping_charge_taxes + $payment_method_charge_taxes;
}
}
$this->layout_object->assign('order', $order_data);
$this->layout_object->assign('order_items', $order_items);
$this->layout_object->assign('footer', $order_footer);
} catch (Exception $e) {
$this->layout_object->assign('error_message', $e->getMessage());
}
} else {
if ($_GET['customer_id']) {
$this->customer_object->set_id($_GET['customer_id']);
$customer_data = $this->customer_object->get_data();
$customer_group_data = $this->customer_group_object->get($customer_data->group_id);
$temp = new stdClass();
$temp->customer_id = $customer_data->id;
$temp->group_id = $customer_data->group_id;
$temp->customer_number = $customer_data->number;
$temp->customer_name = $customer_data->firstname.' '.$customer_data->surname;
$temp->group_show_tax = $customer_group_data->show_tax;
$temp->group_name = $customer_group_data->name;
$this->layout_object->assign('order', $temp);
$this->layout_object->assign('addresses', $this->customer_object->get_address_by_customer_id($_GET['customer_id']));
//doesn't work hmm, besides i would still need to insert the fields in the template
$this->layout_object->assign('use_default_address', true);
$default_address_country_id = CustomerHelper::get_default_address_country($customer_data->id);
if ($default_address_country_id) {
// deliverers
$deliverers = DelivererHelper::get_deliverers_with_prices_by_country($default_address_country_id);
$this->layout_object->assign('deliverers', $deliverers);
// payment method
$payment_method = PaymentHelper::getActivePaymentMethodsByCountry($default_address_country_id);
$this->layout_object->assign('payment_method_list', $payment_method);
}
}
}
if (Config::has_key('invoice_number_manual')) {
$invoice_number_manual = Config::get_value('invoice_number_manual');
} else {
$invoice_number_manual = false;
}
$this->layout_object->assign('invoice_number_manual', $invoice_number_manual);
if (Config::has_key('shipping_list_number_manual')) {
$shipping_list_number_manual = Config::get_value('shipping_list_number_manual');
} else {
$shipping_list_number_manual = false;
}
$this->layout_object->assign('shipping_list_number_manual', $shipping_list_number_manual);
// get countries
$countries = $this->country_object->get_all();
$this->layout_object->assign('countries', $countries);
// payment methods
$order_status = $this->order_object->get_order_status_object();
$this->layout_object->assign('order_status_list', $order_status);
// billing status
$billing_status = $this->order_object->get_billing_status_object();
$this->layout_object->assign('billing_status_list', $billing_status);
// taxes
$taxes = new Tax($this->base_object);
$this->layout_object->assign('tax_rates', $taxes->get_all());
$this->layout_object->assign('order_list', $this->layout_object->fetch('table_order_order_list.tpl'));
if (isset($_GET['action']) && $_GET['action'] == 'order_print') {
echo $this->layout_object->fetch('admin_order_print.tpl');
exit();
}
else {
return $this->layout_object->fetch('admin_order_editor.tpl');
}
}
private function save($id) {
$data = new stdClass();
$show_taxes = $_POST['show_taxes'];
unset($_POST['show_taxes']);
if (isset($_POST['order'])) {
$order = $_POST['order'];
if (isset($order['is_eu_order'])) {
$data->is_eu_order = $order['is_eu_order'] == 'on' ? 1 : 0;
} else {
$data->is_eu_order = 0;
}
if (isset($order['customer_vat_reg_num'])) {
$data->customer_vat_reg_num = $order['customer_vat_reg_num'];
}
}
if (isset($_POST['export_to_shipping'])) {
$data->export_to_shipping = $_POST['export_to_shipping'];
}
if (isset($_POST['paymorrow'])) {
$paymorrow = $_POST['paymorrow'];
if (isset($paymorrow['paymorrow_request_id'])) {
$data->paymorrow_request_id = $paymorrow['paymorrow_request_id'];
}
if (isset($paymorrow['paymorrow_transaction_id'])) {
$data->paymorrow_transaction_id = $paymorrow['paymorrow_transaction_id'];
}
if (isset($paymorrow['paymorrow_response_result_code'])) {
$data->paymorrow_response_result_code = $paymorrow['paymorrow_response_result_code'];
}
if (isset($paymorrow['paymorrow_response_status_code'])) {
$data->paymorrow_response_status_code = $paymorrow['paymorrow_response_status_code'];
}
if (isset($paymorrow['paymorrow_response_timestamp'])) {
$data->paymorrow_response_timestamp = $paymorrow['paymorrow_response_timestamp'];
}
if (isset($paymorrow['paymorrow_bic'])) {
$data->paymorrow_bic = $paymorrow['paymorrow_bic'];
}
if (isset($paymorrow['paymorrow_iban'])) {
$data->paymorrow_iban = $paymorrow['paymorrow_iban'];
}
if (isset($paymorrow['paymorrow_national_bank_code'])) {
$data->paymorrow_national_bank_code = $paymorrow['paymorrow_national_bank_code'];
}
if (isset($paymorrow['paymorrow_national_bank_account_number'])) {
$data->paymorrow_national_bank_account_number = $paymorrow['paymorrow_national_bank_account_number'];
}
if (isset($paymorrow['paymorrow_payment_reference'])) {
$data->paymorrow_payment_reference = $paymorrow['paymorrow_payment_reference'];
}
}
if (isset($_POST['klarna'])) {
$klarna = $_POST['klarna'];
if (isset($klarna['klarna_invoice_number'])) {
$data->klarna_invoice_number = $klarna['klarna_invoice_number'];
}
}
if (isset($_POST['orderInfo'])) {
$orderInfo = $_POST['orderInfo'];
if (isset($orderInfo['order_number'])) {
$data->order_number = $orderInfo['order_number'];
}
if (isset($orderInfo['order_revision'])) {
$data->order_revision = $orderInfo['order_revision'];
}
if (isset($orderInfo['order_addendum'])) {
$data->order_addendum = $orderInfo['order_addendum'];
}
}
if (isset($_POST['inventory_management'])) {
$inventory_management = $_POST['inventory_management'];
if (isset($inventory_management['inventory_decremented'])) {
$data->inventory_decremented = $inventory_management['inventory_decremented'];
}
if (isset($inventory_management['inventory_decremented_date'])) {
$data->inventory_decremented_date = $inventory_management['inventory_decremented_date'];
}
if (isset($inventory_management['inventory_incremented'])) {
$data->inventory_incremented = $inventory_management['inventory_incremented'];
}
if (isset($inventory_management['inventory_incremented_date'])) {
$data->inventory_incremented_date = $inventory_management['inventory_incremented_date'];
}
}
if (isset($_POST['invoice_email'])) {
$invoice_email = $_POST['invoice_email'];
if (isset($invoice_email['invoice_email_sent'])) {
$data->invoice_email_sent = $invoice_email['invoice_email_sent'];
}
if (isset($invoice_email['invoice_email_date'])) {
$data->invoice_email_date = $invoice_email['invoice_email_date'];
}
if (isset($invoice_email['invoice_email_recipient'])) {
$data->invoice_email_recipient = $invoice_email['invoice_email_recipient'];
}
}
// cancellation
if (isset($_POST['cancellationData'])) {
if (isset($_POST['cancellationData']['cancellation_date'])) {
$data->cancellation_date = $_POST['cancellationData']['cancellation_date'];
}
if (isset($_POST['cancellationData']['cancellation_status'])) {
$data->cancellation_status = $_POST['cancellationData']['cancellation_status'];
}
if (isset($_POST['cancellationData']['cancellation_reason_id']) && $_POST['cancellationData']['cancellation_reason_id'] != '-') {
$data->cancellation_reason_id = $_POST['cancellationData']['cancellation_reason_id'];
}
if (isset($_POST['cancellationData']['cancellation_info'])) {
$data->cancellation_info = $_POST['cancellationData']['cancellation_info'];
}
}
if (isset($_POST['without_shipping_charges']) && $_POST['without_shipping_charges'] == 'yes') {
$data->without_shipping_charges = 1;
} else {
$data->without_shipping_charges = 0;
}
if (isset($_POST['giftCertificate'])) {
$data->giftCertificateCode = $_POST['giftCertificate']['gift_certificate_code'];
}
if (isset($_POST['dateOptions'])) {
$dates = $_POST['dateOptions'];
if ($dates['order_date']) {
$data->order_date = $dates['order_date'];
}
if ($dates['billing_date']) {
$data->billing_date = $dates['billing_date'];
}
if ($dates['payment_date']) {
$data->payment_date = $dates['payment_date'];
}
}
$data->paypal = $_POST['paypal'];
if (isset($_POST['orderNotice'])) {
$notices = $_POST['orderNotice'];
if ($notices['customer_info']) {
$data->customer_info = $notices['customer_info'];
}
if ($notices['invoice_info']) {
$data->invoice_info = $notices['invoice_info'];
}
if ($notices['internal_info']) {
$data->internal_info = $notices['internal_info'];
}
if ($notices['delivery_note_info']) {
$data->delivery_note_info = $notices['delivery_note_info'];
}
}
if (isset($_POST['group_id'])) {
$group_id = $_POST['group_id'];
}
$data->revisor_id = $this->base_object->customer->id;
$orderData = $_POST['orderOptions'];
if (isset($_POST['customer'])) {
$data->customer = (object) $_POST['customer'];
}
if (isset($_POST['billingAddress'])) {
$data->billingAddress = (object) $_POST['billingAddress'];
}
if (isset($_POST['shippingAddress'])) {
$data->shippingAddress = (object) $_POST['shippingAddress'];
}
$break_order_apart = false;
$not_delierable = false;
if (isset($_POST['order_item'])) {
$items = $this->make_items_array($_POST['order_item']);
if (isset($_POST['child_item'])) {
$children = $this->make_child_items_array($_POST['child_item']);
$items = array_merge($items, $children);
}
foreach ($items as $order_item) {
$this->item_object->id = $order_item->item_id;
$item = $this->item_object->get_data($group_id, false);
$prices = $this->item_object->calculate_prices($item, $order_item->quantity, $order_item->variant_1, $order_item->variant_2, $order_item->price, $data->customer->customer_id);
$data->items[] = array(
'itemId' => $order_item->item_id,
'variant1' => $order_item->variant_1,
'variant2' => $order_item->variant_2,
'quantity' => $order_item->quantity,
'prices' => $prices,
'mainItemNumber' => $item->number,
'variantItemNumber' => $item->variant_data[$order_item->variant_1][$order_item->variant_2]['item_number'],
'vatId' => $item->tax_id,
'vatRate' => $item->tax,
'vatValue' => $prices['itemPriceGross'] - $prices['itemPriceNet'],
'name' => $item->name,
'item_status' => $order_item->item_status,
'item_status_text' => $order_item->item_status_text,
'delivery_date' => $order_item->delivery_date,
'backorder_quantity' => $order_item->backorder_quantity,
'userData' => $order_item->user_data,
'parentItemId' => $order_item->parent_item_id,
'stamp' => $order_item->stamp
);
++$data->itemsQuantity;
$data->itemsOverallQuantity += $itemDataSet->quantity;
$data->itemSumNet += $prices['itemPriceNet'] * $order_item->quantity;
$data->itemSumGross += $prices['itemPriceGross'] * $order_item->quantity;
$data->itemSumVat['id'][$item->tax_id] += ($prices['itemPriceGross'] - $prices['itemPriceNet']) * $order_item->quantity;
$data->itemSumVat['rate'][$item->tax] += ($prices['itemPriceGross'] - $prices['itemPriceNet']) * $order_item->quantity;
}
}
//tracking code
$data->trackingcode = $orderData['trackingcode'];
$customer_group_id = $group_id;
// Payment
$data->payment = PaymentHelper::getPaymentDataByIdAndCountry(
$orderData['payment_method'],
$data->shippingAddress->country,
$this->base_object->config->shopConfiguration['default_vat_value'],
$data->itemSumGross,
$customer_group_id
);
$data->payment->status = $orderData['payment_status'];
// Deliverer
// TODO: delivery method can't be defined in backend order editor
$data->shipping = DelivererHelper::getDeliveryDataByIdAndCountry(
$orderData['delivery_method'],
$data->shippingAddress->country,
$this->base_object->config->shopConfiguration['default_vat_value'],
$customer_group_id
);
if ($orderData['invoice_number'] != '') {
$data->invoice_number = $orderData['invoice_number'];
}
$data->order_status = $orderData['order_status'];
if (isset($_POST['generate_invoice_number']) && $_POST['generate_invoice_number'] == 'yes') {
$invoice_number = true;
} else {
$invoice_number = false;
}
if (isset($_POST['generate_shipping_list_number']) && $_POST['generate_shipping_list_number'] == 'yes') {
$shipping_list_number = true;
} else {
$shipping_list_number = false;
}
if (isset($_POST['manual_shipping_charges']) && $_POST['manual_shipping_charges'] != '') {
$data->manual_shipping_charges = $_POST['manual_shipping_charges'];
}
$data->set_inventory = (isset($_POST['set_inventory'])) ? $_POST['set_inventory'] : 0;
$status_has_chagned = false;
if ($id) {
//echo "update"; exit();
$status_has_chagned = $this->has_order_changed($data->order_status, $id);
$data->old_order_id = $id;
$return = $this->order_object->update($data, $invoice_number, $shipping_list_number, $show_taxes);
} else {
//echo "create"; exit();
$return = $this->order_object->create($data, $invoice_number, $shipping_list_number, $show_taxes);
}
if ($return) {
if ($status_has_chagned) {
// emails on status change
$this->checkorderStatus($data->order_status,$return,$data->customer->customer_id);
}
header('location: http://'.$_SERVER["SERVER_NAME"].'/index.php?admin_modul=admin_order_editor&id='.$return);
} else {
header('location: http://'.$_SERVER["SERVER_NAME"].'/index.php?admin_modul=admin_order_editor');
}
}
private function checkorderStatus($orderStatus_id,$order_id,$customer_id) {
if ($orderStatus_id == 3) {
$event_type = 5;
} else if ($orderStatus_id == 4) {
$event_type = 6;
} else if ($orderStatus_id == 5) {
$event_type = 7;
} else if ($orderStatus_id == 6) {
$event_type = 8;
}
if ($event_type) {
$ticket_object = new Cs_ticket($this->base_object);
$ticket_object->event($event_type, $customer_id, $order_id);
}
return;
}
private function has_order_changed($order_status_id, $order_id) {
$event_type = 0;
$db = $this->base_object->db;
$sql = "SELECT * FROM orders
WHERE id = ".$order_id." AND order_status != ".$order_status_id;
$result = $db->query($sql);
return $result->num_rows > 0;
}
private function make_items_array($data) {
$len = count($data['item_id']);
for ($i = 0; $i < $len; $i++) {
$tmp = new stdClass();
$tmp->quantity = $data['amount'][$i];
$tmp->item_id = $data['item_id'][$i];
$tmp->variant_1 = $data['variant1'][$i];
$tmp->variant_2 = $data['variant2'][$i];
$tmp->taxes = $data['taxes'][$i];
$tmp->price = $data['price'][$i];
$tmp->item_status = $data['item_status'][$i];
$tmp->item_status_text = $data['item_status_text'][$i];
$tmp->delivery_date = $data['delivery_date'][$i];
$tmp->backorder_quantity = $data['backorder_quantity'][$i];
// NEW for holzeisstock
$tmp->user_data = $data['user_data'][$i];
$tmp->parent_item_id = $data['parent_item_id'][$i];
$tmp->stamp = $data['stamp'][$i];
$return[] = $tmp;
}
return $return;
}
private function make_child_items_array($data) {
$len = count($data['is_selected']);
$return = array();
for ($i = 0; $i < $len; $i++) {
if ($data['is_selected'][$i] == 1) {
$tmp = new stdClass();
$tmp->quantity = $data['amount'][$i];
$tmp->item_id = $data['item_id'][$i];
$tmp->variant_1 = $data['variant1'][$i];
$tmp->variant_2 = $data['variant2'][$i];
$tmp->taxes = $data['taxes'][$i];
$tmp->price = $data['price'][$i];
// not set / editable
$tmp->item_status = 0;
$tmp->backorder_quantity = 0;
$tmp->delivery_date = '';
$tmp->item_status_text = '';
// NEW for holzeisstock
$tmp->user_data = $data['user_data'][$i];
$tmp->parent_item_id = $data['parent_item_id'][$i];
$tmp->stamp = $data['stamp'][$i];
$return[] = $tmp;
}
}
return $return;
}
}
?>