How To Update Square Order?

55 Views Asked by At

I am attempting to update a Square order from my app, but it's not working. I create the order, and initially, everything seems fine—it gives me a success response and shows up when I make an API call. However, when I try to update the order, for instance, changing the name from 'John' to 'Jan,' and press the update button, the response I receive from Square indicates success, but the values remain unchanged; the name is still 'John' instead of 'Jan'.

@IBAction func ordersSaveBtn(_ sender: UIButton) {
    let numberOfRows = selectedItemTableView.numberOfRows(inSection: 0)
    if numberOfRows == 0 {
        CommonMethods.showAlert(title: "Error", message: "Please Add Items", view: self)
    } else if resultSearchController.isActive == true {
        self.searchActive = true
        self.dismiss(animated: true, completion: nil)
    }
    
    if (searchActive == true) || ((searchActive == false) && (dateLabelBtn.titleLabel?.text != "Date")) {
        
        if isCharge {
            
            //Checking to see if the order is being edited if isCharge == true then it is being edited
            
            let currentDate = Date()
            let dateString = "\(date)"
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MMMM dd yyyy h:mm a"
            dateFormatter.locale = Locale(identifier: "en_US_POSIX")
            if let date = dateFormatter.date(from: dateString) {
                let isoDateFormatter = ISO8601DateFormatter()
                isoDateFormatter.formatOptions = [.withInternetDateTime]
                let pickupAt = isoDateFormatter.string(from: date)
                let displayName = "\(nameTextField.text ?? "")"
                let phoneNumber = "\(phoneTextField.text ?? "")"
                let email = "\(emailTextField.text ?? "")"
                let priceString = selectedItems.first?.price?.replacingOccurrences(of: "$", with: "").trimmingCharacters(in: .whitespaces)
                    let priceS = priceString?.replacingOccurrences(of: ".", with: "")
                    let price: Int? = Int(priceS ?? "")
                    
                    print("order Id \(orderId)")
                    editSquareOrder(orderId: orderId, updatedOrder: [
                        "order": [
                            "line_items": selectedItems.map { [self] selectedItem in
                                var itemData: [String: Any] = [
                                    "quantity": "\(selectedItem.quantity ?? "")" ,
                                    "base_price_money": [
                                        "amount": price ?? 0,
                                        "currency": "USD"
                                    ],
                                    "modifiers": [
                                        [
                                            "base_price_money": [
                                                "amount": price ?? 0,
                                                "currency": "USD"
                                            ],
                                            "name": selectedItem.variationName ?? "",
                                        ]
                                    ],
                                    "name": selectedItem.itemName ?? "",
                                    "variation_name": selectedItem.variationName ?? "",
                                    "item_type": "ITEM",
                                    ]
                                    if let sku = selectedItem.sku {
                                        itemData["metadata"] = ["sku": sku]
                                    }
                                
                                for i in selectedItems {
                                    print("selectedItems.isDone: ",i.isDone)
                                    itemData["metadata"] = ["isDone": i.isDone]
                                    
                                }
                                return itemData
                            },
                            "location_id": "M58BD678K1HDZ",
                            "customer_id": "0HR44FFEGH7DV8VHQK0NFPN3TG",
                            "state": "OPEN",
                            "fulfillments": [
                                [
                                    "type": "PICKUP",
                                    "state": "PROPOSED",
                                    "placed_at": dateFormatter.string(from: currentDate),
                                    "pickup_details": [
                                        "pickup_at": pickupAt,
                                        "recipient": [
                                            "display_name": displayName,
                                            "phone_number": phoneNumber,
                                            "email_address": email
                                        ]
                                    ]
                                ]
                            ],
                            "taxes": [
                                [
                                    "uid": "ad24399a-3ef6-42fd-b73f-7e8f1555c045",
                                    "name": "PA Sales Tax",
                                    "percentage": "6.0",
                                    "type": "ADDITIVE",
                                    "applied_money": [
                                        "amount": 0,
                                        "currency": "USD"
                                    ],
                                    "scope": "LINE_ITEM"
                                ],
                            ],
                            "pricing_options": [
                                "auto_apply_discounts": true,
                                "auto_apply_taxes": true
                            ]
                        ]
                    ]){ error in
                        if let error = error {
                            print("Error deleting order: \(error)")
                        } else {
                        }
                    }
            } else {
                print("invalid date")
            }
        } else {
            //If the order is not being edited it creates a new order
            self.createSquareOrder()
            
        }
    } else {
        CommonMethods.showAlert(title: "Error", message: "Please fill Add PickUp Date", view: self)
    }
}


func editSquareOrder(orderId: String, updatedOrder: [String: Any], completion: @escaping (Error?) -> Void) {
    let accessToken = "EAAAFOSqneaOJbzXjGTEaJ1G6MqvWGVlVmPdKSWwj_2yEiDZBhxeyUjfypfn01kT"
    let orderAPIURL = "https://connect.squareup.com/v2/orders/\(orderId)"
    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(accessToken)",
        "Content-Type": "application/json"
    ]

    Alamofire.request(orderAPIURL, method: .get, headers: headers).responseJSON { response in
        switch response.result {
        case .success(let value):
            if let jsonResponse = value as? [String: Any], let order = jsonResponse["order"] as? [String: Any], let version = order["version"] as? Int {
                print("OrginalVersion: ",version)
                var updatedOrderWithVersion = updatedOrder
                updatedOrderWithVersion["version"] = version
                print("versone: \(version)")
                // Update the order with the new data
                Alamofire.request(orderAPIURL, method: .put, parameters: ["order": updatedOrderWithVersion], encoding: JSONEncoding.default, headers: headers).responseJSON { response in
                    switch response.result {
                    case .success(let value):

                        print("Update Order API Response: \(value)")
                        // Handle success, call completion handler with nil error
                        completion(nil)
                        self.dismiss(animated: true, completion: nil)
                    case .failure(let error):
                        if let data = response.data {
                            let errorResponse = try? JSONSerialization.jsonObject(with: data, options: [])
                            print("Error updating order: \(error), Response: \(errorResponse ?? "N/A")")
                        } else {
                            print("Error updating order: \(error)")
                        }
                        // Call completion handler with error
                        completion(error)
                    }
                }
            } else {
                let error = NSError(domain: "SquareAPI", code: 0, userInfo: [NSLocalizedDescriptionKey: "Failed to parse order details or missing version"])
                completion(error)
            }
        case .failure(let error):
            print("Error fetching order details: \(error)")
            completion(error)
        }
    }
}

What could be the cause of this problem?

0

There are 0 best solutions below