Revision b72ad532
Von Jan Büren vor etwa 1 Jahr hinzugefügt
SL/ShopConnector/Shopware6.pm | ||
---|---|---|
705 | 705 |
$transition = 'complete' if $transition eq 'completed'; |
706 | 706 |
|
707 | 707 |
croak "No shop order ID, should be in format [0-9a-f]{32}" unless $order_id =~ m/^[0-9a-f]{32}$/; |
708 |
croak "NO valid transition value" unless $transition =~ m/(open|process|cancel|complete|paid)/;
|
|
708 |
croak "NO valid transition value" unless $transition =~ m/(open|process|cancel|complete)/; |
|
709 | 709 |
my $ret; |
710 | 710 |
$ret = $self->connector->POST("/api/_action/order/$order_id/state/$transition"); |
711 | 711 |
my $response_code = $ret->responseCode(); |
712 | 712 |
die "Request failed, response code was: $response_code\n" . $ret->responseContent() unless $response_code eq '200'; |
713 | 713 |
|
714 |
} |
|
715 |
sub set_order_transaction_status { |
|
716 |
my ($self, $ordnumber, $transition) = @_; |
|
717 |
|
|
718 |
croak t8("No Order Number") unless $ordnumber; |
|
719 |
croak "NO valid transition value" unless $transition =~ m/(paid)/; |
|
720 |
|
|
721 |
# first fetch order_transaction id |
|
722 |
my %fetched_order = $self->get_fetched_order_structure; |
|
723 |
my $assoc = $self->all_open_orders(); |
|
724 |
|
|
725 |
# overwrite filter for exactly one ordnumber |
|
726 |
$assoc->{filter}->[0]->{value} = $ordnumber; |
|
727 |
$assoc->{filter}->[0]->{type} = 'equals'; |
|
728 |
$assoc->{filter}->[0]->{field} = 'orderNumber'; |
|
729 |
|
|
730 |
# 1. fetch the order and import it as a kivi order |
|
731 |
# 2. return the number of processed order (1) |
|
732 |
my $one_order = $self->connector->POST('api/search/order', to_json($assoc)); |
|
733 |
# 1. check for bad request or connection problems |
|
734 |
if ($one_order->responseCode() != 200) { |
|
735 |
$fetched_order{error} = 1; |
|
736 |
$fetched_order{message} = $one_order->responseCode() . ' ' . $one_order->responseContent(); |
|
737 |
die "Invalid response code:" . $fetched_order{message}; |
|
738 |
} |
|
739 |
|
|
740 |
# 1.1 parse json or exit |
|
741 |
my $content; |
|
742 |
try { |
|
743 |
$content = from_json($one_order->responseContent()); |
|
744 |
} catch { |
|
745 |
$fetched_order{error} = 1; |
|
746 |
$fetched_order{message} = "Malformed JSON Data: $_ " . $one_order->responseContent(); |
|
747 |
die "Invalid JSON Data:" . $fetched_order{message}; |
|
748 |
}; |
|
749 |
|
|
750 |
# 2. check if we found ONE order at all |
|
751 |
my $total = $content->{total}; |
|
752 |
if ($total == 0) { |
|
753 |
$fetched_order{number_of_orders} = 0; |
|
754 |
die \%fetched_order; |
|
755 |
} elsif ($total != 1) { |
|
756 |
$fetched_order{error} = 1; |
|
757 |
$fetched_order{message} = "More than one Order returned. Invalid State: $total"; |
|
758 |
die "Invalid State:" . $fetched_order{message}; |
|
759 |
} |
|
760 |
# we assume just one transaction at all |
|
761 |
die "Can only sync one single Transaction " unless scalar @{ $content->{data}->[0]->{transactions} } == 1; |
|
762 |
|
|
763 |
my $order_transaction_id = $content->{data}->[0]->{transactions}->[0]->{id}; |
|
764 |
my $ret; |
|
765 |
$ret = $self->connector->POST("/api/_action/order_transaction/$order_transaction_id/state/$transition"); |
|
766 |
|
|
767 |
my $response_code = $ret->responseCode(); |
|
768 |
die "Request failed, response code was: $response_code\n" . $ret->responseContent() unless $response_code eq '200'; |
|
769 |
|
|
714 | 770 |
} |
715 | 771 |
|
716 | 772 |
sub init_connector { |
Auch abrufbar als: Unified diff
Shopware6: Status Bezahlt benötigt die order_transaction als Aggr.