Example #1
0
        private void AddFooters()
        {
            Font fontHorz = new Font("Tahoma", 7, FontStyle.Bold);

            StringFormat sfRight = new StringFormat();

            sfRight.Alignment = StringAlignment.Far;

            for (int page = 0; page < PdfOrdenCompra.Pages.Count; page++)
            {
                // select page we want (could change PageSize)
                PdfOrdenCompra.CurrentPage = page;

                // build rectangles for rendering text
                RectangleF rcPage   = GetPageRect();
                RectangleF rcFooter = rcPage;
                rcFooter.Y      = rcFooter.Bottom + 6;
                rcFooter.Height = 12;
                RectangleF rcVert = rcPage;
                rcVert.X = rcPage.Right + 6;

                // add left-aligned footer
                string text = AppSettings.NomSede + " - " + AppSettings.UbicacionSede + "  TEL: " + AppSettings.TelfSede;
                PdfOrdenCompra.DrawString(text, fontHorz, Brushes.Black, rcFooter);

                // add right-aligned footer
                string TextVertical = string.Format("Page {0} of {1}", page + 1, PdfOrdenCompra.Pages.Count);
                PdfOrdenCompra.DrawString(TextVertical, fontHorz, Brushes.Black, rcFooter, sfRight);

                // draw lines on bottom and right of the page
                PdfOrdenCompra.DrawLine(Pens.Black, rcPage.Left, rcPage.Bottom, rcPage.Right, rcPage.Bottom);
            }
        }
Example #2
0
        internal RectangleF RenderParagraph(string text, Font font, RectangleF rcPage, RectangleF rc, bool outline, int Tipo)
        {
            // if it won't fit this page, do a page break
            rc.Height = PdfOrdenCompra.MeasureString(text, font, rc.Width).Height;
            if (rc.Bottom > rcPage.Bottom)
            {
                PdfOrdenCompra.NewPage();
                rc.Y = rcPage.Top;
            }

            // draw the string
            StringFormat sf = new StringFormat();

            if (Tipo == 1)
            {
                sf.Alignment     = StringAlignment.Center;
                sf.LineAlignment = StringAlignment.Center;
                PdfOrdenCompra.DrawString(text, font, Brushes.Black, rc, sf);
            }
            else if (Tipo == 2)
            {
                sf.Alignment     = StringAlignment.Near;
                sf.LineAlignment = StringAlignment.Near;
                PdfOrdenCompra.DrawString(text, font, Brushes.Black, rc, sf);
            }
            else if (Tipo == 3)
            {
                sf.Alignment     = StringAlignment.Far;
                sf.LineAlignment = StringAlignment.Far;
                PdfOrdenCompra.DrawString(text, font, Brushes.Black, rc, sf);
            }


            //add headings to outline
            if (outline)
            {
                PdfOrdenCompra.DrawLine(Pens.Black, rc.X, rc.Y, rc.Right, rc.Y);
            }


            // update rectangle for next time
            rc.Offset(0, rc.Height);
            return(rc);
        }
Example #3
0
        private RectangleF RenderTableRow(Font font, Font hdrFont, RectangleF rcPage, RectangleF rc, string[] fields, DataRow dr)
        {
            // calculate cell width (same for all columns)
            RectangleF rcCell = rc;

            rcCell.Width  = rc.Width / fields.Length;
            rcCell.Height = 0;

            // calculate cell height (max of all columns)
            rcCell.Inflate(-4, 0);
            foreach (string field in fields)
            {
                string text   = dr[field].ToString();
                float  height = PdfOrdenCompra.MeasureString(text, font, rcCell.Width).Height;
                rcCell.Height = Math.Max(rcCell.Height, height);
            }
            rcCell.Inflate(4, 0);

            // break page if we have to
            if (rcCell.Bottom > rcPage.Bottom)
            {
                PdfOrdenCompra.NewPage();
                rc       = RenderTableHeader(hdrFont, rcPage, fields);
                rcCell.Y = rc.Y;
            }

            // center vertically just to show how
            StringFormat sf = new StringFormat();

            sf.LineAlignment = StringAlignment.Near;

            // render data cells
            Pen pen = new Pen(Brushes.Gray, 0.1f);

            foreach (string field in fields)
            {
                // get content
                string text = dr[field].ToString();

                // set horizontal alignment
                double d;
                sf.Alignment = (double.TryParse(text, NumberStyles.Any, CultureInfo.CurrentCulture, out d))
                    ? StringAlignment.Near
                    : StringAlignment.Near;

                // render cell
                if (field == "ProductoID")
                {
                    rcCell.Width = 75;
                }
                else if (field == "Descripcion")
                {
                    rcCell.Width = 220;
                }
                else if (field == "UM")
                {
                    rcCell.Width = 30;
                }
                else if (field == "CantidadSolicitada")
                {
                    rcCell.Width = 50;
                    sf.Alignment = StringAlignment.Far;
                }
                else if (field == "Costo")
                {
                    rcCell.Width = 50;
                    sf.Alignment = StringAlignment.Far;
                }
                else if (field == "PorcIGV")
                {
                    rcCell.Width = 50;
                    sf.Alignment = StringAlignment.Far;
                }
                else if (field == "Total")
                {
                    rcCell.Width = 50;
                    sf.Alignment = StringAlignment.Far;
                }
                PdfOrdenCompra.DrawRectangle(pen, rcCell);
                rcCell.Inflate(-4, 0);

                PdfOrdenCompra.DrawString(text, font, Brushes.Black, rcCell, sf);
                rcCell.Inflate(4, 0);
                rcCell.Offset(rcCell.Width, 0);
            }
            pen.Dispose();

            // update rectangle and return it
            rc.Offset(0, rcCell.Height);
            return(rc);
        }
