From: Marius Gavrilescu Date: Sat, 5 Mar 2016 18:17:32 +0000 (+0000) Subject: Add a function for cancelling orders X-Git-Tag: 0.000_004~2 X-Git-Url: http://git.ieval.ro/?a=commitdiff_plain;h=5eeddbd0b0c20375cf6d0258ed8cf3b9ef3b7a9b;p=app-web-oof.git Add a function for cancelling orders --- diff --git a/lib/App/Web/Oof.pm b/lib/App/Web/Oof.pm index 3310dd1..2814ad3 100644 --- a/lib/App/Web/Oof.pm +++ b/lib/App/Web/Oof.pm @@ -193,6 +193,25 @@ sub order_app { } } +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");