diff --git a/src/Command/CreateJOTestDataCommand.php b/src/Command/CreateJOTestDataCommand.php new file mode 100644 index 00000000..7aafe444 --- /dev/null +++ b/src/Command/CreateJOTestDataCommand.php @@ -0,0 +1,173 @@ +em = $em; + + parent::__construct(); + } + + protected function configure() + { + $this->setName('joborder:create_testdata') + ->setDescription('Create JO test data, given a rider id.') + ->setHelp('Create JO test data, given a rider id.') + ->addArgument('rider_id', InputArgument::REQUIRED, 'Rider id.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $rider_id = $input->getArgument('rider_id'); + + $rider = $this->em->getRepository(Rider::class)->find($rider_id); + + // get customer vehicles where plate number is not null + $cv_query = $this->em->createQuery('SELECT cv FROM App\Entity\CustomerVehicle cv WHERE cv.plate_number is not null'); + $cv_results = $cv_query->getResult(); + + // get the first customer vehicle + $cv = current($cv_results); + + // get batteries + $battery_results = $this->em->getRepository(Battery::class)->findAll(); + + // get the first battery + $battery = current($battery_results); + + error_log($cv->getPlateNumber()); + error_log($battery->getID()); + + if (empty($rider)) + { + error_log('Rider not found.'); + } + else + { + // get current date + $current_date = new DateTime(); + + // for this month JO + $current_year = $current_date->format('Y'); + $current_month = $current_date->format('M'); + + // for last month JO + $date_interval = new DateInterval('P1M'); + $last_month_date = $current_date->sub($date_interval); + + $last_month_year = $last_month_date->format('Y'); + $last_month_month = $last_month_date->format('M'); + + $time_schedule = $current_date->format('h:i A'); + + $this->createJobOrders($rider, $cv, $battery, $last_month_year, $last_month_month, $time_schedule); + $this->createJobOrders($rider, $cv, $battery, $current_year, $current_month, $time_schedule); + } + + return 0; + } + + protected function createJobOrders(Rider $rider, CustomerVehicle $cv, Battery $battery, $year, $month, $time) + { + // insert 15 JOs for last month + for ($i = 1; $i <= 15; $i++) + { + $jo = new JobOrder(); + + // set customer data + $jo->setCustomerVehicle($cv); + $jo->setCustomer($cv->getCustomer()); + + // set hub and rider data + $jo->setRider($rider); + $jo->setHub($rider->getHub()); + + // set JO details + $point = new Point(121.0223, 14.6091); + $s_type = CMBServiceType::BATTERY_REPLACEMENT_NEW; + $source = TransactionOrigin::CALL; + $advance_order = true; + $warranty_class = WarrantyClass::WTY_PRIVATE; + $status = JOStatus::FULFILLED; + $delivery_address = '#1234 Moogle Lane'; + $mode_of_payment = ModeOfPayment::CASH; + + // set invoice details + $invoice = new Invoice(); + $invoice_item = new InvoiceItem(); + + // set invoice item details + $invoice_item->setBattery($battery) + ->setTitle($battery->getModel()->getName() . ' ' . $battery->getSize()->getName()) + ->setQuantity(1) + ->setPrice($battery->getSellingPrice()) + ->setInvoice($invoice); + + $invoice->addItem($invoice_item); + + $this->em->persist($invoice_item); + + // set invoice details + $invoice->setTotalPrice($battery->getSellingPrice()) + ->setStatus(InvoiceStatus::DRAFT) + ->setVATExclusivePrice($battery->getSellingPrice()) + ->setDiscount(0.0) + ->setTradeIn(0.0) + ->setVAT(0.00); + + $this->em->persist($invoice); + + $jo->setInvoice($invoice); + + // for last month + $date_schedule_date = $i . ' ' . $month . ' ' . $year . ' ' . $time; + error_log('Adding JO with date schedule ' . $date_schedule_date); + $date_schedule = DateTime::createFromFormat("d M Y h:i A", $date_schedule_date); + + $jo->setDateSchedule($date_schedule) + ->setCoordinates($point) + ->setAdvanceOrder($advance_order) + ->setServiceType($s_type) + ->setWarrantyClass($warranty_class) + ->setSource($source) + ->setStatus($status) + ->setDeliveryAddress($delivery_address); + + $this->em->persist($jo); + } + + $this->em->flush(); + + } +}