X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FApp%2FWeb%2FOof.pm;h=0bd08dfc84eecbc60c99aefd8afd4e50c4090dcf;hb=b11f7d46cd706bd6a5d358f92bd7d0ee74a6f10b;hp=3310dd1e6bbdaa69792723dd503371b36dbe9ba4;hpb=8bbff1bcc40acc652541fcda101bda44de264921;p=app-web-oof.git diff --git a/lib/App/Web/Oof.pm b/lib/App/Web/Oof.pm index 3310dd1..0bd08df 100644 --- a/lib/App/Web/Oof.pm +++ b/lib/App/Web/Oof.pm @@ -6,7 +6,7 @@ use warnings; use utf8; use parent qw/Plack::Component/; -our $VERSION = '0.000_003'; +our $VERSION = '0.000_004'; use DBIx::Simple; use File::Slurp; @@ -164,7 +164,8 @@ sub order_app { 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); @@ -193,6 +194,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");