public function updateAction() { if (!$this->checkAccess()) { return new JsonResponse(['fail' => 'Wrong API key']); } $em = $this->getDoctrine()->getManager(); $request = $this->container->get('request'); $productName = $request->get('name'); if (empty($productName)) { return new JsonResponse(['fail' => 'Product name must be defined']); } $productCustomerAbbr = $request->get('customer_abbr'); $customer = $em->getRepository('CoreBundle:Customer')->findOneBy(['abbr' => $productCustomerAbbr]); if (empty($customer)) { return new JsonResponse(['fail' => 'Customer not found']); } $product = $em->getRepository('CoreBundle:Product')->findBy(['customer' => $customer, 'name' => $productName]); if (empty($product)) { if (!$request->get('_force')) { return new JsonResponse(['fail' => 'Product does not exist. If you want to create new one use _force parameter.']); } $product = new Entity\Product(); } $product->setName($productName); $product->setDescription($request->get('description')); $product->setCustomer($customer); if ($request->get('status')) { $status = $em->getRepository('CoreBundle:ProductStatus')->findOneBy(['code' => $request->get('status')]); } if (empty($status)) { $status = $em->getRepository('CoreBundle:ProductStatus')->findOneBy(['code' => Entity\ProductStatus::TYPE_ON_CHECKING]); } $product->setStatus($status); if ($request->get('origin_countries')) { foreach ((array) $request->get('origin_countries') as $originCountyCode) { $country = $em->getRepository('CoreBundle:Country')->findOneBy(['code' => $originCountyCode]); } if (!empty($country)) { $product->addOriginCountry($country); } } if ($request->get('net_weight') && $request->get('net_weight_uom')) { $netWeightUom = $em->getRepository('CoreBundle:UOM')->findOneBy(['name' => $request->get('net_weight_uom')]); $netWeight = $request->get('net_weight'); if (!empty($netWeightUom) && !empty($netWeight)) { $product->setNetWeight($netWeight); $product->setNetWeightUOM($netWeightUOM); } } if ($request->get('gross_weight') && $request->get('gross_weight_uom')) { $grossWeightUom = $em->getRepository('CoreBundle:UOM')->findOneBy(['name' => $request->get('gross_weight_uom')]); $grossWeight = $request->get('gross_weight'); if (!empty($grossWeightUom) && !empty($grossWeight)) { $product->setGrossWeight($grossWeight); $product->setGrossWeightUOM($grossWeightUOM); } } if ($request->get('customer_description')) { $product->setCustomerDescription($request->get('customer_description')); } if ($request->get('price')) { $product->setPrice($price); } if ($request->get('currency')) { $currency = $em->getRepository('CoreBundle:Currency')->findOneBy(['codeAlpha3' => $request->get('currency')]); $product->setCurrency($currency); } for ($i = 1; $i <= 10; $i++) { if (!is_null($request->get('custom_date_' . $i))) { $setterMethod = 'setCustomDate' . $i; try { $date = new \DateTime($request->get('custom_date_' . $i)); $product->{$setterMethod}($date); } catch (\Exception $e) { // Skip error } } if (!is_null($request->get('custom_text_' . $i))) { $setterMethod = 'setCustomText' . $i; $product->{$setterMethod}($request->get('custom_text_' . $i)); } if (!is_null($request->get('custom_number_' . $i))) { $setterMethod = 'setCustomNumber' . $i; $product->{$setterMethod}($request->get('custom_number_' . $i)); } } if (!is_null($request->get('extra_data'))) { $product->setExtraData(json_encode($request->get('extra_data'))); } $customsPointDataArray = $request->get('customs_point_data'); if (!empty($customsPointDataRaw) && !empty($customsPointDataRaw['code'])) { $customsPoint = $em->getRepository('CoreBundle:CustomsPoint')->findOneBy(['code' => $customsPointDataRaw['code']]); if (!empty($customsPoint)) { $customsPointData = $product->getCustomsPointDataByCustomsPoint($customsPoint); if (empty($customsPointData)) { $customsPointData = new Entity\ProductCustomsPoint(); $customsPointData->setCustomsPoint($customsPoint); $customsPointData->setProduct($product); } if (isset($customsPointDataRaw['eccn'])) { $customsPointData->setEccn($customsPointDataRaw['eccn']); } if (isset($customsPointDataRaw['hscode'])) { $customsPointData->setEccn($customsPointDataRaw['hscode']); } if (isset($customsPointDataRaw['tnved'])) { $customsPointData->setTnved($customsPointDataRaw['tnved']); } if (isset($customsPointDataRaw['status'])) { $status = $em->getRepository('CoreBundle:ProductStatus')->findOneBy(['code' => $customsPointDataRaw['status']]); $customsPointData->setStatus($status); } if (isset($customsPointDataRaw['description_ccd'])) { $customsPointData->setDescriptionCCD($customsPointDataRaw['description_ccd']); } if (isset($customsPointDataRaw['manufacturer'])) { $customsPointData->setManufacturer($customsPointDataRaw['manufacturer']); } for ($i = 1; $i <= 10; $i++) { if ($i < 6) { if (!is_null($customsPointDataRaw['custom_date_' . $i])) { $setterMethod = 'setCustomDate' . $i; try { $date = new \DateTime($customsPointDataRaw['custom_date_' . $i]); $customsPointData->{$setterMethod}($date); } catch (\Exception $e) { // Skip error } } } if (!is_null($customsPointDataRaw['custom_text_' . $i])) { $setterMethod = 'setCustomText' . $i; $customsPointData->{$setterMethod}($customsPointDataRaw['custom_text_' . $i]); } if (!is_null($customsPointDataRaw['custom_number_' . $i])) { $setterMethod = 'setCustomNumber' . $i; $customsPointData->{$setterMethod}($customsPointDataRaw['custom_number_' . $i]); } } $em->persist($customsPointData); } } $em->persist($product); $em->flush(); return new JsonResponse(['success' => $this->exportProduct($product)]); }