Esempio n. 1
0
File: Sweden.php Progetto: kekos/gs1
 /**
  * Generates a GTIN object from given Entity
  *
  * @param AbstractEntity $entity Entity to generate GTIN for
  * @return Gtin GTIN entity object
  */
 public static function generate(AbstractEntity $entity)
 {
     if ($entity instanceof Product) {
         try {
             $gtin = new Gtin8();
             $gtin->setPart(6, $entity->getCompanyPrefix());
             $gtin->setPart(1, $entity->getSku());
         } catch (ArgumentException $ex) {
             $gtin = new Gtin13();
             $gtin->setPart(9, $entity->getCompanyPrefix());
             $gtin->setPart(3, $entity->getSku());
         }
     } else {
         if ($entity instanceof WeightProduct) {
             $gtin = new Gtin13();
             $weight = self::toFloat($entity->getWeight());
             $decimals = self::getDecimalsCount($weight);
             if ($decimals === 0) {
                 $decimals = 3;
                 $weight .= '.000';
             } else {
                 $decimals = max(1, min(3, $decimals));
             }
             $modulator = self::$weight_modulators[$decimals];
             $weight = substr(str_replace('.', '', $weight), 0, 4);
             $gtin->setPart(2, '2' . $modulator);
             $gtin->setPart(6, $entity->getSku());
             $gtin->setPart(4, $weight);
         } else {
             if ($entity instanceof PriceProduct) {
                 $gtin = new Gtin13();
                 $price = self::toFloat($entity->getPrice());
                 $decimals = self::getDecimalsCount($price);
                 $decimals = max(0, min(2, $decimals));
                 $modulator = self::$price_modulators[$decimals];
                 $price = substr(str_replace('.', '', $price), 0, 4);
                 $gtin->setPart(2, '2' . $modulator);
                 $gtin->setPart(6, $entity->getSku());
                 $gtin->setPart(4, $price);
             } else {
                 if ($entity instanceof Publication) {
                     $gtin = new Gtin13();
                     $price = self::toFloat($entity->getPrice());
                     $decimals = self::getDecimalsCount($price);
                     if ($decimals == 0) {
                         $price = substr($price, 0, 3) . '0';
                     } else {
                         $price = substr(str_replace('.', '', $price), 0, 4);
                     }
                     $gtin->setPart(4, '7388');
                     $gtin->setPart(4, $entity->getSku());
                     $gtin->setPart(4, $price);
                 } else {
                     if ($entity instanceof Coupon) {
                         $gtin = new Gtin13();
                         $value = self::toFloat($entity->getValue());
                         $decimals = self::getDecimalsCount($value);
                         if ($decimals == 0) {
                             $value = substr($value, 0, 3) . '0';
                         } else {
                             $value = substr(str_replace('.', '', $value), 0, 4);
                         }
                         $gtin->setPart(2, '99');
                         $gtin->setPart(6, $entity->getId());
                         $gtin->setPart(4, $value);
                     }
                 }
             }
         }
     }
     return $gtin;
 }