private ArrayList FillDistinctCodes(ArrayList orderItems, AmzIFace.AmazonMerchant am, UtilityMaietta.genSettings s) //, DateTime dataInvoice)
    {
        double myprice;
        int    pos = 0;

        AmzIFace.CodiciDist cd;
        ArrayList           res = new ArrayList();

        if (orderItems != null)
        {
            foreach (AmazonOrder.OrderItem oi in orderItems)
            {
                if (oi.prodotti != null && oi.prodotti.Count > 0)
                {
                    foreach (AmazonOrder.SKUItem si in oi.prodotti)
                    {
                        if (si.lavorazione)
                        {
                            //myprice = oi.prezzo.ConvertPrice(am.GetRate()) * (si.prodotto.prezzopubbl * 1.22) / (oi.PubblicoInSKU() * 1.22);
                            myprice = oi.prezzo.ConvertPrice(am.GetRate()) * (si.prodotto.prezzopubbl * s.IVA_MOLT) / (oi.PubblicoInSKU() * s.IVA_MOLT);
                            cd      = new AmzIFace.CodiciDist(si.prodotto, si.qtscaricare * oi.qtOrdinata, myprice);
                            if (!res.Contains(cd))
                            {
                                res.Add(cd);
                            }
                            else
                            {
                                pos = res.IndexOf(cd);
                                ((AmzIFace.CodiciDist)res[pos]).AddQuantity(si.qtscaricare * oi.qtOrdinata, myprice);
                            }
                        }
                    }
                }
            }
        }
        return(res);
    }
    protected void btnMakePdf_Click(object sender, EventArgs e)
    {
        string errore = "";

        UtilityMaietta.Utente u = (UtilityMaietta.Utente)Session["Utente"];
        //string amzOrd = Request.Form["txNumOrd"].ToString();
        string amzOrd = Request.QueryString["amzOrd"].ToString();

        bool regalo = (Request.Form["chkRegalo"] != null && Request.Form["chkRegalo"].ToString() == "on");
        bool mov    = (Request.Form["chkMovimenta"] != null && Request.Form["chkMovimenta"].ToString() == "on") ? true : false;
        bool comm   = (Request.Form["chkSendRisp"] != null && Request.Form["chkSendRisp"].ToString() == "on") ? true : false;

        DateTime invoiceDate = calInvoiceData.SelectedDate;

        UtilityMaietta.infoProdotto ip;
        int             count = 0;
        string          pos;
        string          codprod;
        int             codforn, qt;
        double          costo;
        OleDbConnection cnn = new OleDbConnection(settings.OleDbConnString);
        OleDbConnection wc  = new OleDbConnection(settings.lavOleDbConnection);

        wc.Open();
        cnn.Open();

        // CHECK DISPONIBILITA
        if (mov)
        {
            foreach (GridViewRow gvr in gridProducts.Rows)
            {
                pos     = (count + 2).ToString().PadLeft(2, '0');
                codprod = gvr.Cells[colCodProd].Text;
                codforn = int.Parse(gvr.Cells[colCodForn].Text);
                costo   = double.Parse(Request.Form["gridProducts$ctl" + pos + "$txCosto_" + count.ToString().Replace(",", ".")].ToString());
                qt      = int.Parse(Request.Form["gridProducts$ctl" + pos + "$txQt_" + count.ToString()].ToString());
                ip      = new UtilityMaietta.infoProdotto(codprod, codforn, cnn, settings);
                if (ip.getDispDate(cnn, DateTime.Now, false) < qt || ip.getDispDate(cnn, invoiceDate, true) - (qt) < 0)
                {
                    wc.Close();
                    cnn.Close();
                    btnMakePdf.Enabled = false;
                    Response.Write("Quantità indicata non disponibile!");
                    return;
                }
                count++;
            }
        }

        // RECUPERA ORDINE
        AmazonOrder.Order order;
        if (Session[amzOrd] == null)
        {
            order = AmazonOrder.Order.ReadOrderByNumOrd(amzOrd, amzSettings, aMerchant, out errore);
        }
        else
        {
            order = (AmazonOrder.Order)Session[amzOrd];
        }
        if (order == null || errore != "")
        {
            Response.Write("Impossibile contattare amazon, riprova più tardi!<br />Errore: " + errore);
            return;
        }
        if (order.Items == null || order.Items.Count == 0)
        {
            order.RequestItems(amzSettings, aMerchant);
        }

        if (order.Items == null || order.Items.Count == 0)
        {
            Response.Write("Impossibile contattare amazon, riprova più tardi!<br />Errore: " + errore);
            return;
        }

        int vettS = int.Parse(dropVettori.SelectedValue.ToString());
        int invoiceNum;

        /// IMPORTO DEFINITIVAMENTE L'ORDINE CON I VALORI della precedente schermata.

        if (Request.QueryString["amzInv"] != null && int.Parse(Request.QueryString["amzInv"].ToString()) > 0)
        {
            // ORDINE GIA' COMPLETAMENTE IMPORTATO E CON RICEVUTA, SOLO NUOVE MOVIMENTAZIONI
            invoiceNum = int.Parse(Request.QueryString["amzInv"].ToString());
        }
        else if (order.IsFullyImported() || order.IsImported())
        {
            // ORDINE COMPLETAMENTE IMPORTATO, CREO NUMERO RICEVUTA e MOVIMENTAZIONI
            invoiceNum = order.UpdateFullStatus(wc, cnn, amzSettings, aMerchant, invoiceDate, vettS, false);
        }
        else
        {
            // ORDINE DA IMPORTARE,  CREO NUMERO RICEVUTA E MOVIMENTAZIONI
            invoiceNum = order.SaveFullStatus(wc, cnn, amzSettings, aMerchant, invoiceDate, vettS, false);
        }

        string siglaV = dropVettori.SelectedItem.Text;

        // EMETTI FATTURA
        AmzIFace.AmazonInvoice.makeInvoicePdf(amzSettings, aMerchant, order, invoiceNum, regalo, invoiceDate, siglaV, chkOpenLav.Checked);
        string inv = aMerchant.invoicePrefix(amzSettings) + invoiceNum.ToString().PadLeft(2, '0');

        // MOVIMENTA SINGOLO CODICE

        count = 0;
        List <AmzIFace.CodiciDist>  lip = new List <AmzIFace.CodiciDist>();
        List <AmzIFace.ProductMaga> pm  = new List <AmzIFace.ProductMaga>();

        AmzIFace.ProductMaga prod;
        AmzIFace.CodiciDist  cd;

        int cdpos;

        foreach (GridViewRow gvr in gridProducts.Rows)
        {
            pos     = (count + 2).ToString().PadLeft(2, '0');
            codprod = gvr.Cells[colCodProd].Text;
            codforn = int.Parse(gvr.Cells[colCodForn].Text);
            costo   = double.Parse(Request.Form["gridProducts$ctl" + pos + "$txCosto_" + count.ToString()].ToString().Replace(",", "."));
            qt      = int.Parse(Request.Form["gridProducts$ctl" + pos + "$txQt_" + count.ToString()].ToString());
            ip      = new UtilityMaietta.infoProdotto(codprod, codforn, cnn, settings);

            if (mov)
            {
                ip.AmzMovimenta(cnn, inv, order.orderid, invoiceDate, costo, qt, order.dataUltimaMod, amzSettings, u);

                prod = new AmzIFace.ProductMaga();
                prod.codicemaietta = ip.codmaietta;
                //prod.price = costo / 1.22;
                prod.price = costo / settings.IVA_MOLT;
                prod.qt    = qt;
                pm.Add(prod);
            }

            cd = new AmzIFace.CodiciDist(ip, qt, costo);
            if (!lip.Contains(cd))
            {
                lip.Add(cd);
            }
            else
            {
                cdpos = lip.IndexOf(cd);
                lip[cdpos].AddQuantity(qt, costo);
            }
            count++;
        }
        cnn.Close();
        Session["freeProds"] = lip;

        if (mov)
        {
            UtilityMaietta.writeMagaOrder(pm, amzSettings.AmazonMagaCode, settings, 'F');
        }

        if (comm && Request.Form["dropRisposte"] != null && Request.Form["dropRisposte"].ToString() != "0")
        {
            int risposta = int.Parse(Request.Form["dropRisposte"].ToString());
            if (risposta != 0)
            {
                string fixedFile = AmazonOrder.Order.GetInvoiceFile(amzSettings, aMerchant, invoiceNum);
                AmazonOrder.Comunicazione com = new AmazonOrder.Comunicazione(risposta, amzSettings, aMerchant);
                string subject = com.Subject(order.orderid);
                string attach  = (com.selectedAttach && File.Exists(fixedFile)) ? fixedFile : "";
                bool   send    = UtilityMaietta.sendmail(attach, amzSettings.amzDefMail, order.buyer.emailCompratore, subject,
                                                         com.GetHtml(order.orderid, order.destinatario.ToHtmlFormattedString(), order.buyer.nomeCompratore), false, "", "", settings.clientSmtp,
                                                         settings.smtpPort, settings.smtpUser, settings.smtpPass, false, null);
            }
        }

        if (chkOpenLav.Checked)
        {
            /// APRI LAVORAZIONE
            Response.Redirect("lavAmzOpen.aspx?token=" + Request.QueryString["token"].ToString() +
                              "&amzOrd=" + order.orderid + "&invnumb=" + inv + "&freeProds=" + lip.Count.ToString() +
                              MakeQueryParams());
        }
        else
        {
            /// TORNA IN HOME
            Response.Redirect("amzPanoramica.aspx?token=" + Session["token"].ToString() + MakeQueryParams());
        }
    }