{
  "meta": {
    "options": {
      "linkedFile": "/views/partials/expense/manage-expense.ejs",
      "linkedForm": "formManageExpense"
    },
    "$_POST": [
      {
        "type": "text",
        "fieldName": "invoice_number",
        "options": {
          "rules": {
            "core:required": {
              "param": ""
            }
          }
        },
        "name": "invoice_number"
      },
      {
        "type": "text",
        "fieldName": "date",
        "options": {
          "rules": {
            "core:required": {
              "param": ""
            }
          }
        },
        "name": "date"
      },
      {
        "type": "array",
        "name": "expense",
        "sub": [
          {
            "type": "text",
            "fieldName": "expense[{{$index}}][item]",
            "options": {
              "rules": {
                "core:required": {
                  "param": ""
                }
              }
            },
            "name": "item"
          },
          {
            "type": "number",
            "fieldName": "expense[{{$index}}][quantity]",
            "options": {
              "rules": {
                "core:required": {
                  "param": ""
                },
                "core:number": {}
              }
            },
            "name": "quantity"
          },
          {
            "type": "number",
            "fieldName": "expense[{{$index}}][price]",
            "options": {
              "rules": {
                "core:required": {
                  "param": ""
                },
                "core:number": {}
              }
            },
            "name": "price"
          },
          {
            "type": "text",
            "fieldName": "expense[{{$index}}][unit]",
            "options": {
              "rules": {
                "core:required": {
                  "param": ""
                }
              }
            },
            "name": "unit"
          }
        ]
      },
      {
        "type": "array",
        "name": "record",
        "sub": [
          {
            "type": "number",
            "name": "var_item_id"
          },
          {
            "type": "number",
            "name": "$_POST"
          },
          {
            "type": "number",
            "name": "quantity"
          },
          {
            "type": "number",
            "name": "unit"
          },
          {
            "type": "number",
            "name": "price"
          },
          {
            "type": "datetime",
            "name": "NOW"
          }
        ]
      }
    ]
  },
  "exec": {
    "steps": [
      {
        "name": "",
        "module": "auth",
        "action": "restrict",
        "options": {
          "provider": "security",
          "permissions": [
            "Active"
          ]
        }
      },
      {
        "name": "",
        "module": "core",
        "action": "condition",
        "options": {
          "if": "{{$_POST.expense_id}}",
          "then": {
            "steps": {
              "name": "",
              "options": {
                "comment": "update"
              }
            }
          },
          "else": {
            "steps": {
              "name": "repeat_expenses",
              "module": "core",
              "action": "repeat",
              "options": {
                "repeat": "{{$_POST.expense}}",
                "outputFields": [
                  "item",
                  "quantity",
                  "price",
                  "unit"
                ],
                "exec": {
                  "steps": [
                    {
                      "name": "q_item_id",
                      "module": "dbconnector",
                      "action": "single",
                      "options": {
                        "connection": "db",
                        "sql": {
                          "type": "SELECT",
                          "columns": [
                            {
                              "table": "sc",
                              "column": "id"
                            }
                          ],
                          "params": [
                            {
                              "operator": "equal",
                              "type": "expression",
                              "name": ":P1",
                              "value": "{{item}}",
                              "test": ""
                            }
                          ],
                          "table": {
                            "name": "sub_categories",
                            "alias": "sc"
                          },
                          "primary": "id",
                          "joins": [],
                          "query": "select `id` from `sub_categories` as `sc` where `sc`.`subcategory_name` = ?",
                          "wheres": {
                            "condition": "AND",
                            "rules": [
                              {
                                "id": "sc.subcategory_name",
                                "field": "sc.subcategory_name",
                                "type": "string",
                                "operator": "equal",
                                "value": "{{item}}",
                                "data": {
                                  "table": "sc",
                                  "column": "subcategory_name",
                                  "type": "text",
                                  "columnObj": {
                                    "type": "string",
                                    "maxLength": 50,
                                    "primary": false,
                                    "nullable": false,
                                    "name": "subcategory_name"
                                  }
                                },
                                "operation": "=",
                                "table": "sub_categories"
                              }
                            ],
                            "conditional": null,
                            "valid": true
                          }
                        }
                      },
                      "meta": [
                        {
                          "type": "number",
                          "name": "id"
                        }
                      ],
                      "outputType": "object"
                    },
                    {
                      "name": "",
                      "module": "core",
                      "action": "condition",
                      "options": {
                        "if": "{{q_item_id.id}}",
                        "then": {
                          "steps": {
                            "name": "var_item_id",
                            "module": "core",
                            "action": "setvalue",
                            "options": {
                              "key": "var_item_id",
                              "value": "{{q_item_id.id}}"
                            },
                            "meta": [],
                            "outputType": "text"
                          }
                        },
                        "else": {
                          "steps": [
                            {
                              "name": "i_new_item",
                              "module": "dbupdater",
                              "action": "insert",
                              "options": {
                                "connection": "db",
                                "sql": {
                                  "type": "insert",
                                  "values": [
                                    {
                                      "table": "sub_categories",
                                      "column": "category_id",
                                      "type": "number",
                                      "value": "22"
                                    },
                                    {
                                      "table": "sub_categories",
                                      "column": "subcategory_name",
                                      "type": "text",
                                      "value": "{{item}}"
                                    },
                                    {
                                      "table": "sub_categories",
                                      "column": "status",
                                      "type": "text",
                                      "value": "1"
                                    },
                                    {
                                      "table": "sub_categories",
                                      "column": "created_at",
                                      "type": "datetime",
                                      "value": "{{NOW}}"
                                    }
                                  ],
                                  "table": "sub_categories",
                                  "returning": "id",
                                  "query": "insert into `sub_categories` (`category_id`, `created_at`, `status`, `subcategory_name`) values (?, ?, ?, ?)",
                                  "params": [
                                    {
                                      "name": ":P1",
                                      "type": "expression",
                                      "value": "{{item}}",
                                      "test": ""
                                    },
                                    {
                                      "name": ":P2",
                                      "type": "expression",
                                      "value": "{{NOW}}",
                                      "test": ""
                                    }
                                  ]
                                }
                              },
                              "meta": [
                                {
                                  "name": "identity",
                                  "type": "text"
                                },
                                {
                                  "name": "affected",
                                  "type": "number"
                                }
                              ]
                            },
                            {
                              "name": "var_item_id",
                              "module": "core",
                              "action": "setvalue",
                              "options": {
                                "key": "var_item_id",
                                "value": "{{i_new_item.identity}}"
                              },
                              "meta": [],
                              "outputType": "text",
                              "collapsed": true
                            }
                          ]
                        }
                      },
                      "outputType": "boolean"
                    },
                    {
                      "name": "i_expense",
                      "module": "dbupdater",
                      "action": "insert",
                      "options": {
                        "connection": "db",
                        "sql": {
                          "type": "insert",
                          "values": [
                            {
                              "table": "expense",
                              "column": "user_id",
                              "type": "number",
                              "value": "1"
                            },
                            {
                              "table": "expense",
                              "column": "category_id",
                              "type": "number",
                              "value": "{{var_item_id}}"
                            },
                            {
                              "table": "expense",
                              "column": "invoice_number",
                              "type": "number",
                              "value": "{{$_POST.invoice_number}}"
                            },
                            {
                              "table": "expense",
                              "column": "quantity",
                              "type": "number",
                              "value": "{{quantity}}"
                            },
                            {
                              "table": "expense",
                              "column": "unit",
                              "type": "number",
                              "value": "{{unit}}"
                            },
                            {
                              "table": "expense",
                              "column": "purchase_date",
                              "type": "date",
                              "value": "{{$_POST.date}}"
                            },
                            {
                              "table": "expense",
                              "column": "amount",
                              "type": "number",
                              "value": "{{price}}"
                            },
                            {
                              "table": "expense",
                              "column": "created_on",
                              "type": "datetime",
                              "value": "{{NOW}}"
                            },
                            {
                              "table": "expense",
                              "column": "tag_id",
                              "type": "number",
                              "value": "{{$_POST.tags.join(', ')}}"
                            }
                          ],
                          "table": "expense",
                          "returning": "id",
                          "query": "insert into `expense` (`amount`, `category_id`, `created_on`, `invoice_number`, `purchase_date`, `quantity`, `tag_id`, `unit`, `user_id`) values (?, ?, ?, ?, ?, ?, ?, ?, ?)",
                          "params": [
                            {
                              "name": ":P1",
                              "type": "expression",
                              "value": "{{var_item_id}}",
                              "test": ""
                            },
                            {
                              "name": ":P2",
                              "type": "expression",
                              "value": "{{$_POST.invoice_number}}",
                              "test": ""
                            },
                            {
                              "name": ":P3",
                              "type": "expression",
                              "value": "{{quantity}}",
                              "test": ""
                            },
                            {
                              "name": ":P4",
                              "type": "expression",
                              "value": "{{unit}}",
                              "test": ""
                            },
                            {
                              "name": ":P5",
                              "type": "expression",
                              "value": "{{$_POST.date}}",
                              "test": ""
                            },
                            {
                              "name": ":P6",
                              "type": "expression",
                              "value": "{{price}}",
                              "test": ""
                            },
                            {
                              "name": ":P7",
                              "type": "expression",
                              "value": "{{NOW}}",
                              "test": ""
                            },
                            {
                              "name": ":P8",
                              "type": "expression",
                              "value": "{{$_POST.tags.join(', ')}}",
                              "test": ""
                            }
                          ]
                        }
                      },
                      "meta": [
                        {
                          "name": "identity",
                          "type": "text"
                        },
                        {
                          "name": "affected",
                          "type": "number"
                        }
                      ]
                    }
                  ]
                }
              },
              "output": true,
              "meta": [
                {
                  "name": "$index",
                  "type": "number"
                },
                {
                  "name": "$number",
                  "type": "number"
                },
                {
                  "name": "$name",
                  "type": "text"
                },
                {
                  "name": "$value",
                  "type": "object"
                },
                {
                  "name": "item",
                  "type": "text"
                },
                {
                  "name": "quantity",
                  "type": "number"
                },
                {
                  "name": "price",
                  "type": "number"
                },
                {
                  "name": "unit",
                  "type": "text"
                }
              ],
              "outputType": "array"
            }
          }
        },
        "outputType": "boolean"
      }
    ]
  }
}