settingSolver = $settingSolver; $this->orderShopSolver= $orderShopSolver; } public function buildReference(OrderShopInterface $orderShop): string { $complementaryIndex = null; if ($orderShop->getMainOrderShop()) { $complementaryIndex = 0; foreach ($orderShop->getMainOrderShop()->getComplementaryOrderShops() as $complementaryOrder) { if ($this->orderShopSolver->isValid($complementaryOrder)) $complementaryIndex++; } $orderShop = $complementaryOrder->getMainOrderShop(); } switch ($orderShop->getSection()->getCycleType()) { case SectionModel::CYCLE_TYPE_DAY: $reference = $this->buildReferenceCycleDay($orderShop); break; case SectionModel::CYCLE_TYPE_WEEK: $reference = $this->buildReferenceCycleWeek($orderShop,); break; case SectionModel::CYCLE_TYPE_MONTH: $reference = $this->buildReferenceCycleMonth($orderShop); break; case SectionModel::CYCLE_TYPE_YEAR: $reference = $this->buildReferenceCycleYear($orderShop); break; default: $reference = 'C' . $orderShop->getId(); break; } if($complementaryIndex){ $reference = $reference.'C'.$this->numberPad($complementaryIndex, 1); } return $reference; } public function buildReferenceCycleDay(OrderShopInterface $orderShop): string { return $this->getPrefixReference($orderShop) . 'C' . $this->numberPad($orderShop->getCycleId(), 3); } public function buildReferenceCycleWeek(OrderShopInterface $orderShop): string { return $this->getPrefixReference($orderShop) . 'S' . $orderShop->getDistribution()->getCycleNumber() . 'C' . $this->numberPad($orderShop->getCycleId(), 4) . 'A' . $this->formatYear($orderShop->getDistribution()->getYear()); } public function buildReferenceCycleMonth(OrderShopInterface $orderShop): string { return $this->getPrefixReference($orderShop) . 'M' . $orderShop->getDistribution()->getCycleNumber() . 'C' . $this->numberPad($orderShop->getCycleId(), 4) . 'A' . $this->formatYear($orderShop->getDistribution()->getYear()); } public function buildReferenceCycleYear(OrderShopInterface $orderShop): string { return $this->getPrefixReference($orderShop) . 'C' . $this->numberPad($orderShop->getCycleId(), 5) . 'A' . $this->formatYear($orderShop->getDistribution()->getYear()); } public function getPrefixReference(OrderShopInterface $orderShop): string { return ''.$this->settingSolver->getSettingValue( $orderShop->getSection(), SectionSettingDefinition::SETTING_REFERENCE_PREFIX ); } protected function numberPad($number, $length): string { return str_pad($number, $length, "0", STR_PAD_LEFT); } protected function formatYear(int $year):int{ return substr($year, -2); } }