Add a function for cancelling orders
authorMarius Gavrilescu <marius@ieval.ro>
Sat, 5 Mar 2016 18:17:32 +0000 (18:17 +0000)
committerMarius Gavrilescu <marius@ieval.ro>
Sat, 5 Mar 2016 18:17:32 +0000 (18:17 +0000)
lib/App/Web/Oof.pm

index 3310dd1e6bbdaa69792723dd503371b36dbe9ba4..2814ad3760b879b85193982019d69e91cb2b79e1 100644 (file)
@@ -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");
This page took 0.011489 seconds and 4 git commands to generate.