Example #4
0
        private RectangleF RenderTableHeader(Font font, RectangleF rc, params string[] fields)
        {
            // calculate cell width (same for all columns)
            RectangleF rcCell = rc;

            rcCell.Width  = rc.Width / fields.Length;
            rcCell.Height = 0;

            // calculate cell height (max of all columns)
            foreach (string field in fields)
            {
                float height = PdfOrdenCompra.MeasureString(field, font, rcCell.Width).Height;
                rcCell.Height = Math.Max(rcCell.Height, height);
            }

            // render header cells
            StringFormat sf = new StringFormat();

            foreach (string field in fields)
            {
                sf.Alignment     = StringAlignment.Center;
                sf.LineAlignment = StringAlignment.Center;

                if (field == "ProductoID")
                {
                    rcCell.Width = 75;
                }
                else if (field == "Descripcion")
                {
                    rcCell.Width = 220;
                }
                else if (field == "UM")
                {
                    rcCell.Width = 30;
                }
                else if (field == "CantidadSolicitada")
                {
                    rcCell.Width = 50;
                }
                else if (field == "Costo")
                {
                    rcCell.Width = 50;
                }
                else if (field == "PorcIGV")
                {
                    rcCell.Width = 50;
                }
                else if (field == "Total")
                {
                    rcCell.Width = 50;
                }

                PdfOrdenCompra.FillRectangle(Brushes.Gray, rcCell);
                if (field == "ProductoID")
                {
                    PdfOrdenCompra.DrawString("ID", font, Brushes.White, rcCell, sf);
                }
                else if (field == "Descripcion")
                {
                    PdfOrdenCompra.DrawString("Descripcion", font, Brushes.White, rcCell, sf);
                }
                else if (field == "UM")
                {
                    PdfOrdenCompra.DrawString("UM", font, Brushes.White, rcCell, sf);
                }
                else if (field == "CantidadSolicitada")
                {
                    PdfOrdenCompra.DrawString("Cantidad", font, Brushes.White, rcCell, sf);
                }
                else if (field == "Costo")
                {
                    PdfOrdenCompra.DrawString("Costo", font, Brushes.White, rcCell, sf);
                }
                else if (field == "PorcIGV")
                {
                    PdfOrdenCompra.DrawString("% IGV", font, Brushes.White, rcCell, sf);
                }
                else if (field == "Total")
                {
                    PdfOrdenCompra.DrawString("Total", font, Brushes.White, rcCell, sf);
                }
                rcCell.Offset(rcCell.Width, 0);
            }

            // update rectangle and return it
            rc.Offset(0, rcCell.Height);
            return(rc);
        }
