creating json file from database - php

I need to create this json in the following format
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "Product 1",
"quantity": "1",
"price": "5.00"
},
{
"productName": "Product 2",
"quantity": "2",
"price": "24.00"
},
{
"productName": "Product 3",
"quantity": "1",
"price": "6.50"
}
]
},
{
"orderId": "2",
"orderDate": "2/06/2021",
"products": [
{
"productName": "Product 1",
"quantity": "1",
"price": "3.00"
},
{
"productName": "Product 2",
"quantity": "1",
"price": "11.50"
}
]
},
{
"orderId": "3",
"orderDate": "03/05/2021",
"products": [
{
"productName": "Product 1",
"quantity": "1",
"price": "3.00"
},
{
"productName": "Product 2",
"quantity": "1",
"price": "11.50"
}
]
}
]
}
This is my code that I use to retrive the information from the database
$stmt = $con->prepare("SELECT OrderID, OrderDate, ProductName, ProductQty, ProductPrice FROM Orders where CustomerID = ?");
$stmt->bind_param("s", $CustomerID);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($OrderID, $OrderDate, $ProductName, $ProductQty, $ProductPrice);
while($stmt->fetch()) {
$message[] = array(
"status" => true,
"message" => "",
"orders" => array(
array(
"orderId" => "$OrderID",
"orderDate" => "$OrderDate",
"products" => array(
array(
"productName" => "$ProductName",
"quantity" => "$ProductQty",
"price" => "$ProductPrice"
),
)
)
)
);
}
$json = $message;
header('content-type: application/json');
echo json_encode($json);
This is how the information from the database displays. I do not know how to show the information about the products correctly. Can anyone show me how to do it in the format that I require in php? Thanks in advance for any help.
[
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "620",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "240",
"quantity": "1",
"price": "5.00"
},
{
"productName": "270",
"quantity": "1",
"price": "10.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "30",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "280",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "610",
"quantity": "1",
"price": "5.00"
}
]
}
]
}
]

You are repeating the orders structure which you shouldn't. That's why you get the wrong structure. This is what you should do instead (your code, modified):
// specify your return response array only once
$message = array(
"status" => true,
"message" => "",
"orders" => array();
);
$stmt = $con->prepare("SELECT OrderID, OrderDate, ProductName, ProductQty, ProductPrice FROM Orders where CustomerID = ?");
$stmt->bind_param("s", $CustomerID);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($OrderID, $OrderDate, $ProductName, $ProductQty, $ProductPrice);
while($stmt->fetch()) {
// and fill its "orders" member with your orders list
$message["orders"][] = array(
"orderId" => "$OrderID",
"orderDate" => "$OrderDate",
"products" => array(
array(
"productName" => "$ProductName",
"quantity" => "$ProductQty",
"price" => "$ProductPrice"
),
)
);
}
$json = $message;
header('content-type: application/json');
echo json_encode($json);

You can try like below
const data = [
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "620",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "240",
"quantity": "1",
"price": "5.00"
},
{
"productName": "270",
"quantity": "1",
"price": "10.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "30",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "280",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": true,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "610",
"quantity": "1",
"price": "5.00"
}
]
}
]
},
{
"status": false,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "800",
"quantity": "50",
"price": "5.00"
}
]
}
]
},
{
"status": false,
"message": "",
"orders": [
{
"orderId": "1",
"orderDate": "1/06/2021",
"products": [
{
"productName": "1800",
"quantity": "50",
"price": "5.00"
}
]
}
]
}
];
const resutl = data.reduce((acc, cur) => {
const key = cur.status ? "successItems" : "failureItems";
if (acc[key]) {
return {
...acc,
[key]: {
status: cur.status,
messgae: '',
orders: [
...acc[key].orders,
...cur.orders
]
}
}
} else {
return {
...acc,
[key]: {
status: cur.status,
messgae: '',
orders: [
...cur.orders
]
}
}
}
}, {});
console.log('resutl', resutl);
console.log('resutl', Object.values(resutl));

Related

MongoDB Aggregation in nested collection data

