jumiaConfigRepository = $jumiaConfigRepository; $this->jumiaOrderRepository = $jumiaOrderRepository; $this->userRepository = $userRepository; $this->entityManager = $entityManager; $this->jumia = new Jumia(); } protected function configure() { $this ->setName('app:getlastorders') ->setDescription('Get last orders') ->addArgument('user_id', InputArgument::REQUIRED, 'The user Identifier') ->addArgument('after_date', InputArgument::REQUIRED, 'The number of days from where to get the last orders'); } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $limit = 1000; $result = ['success' => false, 'message' => "Problem API... ", 'template' => '']; $jumiaConfig = $this->entityManager->getRepository(JumiaConfig::class)->findOneByParent($this->userRepository->findOneById($input->getArgument('user_id'))); if (!$jumiaConfig){ $result = ['success' => false, 'message' => 'Problem in configuration' ]; $io->error(sprintf('Problem in configuration 01 ')); return 0; } $days_number = $input->getArgument('after_date'); $afterDate = date('Y-m-d', strtotime(date('Y-m-d')."-".$days_number. " day")); $data = $this->jumia->getOrders($jumiaConfig, $afterDate, '', $limit=1000, $Offset=0); if ($data["success"] ) { // get all data in array $allOrdersInarray = $this->jumiaOrderRepository->getArrayOfOrdersByParent($this->userRepository->findOneById($input->getArgument('user_id'))); // end get Data $founded = count($data['Orders']['Orders']['Order']) ; $itemCount = 0; $itemExisted = 0; if(count($data['Orders']['Orders']['Order']) > 1){ foreach ($data['Orders']['Orders']['Order'] as $order){ if(!in_array($order["OrderId"],$allOrdersInarray)){ $jumiaOrder = $this->addItem($order); $this->entityManager->persist($jumiaOrder); $itemCount++; } else { $orderExsisted = $this->jumiaOrderRepository->findOneBy(array('OrderId' => $order["OrderId"])); $jumiaOrder = $this->updateItem($orderExsisted,$order); $this->entityManager->persist($jumiaOrder); $itemExisted++; } } } $this->entityManager->flush(); if ( is_array($data['Orders']['Orders']) ){ $totalCount = $data['TotalCount']; $i = 1; do{ $offset = $limit * $i; $newPage = $this->jumia->getOrders($jumiaConfig,$afterDate, '', $limit, $offset); if (isset($newPage['Orders']['Orders']['Order'])){ $founded = $founded + count($newPage['Orders']['Orders']['Order']) ; foreach ($newPage['Orders']['Orders']['Order'] as $order){ if (!in_array($order["OrderId"],$allOrdersInarray) /*$orderExsisted*/){ $jumiaOrder = $this->addItem($order); $this->entityManager->persist($jumiaOrder); $itemCount++; }else{ $orderExsisted = $this->entityManager->getRepository(JumiaOrder::class)->findOneBy(array('OrderId' => $order["OrderId"])); $jumiaOrder = $this->updateItem($orderExsisted,$order); $this->entityManager->persist($jumiaOrder); $itemExisted++; } } $i++; } }while( is_array($newPage['Orders']['Orders'])); } $result = ['founded'=>$founded,'existed'=>$itemExisted,'imported'=>$itemCount]; $plan = new JumiaPlaning(); $plan->setParent($this->getUser()); $plan->setEntity('JumiaOrder'); $plan->setAction('GetOrders'); $plan->setStatus(true); $plan->setQty($itemCount); $plan->setExisted($itemExisted); $plan->setUpdatedAt(); $plan->setFounded($founded); $createdAfter = new \DateTime($afterDate); $plan->setCreatedAfter($createdAfter); $this->entityManager->persist($plan); $this->entityManager->flush(); $result = ['success' => true, 'message' => "Orders status successfully ! ",]; $io->success(sprintf('Orders status sucess !')); $io->success(sprintf('"%d" Orders founded !', $founded)); $io->success(sprintf('"%d" Orders already exist !', $itemExisted)); $io->success(sprintf('"%d" Orders imported !', $itemCount)); }else{ $result = ['success' => false, 'message' => 'Problem in configuration' ]; $io->error(sprintf('Problem in configuration')); } return 0; } function addItem($order){ $jumiaOrder = new JumiaOrder(); $jumiaOrder->setParent($this->getUser()); $jumiaOrder->setOrderId($order["OrderId"]); $jumiaOrder->setCustomerFirstName($order["CustomerFirstName"]); $jumiaOrder->setCustomerLastName($order["CustomerLastName"]); $jumiaOrder->setOrderNumber($order["OrderNumber"]); $jumiaOrder->setPaymentMethod($order["PaymentMethod"]); $jumiaOrder->setRemarks($order["Remarks"]); $jumiaOrder->setDeliveryInfo($order["DeliveryInfo"]); $jumiaOrder->setItemsCount($order["ItemsCount"]); $jumiaOrder->setPrice($order["Price"]); $jumiaOrder->setVoucherCode($order["VoucherCode"]); // date $CreatedAt = new \DateTime($order["CreatedAt"]); $UpdatedAt = new \DateTime($order["UpdatedAt"]); $AddressUpdatedAt = new \DateTime($order["AddressUpdatedAt"]); $jumiaOrder->setCreatedAt($CreatedAt); $jumiaOrder->setUpdatedAt($UpdatedAt); //$jumiaOrder->setAddressUpdatedAt($AddressUpdatedAt); $jumiaOrder->setFirstName($order["AddressBilling"]["FirstName"]); $jumiaOrder->setLastName($order["AddressBilling"]["LastName"]); $jumiaOrder->setPhone($order["AddressBilling"]["Phone"]); $jumiaOrder->setPhoneTwo($order["AddressBilling"]["Phone2"]); $jumiaOrder->setCustomerEmail($order["AddressBilling"]["CustomerEmail"]); $jumiaOrder->setCity($order["AddressBilling"]["City"]); $jumiaOrder->setWard($order["AddressBilling"]["Ward"]); $jumiaOrder->setRegion($order["AddressBilling"]["Region"]); $jumiaOrder->setPostCode($order["AddressBilling"]["PostCode"]); $jumiaOrder->setCountry($order["AddressBilling"]["Country"]); if (is_array($order["Statuses"]["Status"])){ $jumiaOrder->setStatuses(implode(' > ', $order["Statuses"]["Status"])); }else{ $jumiaOrder->setStatuses($order["Statuses"]["Status"]); } $address = $order["AddressBilling"]["Address1"]. ",".$order["AddressBilling"]["Address2"]. ",".$order["AddressBilling"]["Address3"]. ",".$order["AddressBilling"]["Address4"]. ",".$order["AddressBilling"]["Address5"]; $jumiaOrder->setAddress($address); return $jumiaOrder; } function updateItem(JumiaOrder $jumiaOrder, $order){ $jumiaOrder->setParent($this->userRepository->findOneById(2)); $jumiaOrder->setOrderId($order["OrderId"]); $jumiaOrder->setCustomerFirstName($order["CustomerFirstName"]); $jumiaOrder->setCustomerLastName($order["CustomerLastName"]); $jumiaOrder->setOrderNumber($order["OrderNumber"]); $jumiaOrder->setPaymentMethod($order["PaymentMethod"]); $jumiaOrder->setRemarks($order["Remarks"]); $jumiaOrder->setDeliveryInfo($order["DeliveryInfo"]); $jumiaOrder->setItemsCount($order["ItemsCount"]); $jumiaOrder->setPrice($order["Price"]); $jumiaOrder->setVoucherCode($order["VoucherCode"]); // date $CreatedAt = new \DateTime($order["CreatedAt"]); $UpdatedAt = new \DateTime($order["UpdatedAt"]); $AddressUpdatedAt = new \DateTime($order["AddressUpdatedAt"]); $jumiaOrder->setCreatedAt($CreatedAt); $jumiaOrder->setUpdatedAt($UpdatedAt); //$jumiaOrder->setAddressUpdatedAt($AddressUpdatedAt); $jumiaOrder->setFirstName($order["AddressBilling"]["FirstName"]); $jumiaOrder->setLastName($order["AddressBilling"]["LastName"]); $jumiaOrder->setPhone($order["AddressBilling"]["Phone"]); $jumiaOrder->setPhoneTwo($order["AddressBilling"]["Phone2"]); $jumiaOrder->setCustomerEmail($order["AddressBilling"]["CustomerEmail"]); $jumiaOrder->setCity($order["AddressBilling"]["City"]); $jumiaOrder->setWard($order["AddressBilling"]["Ward"]); $jumiaOrder->setRegion($order["AddressBilling"]["Region"]); $jumiaOrder->setPostCode($order["AddressBilling"]["PostCode"]); $jumiaOrder->setCountry($order["AddressBilling"]["Country"]); if (is_array($order["Statuses"]["Status"])){ $jumiaOrder->setStatuses(implode(' > ', $order["Statuses"]["Status"])); }else{ $jumiaOrder->setStatuses($order["Statuses"]["Status"]); } $address = $order["AddressBilling"]["Address1"]. ",".$order["AddressBilling"]["Address2"]. ",".$order["AddressBilling"]["Address3"]. ",".$order["AddressBilling"]["Address4"]. ",".$order["AddressBilling"]["Address5"]; $jumiaOrder->setAddress($address); return $jumiaOrder; } }