trinion_mrp-1.0.x-dev/src/TrinionHelper.php
src/TrinionHelper.php
<?php
namespace Drupal\trinion_mrp;
use Drupal\Core\Database\Connection;
use Drupal\node\Entity\Node;
class TrinionHelper {
/**
* The database connection.
*
* @var \Drupal\Core\Database\Connection
*/
protected $connection;
/**
* Constructs a TrinionHelper object.
*
* @param \Drupal\Core\Database\Connection $connection
* The database connection.
*/
public function __construct(Connection $connection) {
$this->connection = $connection;
}
public function getItemsFromMrpReportForOrder(Node $node, $source) {
$calendar = \Drupal::state()->get('trinion_mrp_proizvodstvenniy_kalendar');
$mrp_start_date = date('Y-m-d', strtotime($node->get('field_tp_data')->getString()));
$mrp_period_length = $node->get('field_mrp_period_length_days')->getString();
$tovar_released_days = [];
foreach ($calendar['days'] as $key => $day) {
if ($mrp_start_date == $day['date']) {
$mrp_start_date_key = $key;
break;
}
}
foreach ($node->get('field_mrp_table') as $table) {
$table = json_decode($table->getString());
$tovar = Node::load($table->tovar_id);
$istochnik_popolneniya = $tovar->get('field_tp_istochnik_popolneniya')->getString();
if ($istochnik_popolneniya == $source) {
foreach ($table->planned_order_released as $period_num => $count) {
if ($count) {
$release_day_num = $mrp_start_date_key + $period_num * $mrp_period_length;
$tovar_released_days[$calendar['days'][$release_day_num]['date']][] = [
'tovar_id' => $table->tovar_id,
'unit' => $table->unit,
'harakteristika_tid' => $table->harakteristika_tid,
'count' => $count,
'day_num' => $release_day_num,
];
}
}
}
}
$tovar_released_days_vendors = [];
foreach ($tovar_released_days as $day => $tovari) {
foreach ($tovari as $release) {
$tovar = Node::load($release['tovar_id']);
if ($source == 1) {
$destination_object = $tovar->get('field_tp_postavschik')->getString();
}
else
$destination_object = $tovar->get('field_mrp_rabochiy_centr')->getString();
if ($destination_object) {
for ($i = 0; $i < 8; $i++) {
if (!empty($calendar['days'][$release['day_num'] - $i]['w_start'])) {
$week_start = $calendar['days'][$release['day_num'] - $i];
$tovar_released_days_vendors[$week_start['date']][$destination_object][] = $release;
break;
}
}
}
else {
\Drupal::messenger()->addError('Vendor is not set for product ' . $tovar->label());
}
}
}
return $tovar_released_days_vendors;
}
public function getMrpRalatedOrders(Node $node, $type) {
$query = \Drupal::entityQuery('node')
->condition('type', $type)
->condition('field_mrp_report', $node->id());
$res = $query->accessCheck()->execute();
return array_values($res);
}
}