In a collection I'm saving all the Store wise transactions and there is a key named "items" inside all the documents which contains all the items of a particular sale.
Now I've to perform aggregation onto it and send the data somewhere else.
Below I've given the collection data
[{
"_id": {
"$oid": "63ee26bcb64550cbb20de158"
},
"employee": "1",
"custId": "6357cb852c61064d53040ff2",
"store_code": "BAN-01",
"store_no": "7",
"shift": "Second",
"employee_role": "POS Store Manager",
"store_name": "175",
"customer_name": "Vivek Kumar",
"customer_email": "vivek.kumar98705#gmail.com",
"customer_phone": "9958137221",
"counter_code": "175-Counter-01",
"deposit_amount": "100",
"emp_code": "TCP004",
"items": "[{\"internalid\":2969,\"type\":\"InvtPart\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"201450\",\"price\":\"252.50\",\"qty\":\"1\",\"itemamount\":\"265.13\",\"mrp\":\"252.50\",\"discount\":\"0.00\",\"tax\":\"12.63\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: BETADINE GARGLE 100ML\",\"item_upc_code\":\"5285239186\",\"item_hsn_code\":\"30041090\",\"uom\":\"EA\",\"batchDetails\":{\"#PJ0672\":{\"batch_expiry\":\"4/4/2025\",\"qty\":1}}},{\"internalid\":2963,\"type\":\"InvtPart\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"225124\",\"price\":\"7.00\",\"qty\":\"15\",\"itemamount\":\"110.25\",\"mrp\":\"7.00\",\"discount\":\"0.00\",\"tax\":\"5.25\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: ZINCOVIT 15TAB\",\"item_upc_code\":\"8035476959\",\"item_hsn_code\":\"21069099\",\"uom\":\"SH(15)\",\"batchDetails\":{\"#ZVT21203\":{\"batch_expiry\":\"4/4/2025\",\"qty\":15}}},{\"internalid\":3067,\"type\":\"InvtPart\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"315043\",\"price\":\"1.70\",\"qty\":\"45\",\"itemamount\":\"80.33\",\"mrp\":\"1.70\",\"discount\":\"0.00\",\"tax\":\"3.83\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: FOLVITE 45TAB\",\"item_upc_code\":\"9312066071\",\"item_hsn_code\":\"30045039\",\"uom\":\"SH(45)\",\"batchDetails\":{\"#GH3735\":{\"batch_expiry\":\"4/4/2025\",\"qty\":45}}},{\"internalid\":3069,\"type\":\"InvtPart\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"204009\",\"price\":\"75.44\",\"qty\":\"10\",\"itemamount\":\"792.12\",\"mrp\":\"75.44\",\"discount\":\"0.00\",\"tax\":\"37.72\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: DUPHASTON 10TAB\",\"item_upc_code\":\"3444014334\",\"item_hsn_code\":\"30043919\",\"uom\":\"SH(10)\",\"batchDetails\":{\"#KAVA2050\":{\"batch_expiry\":\"4/4/2025\",\"qty\":10}}}]",
"total_amount": 1247.83,
"total_tax": 59.43,
"total_discount": 0,
"subTotal": 1188.4,
"payment_details": [
[
{
"paymentMethod": "cash",
"amount_paid": 1247.83,
"transaction_date": "2/16/2023 4:58:19 pm",
"payment_status": "Success",
"transaction_id": "test123"
}
]
],
"auth_id": "master_ad14cca679b44ef1d78a3e_master",
"created_by": "master_ad14cca679b44ef1d78a3e_master",
"updated_by": "master_ad14cca679b44ef1d78a3e_master",
"invoice_no": "WFINV#1",
"updated_at": {
"$date": {
"$numberLong": "1676551868017"
}
},
"created_at": {
"$date": {
"$numberLong": "1676551868017"
}
}
},
{
"_id": {
"$oid": "63ee2778b64550cbb20de17c"
},
"employee": "1",
"custId": "6357cb852c61064d53040ff2",
"store_code": "BAN-01",
"store_no": "7",
"shift": "Second",
"employee_role": "POS Store Manager",
"store_name": "175",
"customer_name": "Vivek Kumar",
"customer_email": "vivek.kumar98705#gmail.com",
"customer_phone": "9958137221",
"counter_code": "175-Counter-01",
"deposit_amount": "100",
"emp_code": "TCP004",
"items": "[{\"internalid\":\"undefined\",\"type\":\"undefined\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"\",\"price\":\"2.30\",\"qty\":\"20\",\"itemamount\":\"48.30\",\"mrp\":\"2.30\",\"discount\":\"0.00\",\"tax\":\"2.3\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: COMBIFLAM 20TAB\",\"item_upc_code\":\"UPC000004\",\"item_hsn_code\":\"30049063\",\"uom\":\"SH(20)\",\"batchDetails\":{\"#1022563\":{\"batch_expiry\":\"4/4/2025\",\"qty\":20}}},{\"internalid\":\"undefined\",\"type\":\"undefined\",\"islotitem\":true,\"isserialitem\":false,\"isspecialorderitem\":false,\"itemName\":\"\",\"price\":\"93.00\",\"qty\":\"1\",\"itemamount\":\"97.65\",\"mrp\":\"93.00\",\"discount\":\"0.00\",\"tax\":\"4.65\",\"promotion\":\"NA\",\"item_display_name\":\"UOM: FEBREX-PLUS DS SYP 60ML\",\"item_upc_code\":\"1036121752\",\"item_hsn_code\":\"30049093\",\"uom\":\"EA\",\"batchDetails\":{\"#22430041\":{\"batch_expiry\":\"4/4/2025\",\"qty\":1}}}]",
"total_amount": 145.95,
"total_tax": 6.95,
"total_discount": 0,
"subTotal": 139,
"payment_details": [
[
{
"paymentMethod": "cash",
"amount_paid": 145.95,
"transaction_date": "2/16/2023 4:54:25 pm",
"payment_status": "Success",
"transaction_id": "test123"
}
]
],
"auth_id": "master_ad14cca679b44ef1d78a3e_master",
"created_by": "master_ad14cca679b44ef1d78a3e_master",
"updated_by": "master_ad14cca679b44ef1d78a3e_master",
"invoice_no": "WFINV#4",
"updated_at": {
"$date": {
"$numberLong": "1676552056047"
}
},
"created_at": {
"$date": {
"$numberLong": "1676552056047"
}
}
}
]
I Tried the below aggregation but it didn't work.
$data = \DB::collection("online_orders")->raw(function($collection) use ($requestData) {
return $collection->aggregate([
[
'$match' => [
'created_at' => [
'$gte' => $requestData['from'],
'$lte' => $requestData['to']
]
],
'$group' => [
'_id' => [
'store_code' => '$store_code',
'sku' => '$items.itemName'
],
'items' => '$items',
'sold_qty' => [ '$sum' => '$items.qty' ]
]
]
]);
});
After Pipeline
Expected Result :
Result Keys relation to the collection keys just for reference**
sku -> itemName
sold_qty -> how many time that particular item has been sold store code wise
return_qty -> curerntly leave it as 0
total_amount -> total amount of particular item sold
uom -> uom
batchNo -> batchDetails key is batchNo
Quantity -> batchDetails -- qty
{
"order_type": "CS",
"data": [
{
"store_code": "175",
"cash_sale_details": [
{
"sku": "321405",
"sold_qty": "5",
"return_qty": "0",
"total_amount": "69.83",
"uom": "EA",
"batchDetails": [
{
"batchNo": "LOT121",
"Quantity": 5
}
]
},
{
"sku": "223327",
"sold_qty": "5",
"return_qty": "0",
"total_amount": "488.25",
"uom": "EA",
"batchDetails": [
{
"batchNo": "22430041",
"Quantity": 5
}
]
},
{
"sku": "222045",
"sold_qty": "5",
"return_qty": "0",
"total_amount": "842.89",
"uom": "EA",
"batchDetails": [
{
"batchNo": "B2329D164",
"Quantity": 5
}
]
},
{
"sku": "341106",
"sold_qty": "5",
"return_qty": "0",
"total_amount": "623.44",
"uom": "EA",
"batchDetails": [
{
"batchNo": "AS2211",
"Quantity": 5
}
]
}
]
}
]
}
Thanks

