Skip to content

Commit

Permalink
Améliore le calcul du matériel restant
Browse files Browse the repository at this point in the history
  • Loading branch information
Donov4n committed Jan 24, 2021
1 parent 5c661be commit 5bcbc57
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 16 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Tous les changements notables sur le projet sont documentés dans ce fichier.

Ce projet adhère au principe du [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 0.12.0 (unreleased)
- Améliore le calcul du matériel restant dans les événements.

## 0.11.0 (2021-01-14)

- Met à jour les dépendances du projet.
Expand Down
2 changes: 1 addition & 1 deletion client/dist/js/app.js

Large diffs are not rendered by default.

8 changes: 1 addition & 7 deletions client/src/components/EventMissingMaterials/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,7 @@ export default {

getMissingCount(missingMaterial) {
const { quantity } = missingMaterial.pivot;

const missing = Math.min(
Math.abs(missingMaterial.remaining_quantity),
quantity,
);

return { quantity, missing };
return { quantity, missing: missingMaterial.missing_quantity };
},

displayError(error) {
Expand Down
16 changes: 12 additions & 4 deletions server/src/App/Models/Event.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,12 +221,20 @@ public function getMissingMaterials(int $id): ?array
$eventMaterials = (new Material())->recalcQuantitiesForPeriod(
$event->materials,
$event->start_date,
$event->end_date
$event->end_date,
$id
);

$missingMaterials = array_filter($eventMaterials, function ($eventMaterial) {
return $eventMaterial['remaining_quantity'] < 0;
});
$missingMaterials = [];
foreach ($eventMaterials as $material) {
$material['missing_quantity'] = $material['pivot']['quantity'] - $material['remaining_quantity'];
$material['missing_quantity'] = min($material['missing_quantity'], $material['pivot']['quantity']);
if ($material['missing_quantity'] <= 0) {
continue;
}

$missingMaterials[] = $material;
}

return empty($missingMaterials) ? null : array_values($missingMaterials);
}
Expand Down
2 changes: 1 addition & 1 deletion server/src/App/Models/Material.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ public function recalcQuantitiesForPeriod(
}

$remainingQuantity = (int)$material['stock_quantity'] - (int)$material['out_of_order_quantity'];
$material['remaining_quantity'] = $remainingQuantity - max($quantityPerPeriod);
$material['remaining_quantity'] = max($remainingQuantity - max($quantityPerPeriod), 0);
}

return $data;
Expand Down
3 changes: 2 additions & 1 deletion server/tests/endpoints/EventsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,8 @@ public function testGetMissingMaterials()
'sub_category_id' => 2,
'rental_price' => 25.5,
'stock_quantity' => 2,
'remaining_quantity' => -1,
'remaining_quantity' => 0,
'missing_quantity' => 1,
'out_of_order_quantity' => null,
'replacement_price' => 349.9,
'is_hidden_on_bill' => false,
Expand Down
3 changes: 2 additions & 1 deletion server/tests/models/EventTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,10 @@ public function testGetMissingMaterials(): void

// - Get missing materials of event #1
$result = $this->model->getMissingMaterials(1);
$this->assertNotNull($result);
$this->assertCount(1, $result);
$this->assertEquals('DBXPA2', $result[0]['reference']);
$this->assertEquals(-1, $result[0]['remaining_quantity']);
$this->assertEquals(1, $result[0]['missing_quantity']);
}

public function testGetParks(): void
Expand Down
2 changes: 1 addition & 1 deletion server/tests/models/MaterialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public function testRecalcQuantitiesForPeriod(): void
$data = $getData();
$result = $this->model->recalcQuantitiesForPeriod($data, '2018-12-15', '2018-12-20');
$this->assertCount(7, $result);
foreach ([0, -1, 20, 1, 20] as $index => $expected) {
foreach ([0, 0, 20, 1, 20] as $index => $expected) {
$this->assertEquals($expected, $result[$index]['remaining_quantity']);
}

Expand Down

0 comments on commit 5bcbc57

Please sign in to comment.