# runner_todo.md

## rakenne

- json vanha perusrakenne:
  - kaikki koodilausekkeet taulukkorakenteena (hankala/hidas tehdä käsin jsonia -> ei haittaa sitten kun saadaan käyttöliittymä)
  - funktiokutsu:
    - 1-2 elementtiä:
      1. funktio
      2. parametritaulukko
    - ["\_str_Format", ["co_post_office"]]
  - sijoituslause:
    - aina 3 elementtiä
    - ["asd_price", "=", [["asd_quantity","*","asd_unit_price"],"+","5.5"]]
    - ["co_post_office", "=", ["\_str_Format", ["co_post_office"]]]
  - if-lause:
    - 3+ elementtiä
      1. "if"
      2. "ehtolause" (kuten json queryssä etsintä)
      3. if-ehdon koodi
      4. "else" tai "elseif" -ehdon koodi
      5. else-ehdon koodi tai "elseif"-ehtolause
      6. elseif-ehdon koodi (tai uusi "else" tai "elseif" jne)
    - ["if",["asd_zxc","<>",""],["asd_qwe","=","asd"],["asd_qwe","=","123"]]

## selvitettävä

- kuinka funktioiden parametrien esittely saataisiin tehtyä
  "por_STOCK_ALARM": {
  "parameter": ["p1", "p2"]
  "code" :[
  ["pr_nc\_\_PRODUCT_STATE_INFO", ["por_product_id"], "por_order_amount", "00.00.0000", "1", "false"]
  ]
  }

## tehtävä

- sisäkkäisten funktioiden kutsu ei toimi
  - sisäkkäisten funktioiden kutsu ei toimi. eli funktio on toisen funktion parametrina.
- iter-funktio
  - Toistaiseksi tehty yksinkertaistettu muoto iter/each -funktiosta:
    [
    "iterPreference", [ "wlgTbl", "run_code/machine_data_to_work_phase_actual.json", "wlgRec" ]
    ]
  - iter funktio asettaa recin "iterRec" nimiseen tagiin (vai pelkkä rec?)
    [
    "iter",
    [
    "wlgTbl",
    ["filter", ["filterfunc"]],
    ["take", [1]],
    ["each",
    ["runPre", ["run_code/machine_data_to_work_phase_actual"]]
    ]
    ]
    ]
- run_code.lua muutettava käyttämään uusia execute.lua -koodeja (script_runner git-branch)
  - wlgTbl:filter(asd("123")):take(1):each(runFunc("init"))
  - [func, [param], func2, [param2], func3, func4]
  - ["wlgTbl", ["filter",["asd", "123"]], ["take", [1]], ["each", ["runFunc", ["init]]]
  - [["data", ["wlgTbl"]], ["filter",["asd", "123"]], ["take", [1]], ["each", ["runFunc", ["init]]]]
  - funktion sisään info-funktion (nimetäänkö: description?) kutsu jolla saadaan dokumentoitua funktio (englanniksi): ["info",["hello dasdasdddasd"]]

## tehty

- done/ak/2016-04-01 test_run_code.lua / ret = run.runPreference("run_code/machine_data_to_work_phase_actual_main.json","{'BW1'}")
  - kaatuminen: runFunction(code, data) kaatuu kun ajetaan startDateTime-funktiota jolla on 2. parametri numerona (-60)

### mietittävä millainen convert-asetuksesta tulisi uudessa muodossa

- Jos pidettäisiin rakenne samana muuten paitsi muutetaan vain objektit joissa on "from...jotain" paitsi ne joissa on "array"-tagi. Vähän huono tällainen sekamuoto.

- esim.
  {
  "convert": [
  {
  "linebreak": "\r\n",
  "to": "/ArrayOfInvoice",
  "namespace": "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
  },
  {
  "from": "inv*tbl",
  "to": "/ArrayOfInvoice/Invoice",
  "array": [
  ["Invoice_number", "=", "0"],
  ["Invoice_date", "=", "inv_date*"],
  ["Language_code", "=", ["fromPreference",["custom/lemon/export_lemon_invoice.language_code","inv_additional_data.invoicing_address.country"]]],
  ["Current_date", "=", ["currentDateString"]],
  {
  "from": "inr_tbl",
  "to": "/ArrayOfInvoice/Invoice/InvoiceRows/InvoiceRow",
  "array": [
  ["Row_position", "=", "inr_customer_row_number"]
  ]
  }
  ]

- kuinka muunnettaisiin kaikki 'taulukko' muotoon? Miten "namespace", "linebreak"?
  \*\*\* PM: "namespace", "linebreak" juuri kuten seuraavassa esimerkissä

  - "inv_tbl" ja "inr_tbl" muoto ei eroa funktio-kutsusta, mutta saattaisi toimisi koska "inv_tbl" ei ole funktio. Pitäisi lisäksi tutkia että sen muoto on array.

```json
    {
    "linebreak": "\r\n",
    "namespace": "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
    "convert": [
    ["/ArrayOfInvoice", "=", "namespace"], --???
    ["/ArrayOfInvoice/Invoice", "=",
    [
    "inv*tbl",
    [
    ["Invoice_number", "=", "0"],
    ["Invoice_date", "=", "inv_date*"],
    ["Language_code", "=", ["fromPreference",["custom/lemon/export_lemon_invoice.language_code","inv_additional_data.invoicing_address.country"]]],
    ["Current_date", "=", ["currentDateString"]],
    ["/ArrayOfInvoice/Invoice/InvoiceRows/InvoiceRow", "=",
    [
    "inr_tbl",
    [
    ["Row_position", "=", "inr_customer_row_number"]
    ]
    ]
    ]
    ]
    ]
    ]
    --
    },
```

- esim. xml:
  - mistä on tullut 'xml version="1.0" encoding="utf-8"' -rivi? Sitä ei ole json-määrittelyssä. Onko se jossain json-oletusarvotiedostossa?
    \*\*\* PM: xml version rivi tulee json_to_xml.lua koodilla, työkalu ei osaa sitä hanskata, voisi myös olla "prefix" ja "suffix" tagit samalla tavalla kuin "namespace", samoin "encoding" omanaan niin voitaisiin tehdä muuta kuin utf-8 (muuntaa lopuksi utf9 -> latin1 tms.)

```xml
    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfInvoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Invoice>
    <Invoice_number>5819</Invoice_number>
```

###### alkuperäisiä muotoja

- esim. laskusta xml-muotoon (alkuperäinen muoto):

````json
  {
  "convert": [
  {
  "linebreak": "\r\n",
  "to": "/ArrayOfInvoice",
  "namespace": "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
  },
  {
  "from": "inv*tbl",
  "to": "/ArrayOfInvoice/Invoice",
  "array": [
    {
    "from_static": "0",
    "to": "Invoice_number",
    "description": "Laskunnumero, jos halutaan päivittää laskua niin tämä on avain. Uusissa laskuissa 0 (kommentti Aina '0')"
    },
    {
    "from": "inv_date*",
    "to": "Invoice_date",
    "description": "laskun päiväys (kommentti Jos ei annettu => kuluva päivä)"
    },
    {
    "from_preference": "custom/lemon/export_lemon_invoice.language_code[inv_additional_data.invoicing_address.country]",
    "from_default": "FIN",
    "to": "Language_code",
    "description": "Laskun kielikoodi (kommenteissa: Jos tyhjä, hakee Lemon järjestelmän oletuksen eli 'FIN')"
    },
    {
    "from_function": "currentDateString",
    "to": "Current_date",
    "description": ""
    },
    {
    "from": "inr_tbl",
    "to": "/ArrayOfInvoice/Invoice/InvoiceRows/InvoiceRow",
    "array": [
      {
      "from": "inr_customer_row_number",
      "to": "Row_position",
      "description": "Rivin positio"
      }
    ]
    }
    ]
    }
    ]
  }

- esim 2: json to json:

```json
  {
  "convert": [
  {
  "from": "coad_name",
  "to": "name"
  },
  {
  "from": "coad_name_2",
  "to": "name_2"
  }
  ]
  }
```


### run_code esimerkki

```json
        {
          "database": "4d",
          "name": "workpost_gig/call",
          "info": "general workpost_gig event call",
          "run": [
            [
              "return_data",
              "=",
              "workpost_gig.call",
              [
                [
                  "database",
                  "param"
                ]
              ]
            ],
            ["update_and_save"]
          ],
          "function": {
            "update_and_save":[...]
          }
        }
```

### script-esimerkki

```json
        {
          "info": "",
          "field": {
            "co_post_office": [
              ["co_post_office", "=", ["_str_Format", ["co_post_office"]]],
              ["co_TEE_TEKSTIOSO"]
            ],
            "co_post_code": [
              ["co_post_office", "=", ["_str_Format", ["co_post_office"]]],
              ["co_TEE_TEKSTIOSO"]
            ]
          },
          "function": {
            "co_TEE_TEKSTIOSO": [
              ["co_text_address", "=", "co_name"],
              [
              "if",["co_address","<>",""],
                [
                  ["co_text_address","=",["concat",["co_text_address", "\n", "co_address"]]]
                ]
              ],
              [
              "if",["co_post_code","<>",""],
                [
                  ["co_text_address","=","co_text_address..\n..co_post_code"],
                  ["if",["co_post_office","<>",""],
                    [
                      ["co_text_address","=",["concat",["co_text_address", " ", "co_post_office"]]]
                    ]
                  ]
                ],
              "elseif",["co_post_office","<>",""],
                [
                  ["co_text_address","=",["concat",["co_text_address", "\n", "co_post_office"]]]
                ],
              "else",
                [
                  ["co_text_address","=","co_text_address"]
                ]
              ]
            ]
          }
        }
````