PNR generating issue using amadeus flight create orders API

I want to create booking and generate PNR using amadeus flight booking API.
I have follow 3 step to create booking and generate PNR
Flight Offers Search API using bellow API
https://developers.amadeus.com/self-service/category/air/api-doc/flight-offers-search/api-reference
Flight Offers Price API using bellow API
https://developers.amadeus.com/self-service/category/air/api-doc/flight-offers-price/api-reference
Flight Create Orders API using bellow API
https://developers.amadeus.com/self-service/category/air/api-doc/flight-create-orders/api-reference
When i serach with city with one way thip and choose specific offer and puting passenger details
to create booking and generat PNR. then PNR will generate successfully
i am using bellow API to generate PNR
https://developers.amadeus.com/self-service/category/air/api-doc/flight-create-orders/api-reference
this is my request json
"data": {
"type": "flight-order",
"flightOffers": [
{
"type": "flight-offer",
"id": "5",
"source": "GDS",
"instantTicketingRequired": false,
"nonHomogeneous": false,
"paymentCardRequired": false,
"lastTicketingDate": "2021-07-23",
"itineraries": [
{
"segments": [
{
"departure": {
"iataCode": "JFK",
"terminal": "5",
"at": "2021-07-30T09:20:00"
},
"arrival": {
"iataCode": "FLL",
"terminal": "3",
"at": "2021-07-30T12:30:00"
},
"carrierCode": "B6",
"number": "201",
"aircraft": {
"code": "320"
},
"operating": {
"carrierCode": "B6"
},
"duration": "PT3H10M",
"id": "91",
"numberOfStops": 0,
"co2Emissions": [
{
"weight": 155,
"weightUnit": "KG",
"cabin": "ECONOMY"
}
]
},
{
"departure": {
"iataCode": "FLL",
"terminal": "3",
"at": "2021-07-30T16:25:00"
},
"arrival": {
"iataCode": "LAX",
"terminal": "5",
"at": "2021-07-30T18:49:00"
},
"carrierCode": "B6",
"number": "1301",
"aircraft": {
"code": "32S"
},
"operating": {
"carrierCode": "B6"
},
"duration": "PT5H24M",
"id": "92",
"numberOfStops": 0,
"co2Emissions": [
{
"weight": 253,
"weightUnit": "KG",
"cabin": "ECONOMY"
}
]
}
],
"duration": "PT12H29M"
}
],
"price": {
"currency": "USD",
"total": "276.20",
"base": "235.35",
"fees": [
{
"amount": "0.00",
"type": "SUPPLIER"
},
{
"amount": "0.00",
"type": "TICKETING"
},
{
"amount": "0.00",
"type": "FORM_OF_PAYMENT"
}
],
"grandTotal": "276.20",
"billingCurrency": "USD"
},
"pricingOptions": {
"fareType": [
"PUBLISHED"
],
"includedCheckedBagsOnly": false
},
"validatingAirlineCodes": [
"B6"
],
"travelerPricings": [
{
"travelerId": "1",
"fareOption": "STANDARD",
"travelerType": "ADULT",
"price": {
"currency": "USD",
"total": "276.20",
"base": "235.35",
"taxes": [
{
"amount": "8.60",
"code": "ZP"
},
{
"amount": "5.60",
"code": "AY"
},
{
"amount": "17.65",
"code": "US"
},
{
"amount": "9.00",
"code": "XF"
}
],
"refundableTaxes": "40.85"
},
"fareDetailsBySegment": [
{
"segmentId": "91",
"cabin": "ECONOMY",
"fareBasis": "OL7AUEL1",
"brandedFare": "DN",
"class": "L",
"includedCheckedBags": {
"quantity": 0
}
},
{
"segmentId": "92",
"cabin": "ECONOMY",
"fareBasis": "ZI3PUEL1",
"brandedFare": "DN",
"class": "L",
"includedCheckedBags": {
"quantity": 0
}
}
]
}
]
}
],
"travelers": [
{
"id": 1,
"dateOfBirth": "**********",
"name": {
"firstName": "**********",
"lastName": "**********"
},
"gender": "**********"
}
],
"contacts": [
{
"addresseeName": {
"firstName": "**********",
"lastName": "**********"
},
"purpose": "STANDARD",
"emailAddress": "**********",
"phones": [
{
"deviceType": "MOBILE",
"countryCallingCode": "**",
"number": "**********"
}
],
"address": {
"lines": [
"**********"
],
"postalCode": "**********",
"cityName": "**********",
"countryCode": "**********"
}
}
],
"remarks": {
"general": [
{
"subType": "GENERAL_MISCELLANEOUS",
"text": "ONLINE BOOKING FROM INCREIBLE VIAJES"
}
]
},
"ticketingAgreement": {
"option": "DELAY_TO_CANCEL",
"delay": "6D"
}
}
}
and this is my API response.
PNR generated successfully/
stdClass Object
(
[warnings] => Array
(
[0] => stdClass Object
(
[status] => 200
[code] => 0
[title] => ContactInfoSsrNotAddedToBookingWarning
[detail] => Unable to create some contact information SSR. Email and mobile phone number required.
)
)
[data] => stdClass Object
(
[type] => flight-order
[id] => eJzTd9f3cg228PcBAAskAls%3D
[associatedRecords] => Array
(
[0] => stdClass Object
(
[reference] => JES8OL
[creationDate] => 2021-07-23T10:28:00.000
[originSystemCode] => GDS
[flightOfferId] => 5
)
)
[flightOffers] => Array
(
[0] => stdClass Object
(
[type] => flight-offer
[id] => 5
[source] => GDS
[nonHomogeneous] =>
[lastTicketingDate] => 2021-07-23
[itineraries] => Array
But when i search with differnt city and follow the same step.
this is my request json
data": {
"type": "flight-order",
"flightOffers": [
{
"type": "flight-offer",
"id": "3",
"source": "GDS",
"instantTicketingRequired": false,
"nonHomogeneous": false,
"paymentCardRequired": false,
"lastTicketingDate": "2021-07-28",
"itineraries": [
{
"segments": [
{
"departure": {
"iataCode": "DEL",
"terminal": "3",
"at": "2021-08-05T05:35:00"
},
"arrival": {
"iataCode": "BLR",
"at": "2021-08-05T08:20:00"
},
"carrierCode": "AI",
"number": "803",
"aircraft": {
"code": "32B"
},
"operating": {
"carrierCode": "AI"
},
"duration": "PT2H45M",
"id": "17",
"numberOfStops": 0,
"co2Emissions": [
{
"weight": 145,
"weightUnit": "KG",
"cabin": "ECONOMY"
}
]
}
],
"duration": "PT2H45M"
},
{
"segments": [
{
"departure": {
"iataCode": "BLR",
"at": "2021-08-10T17:10:00"
},
"arrival": {
"iataCode": "DEL",
"terminal": "3",
"at": "2021-08-10T19:55:00"
},
"carrierCode": "AI",
"number": "501",
"aircraft": {
"code": "32B"
},
"operating": {
"carrierCode": "AI"
},
"duration": "PT2H45M",
"id": "42",
"numberOfStops": 0,
"co2Emissions": [
{
"weight": 145,
"weightUnit": "KG",
"cabin": "ECONOMY"
}
]
}
],
"duration": "PT2H45M"
}
],
"price": {
"currency": "USD",
"total": "88.59",
"base": "68.00",
"fees": [
{
"amount": "0.00",
"type": "SUPPLIER"
},
{
"amount": "0.00",
"type": "TICKETING"
},
{
"amount": "0.00",
"type": "FORM_OF_PAYMENT"
}
],
"grandTotal": "88.59",
"billingCurrency": "USD"
},
"pricingOptions": {
"fareType": [
"PUBLISHED"
],
"includedCheckedBagsOnly": true
},
"validatingAirlineCodes": [
"AI"
],
"travelerPricings": [
{
"travelerId": "1",
"fareOption": "STANDARD",
"travelerType": "ADULT",
"price": {
"currency": "USD",
"total": "88.59",
"base": "68.00",
"taxes": [
{
"amount": "6.34",
"code": "P2"
},
{
"amount": "3.78",
"code": "IN"
},
{
"amount": "3.63",
"code": "K3"
},
{
"amount": "2.28",
"code": "WO"
},
{
"amount": "4.56",
"code": "YR"
}
],
"refundableTaxes": "17.19"
},
"fareDetailsBySegment": [
{
"segmentId": "17",
"cabin": "ECONOMY",
"fareBasis": "SAP8",
"class": "S",
"includedCheckedBags": {
"weight": 25,
"weightUnit": "KG"
}
},
{
"segmentId": "42",
"cabin": "ECONOMY",
"fareBasis": "SAP8",
"class": "S",
"includedCheckedBags": {
"weight": 25,
"weightUnit": "KG"
}
}
]
}
]
}
],
"travelers": [
{
"id": 1,
"dateOfBirth": "**********",
"name": {
"firstName": "**********",
"lastName": "**********"
},
"gender": "**********"
}
],
"contacts": [
{
"addresseeName": {
"firstName": "**********",
"lastName": "**********"
},
"purpose": "STANDARD",
"emailAddress": "**********",
"phones": [
{
"deviceType": "**********",
"countryCallingCode": "**",
"number": "**********"
}
],
"address": {
"lines": [
"**********"
],
"postalCode": "**********",
"cityName": "**********",
"countryCode": "**********"
}
}
],
"remarks": {
"general": [
{
"subType": "GENERAL_MISCELLANEOUS",
"text": "ONLINE BOOKING FROM INCREIBLE VIAJES"
}
]
},
"ticketingAgreement": {
"option": "DELAY_TO_CANCEL",
"delay": "6D"
}
}
and this is my API response.
stdClass Object
(
[errors] => Array
(
[0] => stdClass Object
(
[status] => 400
[code] => 34651
[title] => SEGMENT SELL FAILURE
[detail] => Could not sell segment 2
[source] => stdClass Object
(
[pointer] => /data/flightOffers[0]/itineraries[1]/segments[0]
)
)
)
)
Can you please guide me what is the issue.I am using amadeus test API credential.Also guide me how to solve the issue
Thank You
You usually get this error when trying to book a seat that is not available anymore. You are using the test environment, it means everybody else using Amadeus for Developers in test can be trying to book the same seat.
Try with another flight and don't forget to perform the Flight Offers Price before booking.
PS: I see some personal data in the example above, you should edit your post to remove it.

How to send Blank Array when no data found?

I developed State->city->area wise selection in PHP.
All things works fine. But there is no data found in city there it removed city array.
I want to pass Empty city array to API response When no data found from database. How can I do this ?
My code look like this
if (isset($credentials->credentials->uid) && $credentials->credentials->uid != ""):
$mainArr = array();
$stateArr = array();
$state = $this->Data_model->Custome_query('SELECT mf_state_id, name, status FROM mf_state WHERE status = "A"');
foreach ($state as $s) {
$sArr = array();
$sArr = array(
'mf_state_id' => $s['mf_state_id'],
'name' => $s['name'],
'status' => $s['status']
);
$cityArr = array();
$city = $this->Data_model->Custome_query('SELECT mf_city_id, mf_state_id, name, status, active FROM mf_city WHERE status = "A" AND active = "S" AND mf_state_id = '.$s['mf_state_id']);
foreach ($city as $c) {
$cArr = array();
$cArr = array(
'mf_city_id' => $c['mf_city_id'],
'mf_state_id' => $c['mf_state_id'],
'name' => $c['name'],
'status' => $c['status'],
'active' => $c['active']
);
$areaArr = array();
$area = $this->Data_model->Custome_query('SELECT mf_area_id, mf_city_id, area, status FROM mf_area WHERE status = "A" AND mf_city_id = '.$c['mf_city_id']);
foreach ($area as $a) {
$aArr = array();
$aArr = array(
'mf_area_id' => $a['mf_area_id'],
'mf_city_id' => $a['mf_city_id'],
'area' => $a['area'],
'status' => $a['status'],
);
$areaArr[] = $aArr;
$cArr['area'] = $areaArr;
}
// print_r($cityArr);
$cityArr[] = $cArr;
$sArr['cities'] = $cityArr;
// print_r($sArr['cities']);
}
$stateArr[] = $sArr;
}
// print_r($sArr['cities']);
$mainArr = $stateArr;
echo str_replace("\/", "/", json_encode( ['res' => 0, 'msg' => 'Successfully got City Area data', 'data' => $mainArr, 'version' => $this->version,"qry"=>""]));
and response I am getting is look like this
{
"res": 0,
"msg": "Successfully got City Area data",
"data": [
{
"mf_state_id": "1",
"name": "Gujarat",
"status": "A",
"cities": [
{
"mf_city_id": "1",
"mf_state_id": "1",
"name": "Surat",
"status": "A",
"active": "S",
"area": [
{
"mf_area_id": "1",
"mf_city_id": "1",
"area": "Adajan",
"status": "A"
},
{
"mf_area_id": "2",
"mf_city_id": "1",
"area": "Bhatar",
"status": "A"
},
{
"mf_area_id": "3",
"mf_city_id": "1",
"area": "Dindoli",
"status": "A"
},
{
"mf_area_id": "4",
"mf_city_id": "1",
"area": "Kapodra",
"status": "A"
},
{
"mf_area_id": "5",
"mf_city_id": "1",
"area": "Mota Varachha",
"status": "A"
},
{
"mf_area_id": "6",
"mf_city_id": "1",
"area": "Nana Varachha",
"status": "A"
},
{
"mf_area_id": "7",
"mf_city_id": "1",
"area": "Palanpur Patiya",
"status": "A"
},
{
"mf_area_id": "8",
"mf_city_id": "1",
"area": "Parvat Patiya",
"status": "A"
},
{
"mf_area_id": "9",
"mf_city_id": "1",
"area": "Udhna",
"status": "A"
},
{
"mf_area_id": "10",
"mf_city_id": "1",
"area": "Athwa",
"status": "A"
},
{
"mf_area_id": "11",
"mf_city_id": "1",
"area": "Bhatha",
"status": "A"
},
{
"mf_area_id": "12",
"mf_city_id": "1",
"area": "Ghoddod Road",
"status": "A"
},
{
"mf_area_id": "13",
"mf_city_id": "1",
"area": "Katargam",
"status": "A"
},
{
"mf_area_id": "14",
"mf_city_id": "1",
"area": "Pandesara",
"status": "A"
},
{
"mf_area_id": "15",
"mf_city_id": "1",
"area": "Piplod",
"status": "A"
},
{
"mf_area_id": "16",
"mf_city_id": "1",
"area": "Vesu",
"status": "A"
},
{
"mf_area_id": "17",
"mf_city_id": "1",
"area": "Citylight",
"status": "A"
},
{
"mf_area_id": "18",
"mf_city_id": "1",
"area": "Jahangirpura",
"status": "A"
},
{
"mf_area_id": "19",
"mf_city_id": "1",
"area": "Pal",
"status": "A"
},
{
"mf_area_id": "20",
"mf_city_id": "1",
"area": "Parle Point",
"status": "A"
},
{
"mf_area_id": "21",
"mf_city_id": "1",
"area": "Rander",
"status": "A"
},
{
"mf_area_id": "28",
"mf_city_id": "1",
"area": "Zampa Bazaar",
"status": "A"
},
{
"mf_area_id": "40",
"mf_city_id": "1",
"area": "Rander Road",
"status": "A"
},
{
"mf_area_id": "43",
"mf_city_id": "1",
"area": "Varachha Road",
"status": "A"
},
{
"mf_area_id": "58",
"mf_city_id": "1",
"area": "Palanpur Gam",
"status": "A"
},
{
"mf_area_id": "63",
"mf_city_id": "1",
"area": "Palanpur Jakatnaka",
"status": "A"
},
{
"mf_area_id": "92",
"mf_city_id": "1",
"area": "New Causeway Road",
"status": "A"
}
]
}
]
},
{
"mf_state_id": "2",
"name": "Maharastra",
"status": "A"
}
],
"version": "1.0",
"qry": ""
}
In last state Maharastra there is no city in data base.
but it should return city array blank.
I want response look like this. City array should come null array when Data not found
{
"res": 0,
"msg": "Successfully got City Area data",
"data": [
{
"mf_state_id": "1",
"name": "Gujarat",
"status": "A",
"cities": [
{
"mf_city_id": "1",
"mf_state_id": "1",
"name": "Surat",
"status": "A",
"active": "S",
"area": [
{
"mf_area_id": "1",
"mf_city_id": "1",
"area": "Adajan",
"status": "A"
},
{
"mf_area_id": "2",
"mf_city_id": "1",
"area": "Bhatar",
"status": "A"
},
{
"mf_area_id": "3",
"mf_city_id": "1",
"area": "Dindoli",
"status": "A"
},
{
"mf_area_id": "4",
"mf_city_id": "1",
"area": "Kapodra",
"status": "A"
},
{
"mf_area_id": "5",
"mf_city_id": "1",
"area": "Mota Varachha",
"status": "A"
},
{
"mf_area_id": "6",
"mf_city_id": "1",
"area": "Nana Varachha",
"status": "A"
},
{
"mf_area_id": "7",
"mf_city_id": "1",
"area": "Palanpur Patiya",
"status": "A"
},
{
"mf_area_id": "8",
"mf_city_id": "1",
"area": "Parvat Patiya",
"status": "A"
},
{
"mf_area_id": "9",
"mf_city_id": "1",
"area": "Udhna",
"status": "A"
},
{
"mf_area_id": "10",
"mf_city_id": "1",
"area": "Athwa",
"status": "A"
},
{
"mf_area_id": "11",
"mf_city_id": "1",
"area": "Bhatha",
"status": "A"
},
{
"mf_area_id": "12",
"mf_city_id": "1",
"area": "Ghoddod Road",
"status": "A"
},
{
"mf_area_id": "13",
"mf_city_id": "1",
"area": "Katargam",
"status": "A"
},
{
"mf_area_id": "14",
"mf_city_id": "1",
"area": "Pandesara",
"status": "A"
},
{
"mf_area_id": "15",
"mf_city_id": "1",
"area": "Piplod",
"status": "A"
},
{
"mf_area_id": "16",
"mf_city_id": "1",
"area": "Vesu",
"status": "A"
},
{
"mf_area_id": "17",
"mf_city_id": "1",
"area": "Citylight",
"status": "A"
},
{
"mf_area_id": "18",
"mf_city_id": "1",
"area": "Jahangirpura",
"status": "A"
},
{
"mf_area_id": "19",
"mf_city_id": "1",
"area": "Pal",
"status": "A"
},
{
"mf_area_id": "20",
"mf_city_id": "1",
"area": "Parle Point",
"status": "A"
},
{
"mf_area_id": "21",
"mf_city_id": "1",
"area": "Rander",
"status": "A"
},
{
"mf_area_id": "28",
"mf_city_id": "1",
"area": "Zampa Bazaar",
"status": "A"
},
{
"mf_area_id": "40",
"mf_city_id": "1",
"area": "Rander Road",
"status": "A"
},
{
"mf_area_id": "43",
"mf_city_id": "1",
"area": "Varachha Road",
"status": "A"
},
{
"mf_area_id": "58",
"mf_city_id": "1",
"area": "Palanpur Gam",
"status": "A"
},
{
"mf_area_id": "63",
"mf_city_id": "1",
"area": "Palanpur Jakatnaka",
"status": "A"
},
{
"mf_area_id": "92",
"mf_city_id": "1",
"area": "New Causeway Road",
"status": "A"
}
]
}
]
},
{
"mf_state_id": "2",
"name": "Maharastra",
"status": "A",
"cities": []
}
],
"version": "1.0",
"qry": ""
}
You should initialize the $sArr with cities key as empty array. If the cities are then found of the state, the cities key will be overwritten in the loop else you will get empty values.
$sArr = array();
$sArr = array(
'mf_state_id' => $s['mf_state_id'],
'name' => $s['name'],
'status' => $s['status'],
'cities' => array(), //Initialize with empty array here.
);
Try this, If state have no cities or empty then other code does not execute.
if(count($city)>0){
foreach ($city as $c) {
$cArr = array(
'mf_city_id' => $c['mf_city_id'],
'mf_state_id' => $c['mf_state_id'],
'name' => $c['name'],
'status' => $c['status'],
'active' => $c['active']
);
}
}else{
$cArr = array();
}

Get all options for configurable product Magento 2.0 REST Api

When i call this API,
{{base_url}}index.php/rest/V1/configurable-products/:sku/options/all
I am getting a response like this,
[
{
"id": 9,
"attribute_id": "93",
"label": "Color",
"position": 0,
"values": [
{
"value_index": 15
},
{
"value_index": 16
},
{
"value_index": 17
}
],
"product_id": 19
},
{
"id": 10,
"attribute_id": "176",
"label": "side",
"position": 1,
"values": [
{
"value_index": 18
},
{
"value_index": 19
}
],
"product_id": 19
}
]
But i want label for all these value_indexes.Could i get all these values in a single request
There is an pi for getting all the labels,
{{base_url}}/index.php/rest/V1/products/attributes/:attribute_id/options
Ex:
{{base_url}}/index.php/rest/V1/products/attributes/93/options
will return
[
{
"label": " ",
"value": ""
},
{
"label": "green",
"value": "12"
},
{
"label": "yellow",
"value": "13"
},
{
"label": "red",
"value": "14"
}
]
You can use this endpoint to fetch multiple attribute sets in a single request
/rest/V1/products/attributes
example:
{domain}/rest/V1/products/attributes?search_criteria[filter_groups][0][filters][0][field]=attribute_id&search_criteria[filter_groups][0][filters][0][value]=93,138&search_criteria[filter_groups][0][filters][0][condition_type]=in
response:
"items": [
{
"is_wysiwyg_enabled": false,
"is_html_allowed_on_front": false,
"used_for_sort_by": false,
"is_filterable": true,
"is_filterable_in_search": false,
"is_used_in_grid": true,
"is_visible_in_grid": false,
"is_filterable_in_grid": true,
"position": 0,
"apply_to": [
"simple",
"virtual",
"configurable"
],
"is_searchable": "1",
"is_visible_in_advanced_search": "1",
"is_comparable": "1",
"is_used_for_promo_rules": "0",
"is_visible_on_front": "0",
"used_in_product_listing": "0",
"is_visible": true,
"scope": "global",
"attribute_id": 93,
"attribute_code": "color",
"frontend_input": "select",
"entity_type_id": "4",
"is_required": false,
"options": [
{
"label": " ",
"value": ""
},
{
"label": "blue",
"value": "8"
},
{
"label": "red",
"value": "9"
},
{
"label": "black",
"value": "10"
},
{
"label": "white",
"value": "11"
}
],
"is_user_defined": true,
"default_frontend_label": "Color",
"frontend_labels": [],
"backend_type": "int",
"source_model": "Magento\\Eav\\Model\\Entity\\Attribute\\Source\\Table",
"default_value": "",
"is_unique": "0",
"validation_rules": []
},
{
"is_wysiwyg_enabled": false,
"is_html_allowed_on_front": true,
"used_for_sort_by": false,
"is_filterable": false,
"is_filterable_in_search": false,
"is_used_in_grid": true,
"is_visible_in_grid": true,
"is_filterable_in_grid": true,
"position": 0,
"apply_to": [],
"is_searchable": "0",
"is_visible_in_advanced_search": "0",
"is_comparable": "0",
"is_used_for_promo_rules": "0",
"is_visible_on_front": "0",
"used_in_product_listing": "0",
"is_visible": true,
"scope": "global",
"attribute_id": 138,
"attribute_code": "simple_size",
"frontend_input": "select",
"entity_type_id": "4",
"is_required": true,
"options": [
{
"label": " ",
"value": ""
},
{
"label": "small",
"value": "12"
},
{
"label": "medium",
"value": "13"
},
{
"label": "large",
"value": "14"
}
],
"is_user_defined": true,
"default_frontend_label": "simple_size",
"frontend_labels": [
{
"store_id": 1,
"label": "Size"
}
],
"backend_type": "int",
"source_model": "Magento\\Eav\\Model\\Entity\\Attribute\\Source\\Table",
"default_value": "",
"is_unique": "0",
"validation_rules": []
}
],
"search_criteria": {
"filter_groups": [
{
"filters": [
{
"field": "attribute_id",
"value": "93,138",
"condition_type": "in"
}
]
}
]
},
"total_count": 2
}

php JSON data structure for angular app

I am trying to format the a mysql response into a array of objects so that Angular can easily traverse the data.
mysql result:
[{
"FIAccountsID": "99",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "1"
},
{
"FIAccountsID": "99",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "2"
},
{
"FIAccountsID": "100",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "1"
},
{
"FIAccountsID": "100",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "2"
},
{
"FIAccountsID": "101",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "1"
},
{
"FIAccountsID": "101",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "2"
},
{
"FIAccountsID": "102",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "1"
},
{
"FIAccountsID": "102",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "2"
},
{
"FIAccountsID": "103",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "1"
},
{
"FIAccountsID": "103",
"AccountName": "",
"AccountCustomName": "Brothers",
"AccountNumber": "99-123123123",
"AccountTypeName": "IRA",
"FinancialInstName": "Testes",
"FinancialInstID": "9",
"UserID": "1",
"ofxStatusCode": "500",
"UserAccountID": "09128-vc-12",
"FirstName": "Someones",
"LastName": "Name",
"Status": "2"
}......
here it the PHP:
while($row = mysqli_fetch_assoc($result))
{
$uid = $row['UserID'];
$name = $row['FirstName'].' '.$row['LastName'];
$fiid = $row['FinancialInstID'];
$fi = $row['FinancialInstName'];
$acctID = $row['FIAccountsID'];
$rows[$uid]['name'] = $name;
$rows[$uid]['uid'] = $uid;
$rows[$uid]['fi'][$fiid]['name'] = $fi;
$rows[$uid]['fi'][$fiid]['acct'][$acctID]['name'] = $row['AccountCustomName'];
}
print json_encode($rows);
this is what i get:
{
"1": {
"name": "Some Name",
"uid": "1",
"fi": {
"9": {
"name": "Testes",
"accts": {
"99": {
"name": "name 1"
},
"100": {
"name": "name 2"
},
"103": {
"name": "name 3"
}
}
}
}
},
"2": {
"name": "Another Name",
"uid": "2",
"fi": {
"7": {
"name": "Trevor's Brokerage House",
"accts": {
"1": {
"name": "Sally's 401k Account"
},
"2": {
"name": "retirement"
},
"3": {
"name": "Some other account"
..........
desired result:
[
{
"users": [
{
"name": "Some Name",
"uid": "1",
"fi": [
{
"name": "Testes",
"acct": [
{
"name": "name 1"
},
{
"name": "name 2"
},
{
"name": "name 3"
}
]
}
]
},
{
"name": "Another Name",
"uid": "2",
"fi": [
{
"name": "Trevor's Brokerage House",
"acct": [
{
"name": "Sally's 401k Account"
},
{
"name": "retirement"
},
{
"name": "Some other account"
..........
I want to know how to have the data structure without the unique keys prefixing the nested arrays
The thing is that if you define keys, json_encode will read them. If you don't want keys, declare the array without them. So, what you need to do is to structure your array according to you desired output.
But the way your data is arranged make it somewhat hard to format it properly. The solution I can see is to do what you're already doing:
while($row = mysqli_fetch_assoc($result))
{
$uid = $row['UserID'];
$name = $row['FirstName'].' '.$row['LastName'];
$fiid = $row['FinancialInstID'];
$fi = $row['FinancialInstName'];
$acctID = $row['FIAccountsID'];
$rows[$uid]['name'] = $name;
$rows[$uid]['uid'] = $uid;
$rows[$uid]['fi'][$fiid]['name'] = $fi;
$rows[$uid]['fi'][$fiid]['acct'][$acctID]['name'] = $row['AccountCustomName'];
}
But then you revisit the array and remove all the keys using array_values:
foreach ($rows as $uid => $data)
{
foreach ($data['fi'] as $fiid => $fi)
{
$rows[$uid]['fi'][$fiid]['acct'] = array_values($fi['acct']);
}
$rows[$uid]['fi'] = array_values($rows[$uid]['fi']);
}
// Here you format the outer array:
$rows = array(array('users' => array_values($rows)));
Which gives a result like this:
[
{
"users": [
{
"name": "Someones Name",
"uid": "1",
"fi": [
{
"name": "Testes",
"acct": [
{
"name": "Brothers"
},
{
"name": "Brothers"
},
{
"name": "Brothers"
},
{
"name": "Brothers"
},
{
"name": "Brothers"
}
]
}
]
},
{
"name": "Someones Name",
"uid": "2",
"fi": [
{
"name": "Testes",
"acct": [
{
"name": "Brothers"
},
{
"name": "Brothers"
}
]
}
]
}
]
}
]

Categories