my $req = Plack::Request->new($env);
my ($id) = $env->{PATH_INFO} =~ m,^/([0-9A-F]+),;
if ($id) {
- my $total = $db{$$}->select(orders => 'total', {id => $id})->list;
+ my $total = $db{$$}->select(orders => 'total', {id => $id})->list or
+ return [500, ['Content-type', 'text/plain'], ['Order not found']];
$tree->fid('orderid')->replace_content($id);
$tree->look_down(name => 'order')->attr(value => $id);
$tree->fid('total')->replace_content(stringify_money $total);
}
}
+sub cancel {
+ my ($order) = @_;
+ $db{$$} //= DBIx::Simple->connect($ENV{OOF_DSN} // 'dbi:Pg:');
+ $order = $db{$$}->select(orders => '*', {id => $order})->hash;
+ my $products = decode_json $order->{products};
+ $db{$$}->begin_work;
+ try {
+ for my $prod (@$products) {
+ my $stock = $db{$$}->select(products => 'stock', {product => $prod->{product}})->list;
+ $db{$$}->update(products => {stock => $stock + $prod->{quantity}}, {product => $prod->{product}});
+ }
+ $db{$$}->delete(orders => {id => $order->{id}});
+ $db{$$}->commit;
+ } catch {
+ $db{$$}->rollback;
+ die $_
+ }
+}
+
sub details_list_element {
my ($data, $li) = @_;
$li->find('a')->attr(href => "/$data");