Example #5
0
        public void CrearPdfOC(DataTable dt, string NumOrdenCompra, string LugarEntrega, E_OrdenCompra ObjOrdenCompra)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                if (C1tdbCompra.RowCount == 0)
                {
                    Cursor = Cursors.Default;
                    return;
                }

                if (CbProveedor.SelectedValue == null)
                {
                    MessageBox.Show("Seleccione el Proveedor.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    Cursor = Cursors.Default;
                    return;
                }

                DataView dvProveedor = new DataView(dtProveedor);
                dvProveedor.RowFilter = "IDProveedor='" + CbProveedor.SelectedValue + "'";
                string EmailProveedor     = Convert.ToString(dvProveedor[0]["Email"]);
                string NomProveedor       = Convert.ToString(dvProveedor[0]["RazonSocial"]);
                string RucProveedor       = Convert.ToString(dvProveedor[0]["NroDocumento"]);
                string DireccionProveedor = Convert.ToString(dvProveedor[0]["Direccion"]);
                string ProveedorTelefono  = Convert.ToString(dvProveedor[0]["Telefono"]);


                //create pdf document
                this.PdfOrdenCompra.Clear();
                this.PdfOrdenCompra.DocumentInfo.Title = "ORDEN COMPRA";


                RectangleF   rcPageT = new RectangleF(200, 50, 200, 30);
                StringFormat sf      = new StringFormat();
                sf.Alignment     = StringAlignment.Center;
                sf.LineAlignment = StringAlignment.Center;

                Font titleFont = new Font("Arial", 20, FontStyle.Regular);
                PdfOrdenCompra.DrawString("ORDEN COMPRA", titleFont, Brushes.Black, rcPageT, sf);


                //calculate page rect (discounting margins)
                RectangleF rcPage = GetPageRect();
                RectangleF rc     = rcPage;

                Image     img = Properties.Resources.HalleyLogo;
                Rectangle RC  = new Rectangle(30, 50, 160, 44);
                PdfOrdenCompra.DrawImage(img, RC);
                PdfOrdenCompra.DrawRectangle(Pens.White, RC);

                Rectangle RcCAbeceraIzq = new Rectangle(30, 100, 340, 45);
                Rectangle RcCAbeceraDer = new Rectangle(375, 100, 180, 45);
                Rectangle RcCAbeceraPro = new Rectangle(30, 150, 525, 45);

                Font detalleFont = new Font("Tahoma", 9, FontStyle.Regular);


                rc.Y = rc.Bottom + 5;
                StringFormat sfd = new StringFormat();
                sfd.Alignment     = StringAlignment.Near;
                sfd.LineAlignment = StringAlignment.Near;

                StringFormat sfi = new StringFormat();
                sfi.Alignment     = StringAlignment.Far;
                sfi.LineAlignment = StringAlignment.Far;

                StringBuilder sbizq = new StringBuilder();
                sbizq.Append(" " + AppSettings.NomEmpresa + "\n");
                sbizq.Append(" RUC: " + AppSettings.RUCEmpresa + "\n");
                sbizq.Append(" Dirección: " + LugarEntrega.PadRight(50, ' ') + "Telefono: " + AppSettings.TelfSede);

                PdfOrdenCompra.DrawString(sbizq.ToString(), detalleFont, Brushes.Black, RcCAbeceraIzq, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcCAbeceraIzq);

                StringBuilder sbder = new StringBuilder();
                sbder.Append(" ORDEN Nº: " + NumOrdenCompra + "\n");
                sbder.Append(" FECHA EMISIÓN: " + DateTime.Now.ToShortDateString() + "\n");
                sbder.Append(" CONDICIÓN: " + ObjOrdenCompra.Condicion + "\n");
                sbder.Append(" DIAS CREDITO: " + ObjOrdenCompra.DiasCredito + " dias");

                PdfOrdenCompra.DrawString(sbder.ToString(), detalleFont, Brushes.Black, RcCAbeceraDer, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcCAbeceraDer);

                StringBuilder sbPro = new StringBuilder();
                sbPro.Append(" Proveedor: " + NomProveedor + "\n");
                sbPro.Append(" RUC: " + RucProveedor.PadRight(50, ' ') + "Telefono: " + ProveedorTelefono + "\n");
                sbPro.Append(" Dirección: " + DireccionProveedor);

                PdfOrdenCompra.DrawString(sbPro.ToString(), detalleFont, Brushes.Black, RcCAbeceraPro, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcCAbeceraPro);

                rc.Y = 200;
                rc   = RenderTable(rc, rcPage, dt, "ProductoID", "Descripcion", "UM", "CantidadSolicitada", "Costo", "PorcIGV", "Total");

                //para los resumenes

                rc.Y += 10;

                Rectangle     RcResumen = new Rectangle(Convert.ToInt16(rc.X), Convert.ToInt16(rc.Y), 525, 100);
                StringBuilder sbObs     = new StringBuilder();
                sbObs.Append(" Observación:");
                PdfOrdenCompra.DrawString(sbObs.ToString(), detalleFont, Brushes.Black, RcResumen, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcResumen);

                Rectangle     RcObservacion = new Rectangle(Convert.ToInt16(rc.X + 90), Convert.ToInt16(rc.Y + 5), 200, 80);
                StringBuilder sbTObs        = new StringBuilder();
                sbTObs.Append(ObjOrdenCompra.Observacion);
                PdfOrdenCompra.DrawString(sbTObs.ToString(), detalleFont, Brushes.Black, RcObservacion, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcObservacion);

                #region Calculando Valores
                decimal TOTAL = 0;

                TOTAL = ObjOrdenCompra.Subtotal + ObjOrdenCompra.PorcIGV - ObjOrdenCompra.Descuento + ObjOrdenCompra.Recargo + ObjOrdenCompra.Otros;

                #endregion



                Rectangle     RcDetalleResumen1 = new Rectangle(Convert.ToInt16(rc.X + 295), Convert.ToInt16(rc.Y + 5), 100, 80);
                StringBuilder sbDRes1           = new StringBuilder();
                sbDRes1.Append("Sub Total : " + "\n");
                sbDRes1.Append("(-) % de Descuento : " + "\n");
                sbDRes1.Append("(+) % de Recargo : " + "\n");
                sbDRes1.Append("(+ -) otros : " + "\n");
                sbDRes1.Append("% I.G.V. :" + "\n");
                sbDRes1.Append("TOTAL : ");
                PdfOrdenCompra.DrawString(sbDRes1.ToString(), detalleFont, Brushes.Black, RcDetalleResumen1, sfi);
                //PdfOrdenCompra.DrawRectangle(Pens.Gray, RcDetalleResumen1);

                Rectangle     RcDetalleResumen2 = new Rectangle(Convert.ToInt16(rc.X + 395), Convert.ToInt16(rc.Y + 5), 100, 80);
                StringBuilder sbDRes2           = new StringBuilder();
                sbDRes2.Append(ObjOrdenCompra.Subtotal.ToString("C") + "\n");
                sbDRes2.Append(ObjOrdenCompra.Descuento.ToString("C") + "\n");
                sbDRes2.Append(ObjOrdenCompra.Recargo.ToString("C") + "\n");
                sbDRes2.Append(ObjOrdenCompra.Otros.ToString("C") + "\n");
                sbDRes2.Append(ObjOrdenCompra.PorcIGV.ToString("C") + "\n");
                sbDRes2.Append(TOTAL.ToString("C"));
                PdfOrdenCompra.DrawString(sbDRes2.ToString(), detalleFont, Brushes.Black, RcDetalleResumen2, sfi);
                //PdfOrdenCompra.DrawRectangle(Pens.Gray, RcDetalleResumen2);


                Rectangle     RcMontoLetra = new Rectangle(Convert.ToInt16(rc.X + 20), Convert.ToInt16(rc.Y + 87), 400, 10);
                StringBuilder sbMle        = new StringBuilder();
                sbMle.Append("Son: " + new TextFunctions().enletras(TOTAL.ToString()));
                PdfOrdenCompra.DrawString(sbMle.ToString() + " Nuevos Soles", detalleFont, Brushes.Black, RcMontoLetra, sfd);
                //PdfOrdenCompra.DrawRectangle(Pens.Gray, RcMontoLetra);

                //Agregar espacio para firmas

                Rectangle     RcFirma = new Rectangle(Convert.ToInt16(rc.X), Convert.ToInt16(rc.Y) + 105, 525, 30);
                StringBuilder sbFir   = new StringBuilder();
                sbFir.Append("\n                     Elaborado por: ___________________            Autorizado Por: ___________________");
                PdfOrdenCompra.DrawString(sbFir.ToString(), detalleFont, Brushes.Black, RcFirma, sfd);
                PdfOrdenCompra.DrawRectangle(Pens.Gray, RcFirma);

                // second pass to number pages
                AddFooters();

                //enviar correo
                string NomArchivo = NumOrdenCompra + ".pdf";
                string fileName   = "D:\\ORDEN_COMPRA\\" + NomArchivo;
                this.PdfOrdenCompra.Save(fileName);

                string ruta = "D:\\ORDEN_COMPRA\\" + NomArchivo;

                string Asunto  = "ORDEN_COMPRA " + AppSettings.NomEmpresa;
                string Mensaje = "Comprare los siguientes productos.\nAdjuntado en el pdf.";
                new CL_Helper().SendMail(Asunto, Mensaje, EmailProveedor, AppSettings.UserEmail, ruta);
                Process.Start(ruta);

                Cursor = Cursors.Default;
            }
            catch (Exception ex)
            {
                Cursor = Cursors.Default;
                MessageBox.Show(ex.Message, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }