JSON incrementar vários itens do pedido

Colegas, essa função apresentada abaixo getPedido() faz a inclusão de um pedido com um item de venda. Eu gostaria de que ela inserisse não apenas um item, mas vários de acordo com a quantidade que eu tenha no meu banco de dados. Sei que tenho que fazer select na base antes, mas o que não estou sabendo fazer é um foreach para incluir quantos itens de venda eu tenha pra o meu pedido e deixar nesta estrutura para enviar em json.

O trecho de código de que preciso para deixar dinâmico e incremental é este:

"produto" => [
          "cfop" => "5.102",//dinamico
          "codigo_produto" => "1398561571",//dinamico
          "descricao" => "Mouse sem fio Microsoft",//dinamico
          "ncm" => "9504.10.99",
          "quantidade" => 1,//varia
          "tipo_desconto" => "V",//varia
          "unidade" => "UN",
          "valor_desconto" => 0,
          "valor_unitario" => 200
        ] 

Aqui está o código completo:

 function getPedido() {
    $cod_pedido_integracao = 9;
  $pedido = [
    "cabecalho" => [
      "codigo_cliente" => 1398561351,//dinamico
      "codigo_pedido_integracao" => "$cod_pedido_integracao",//dinamico
      "data_previsao" => "21/12/2020",//dinamico
      "etapa" => "10",//fixo
      "numero_pedido" => "4",//dinamico
      "codigo_parcela" => "999",//fixo
      "quantidade_itens" => 2//dinamico
    ],
    "det" => [
      [
        "ide" => [
          "codigo_item_integracao" => "999"//fixo
        ],
        "inf_adic" => [
          "peso_bruto" => 150,//dinamico
          "peso_liquido" => 150//dinamico
        ],
        "produto" => [
          "cfop" => "5.102",//dinamico
          "codigo_produto" => "1398561571",//dinamico
          "descricao" => "Mouse sem fio Microsoft",//dinamico
          "ncm" => "9504.10.99",
          "quantidade" => 1,//varia
          "tipo_desconto" => "V",//varia
          "unidade" => "UN",
          "valor_desconto" => 0,
          "valor_unitario" => 200
        ]
      ]
    ],
    "frete" => [
      "modalidade" => "9"
    ],
    "informacoes_adicionais" => [
      "codigo_categoria" => "1.01.03",
      "codigo_conta_corrente" => 1398561339,
      "consumidor_final" => "S",
      "enviar_email" => "N"
    ],
    "lista_parcelas" => [
      "parcela" => [
        [
          "data_vencimento" => "22/12/2020",
          "numero_parcela" => 1,
          "percentual" => 50,
          "valor" => 100
        ],
        [
          "data_vencimento" => "08/02/2021",
          "numero_parcela" => 2,
          "percentual" => 50,
          "valor" => 100
        ]
      ]
    ]
  ];

  return $pedido;
}

Alguém poderia colocar a mão no código e me dar essa força de que preciso? Faz algumas semanas que não consigo andar com esse código.

Você precisa de um indice para os itens do pedido, e não vejo esse indice no array acima citado.

Olá Haroldo! Pois é, não sei como fazer. Se você puder dar um exemplo, fico grato.

Colei seu array numa blank e tem o indice sim.

cabecalho->det->0 //item 1 do pedido

para inserir os itens dinamicamente use aproximadamente isso:

$fields=['cfop','codigo_produto','descricao','ncm','quantidade','tipo_desconto','unidade','valor_desconto','valor_unitario'];
sc_lookup(ds, "Select cfop, codigo_produto, descricao, ..., peso_bruto, peso_liquido from itens_pedido where id_pedido = $idPedido");
$itens = [];
foreach ($ds as $key => $line) {
      $itens[$key]['ide']['codigo_item_integracao'] = 999;
      $itens[$key]['inf_adic']['peso_bruto']=$line[9];
      $itens[$key]['inf_adic']['peso_liquido']=$line[10];
      for ($i = 0; $i <= 8; $i++) {
             $itens[$key]['produto'][$fields[$i]] = $value;
      }   
  }
}

$pedido['det']=$itens;
$pedido_json = json_encode($pedido);

*NOTA:*Não testei esse código, apenas usei a lógica e suas informações e sugeri o código escrevendo-o diretamente nessa janela aqui.

Use como uma orientação.

Só montei a parte dinamica dos itens, os dados restante do array como cabecalho vc deve carregar antecipadamente em $pedidos.

1 Curtida

Valeu, @InfinitusWeb. Vou tentar montar aqui. Assim que conseguir, informo aqui.