pasos para aplicacion comercial

Upload: diana-carolina-russi

Post on 07-Jul-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Pasos Para Aplicacion Comercial

    1/136

    , Fecha, IdConcepto, IdBodega 

    1. En cliente:- cuando se actualiza y adiciona nuevo un dato no se ve reflejado en la gv- cuando es persona natural no escribe nombre y aplellido de contacto en el nombre

    comercial- no sirve quitar filtros ni nada de filtros del formulario buscarcliente- no actuliza gv al borrar 2. en ptos- debería al guardar limpiar gv3. en compras- limpiar proveedor y bodega cuando se agrega

    traslado de bodega copia codigo de compra y vta

    !arra "e#iste!arra$ %nsert!arra$ &elete!arra$ DeleteBarraByIdProducto)

    Bodega(ExisteBodega)

    BodegaPto(GetBodegaProductoByIdBodegaAndIdProducto,GetBodegaProductoByIdBodegaAndIdProducto, UpdateBodegaProducto,InsertBodegaProducto, Auentar!toc", DeleteBodegaProductoByIdProducto)

    Cliente(InsertCliente, UpdateCliente, deleteCliente)

    Copra(InsertCliente, pro#eedor$ieneCopras

    copraDetalle(insertCopraDetalle)

    concepto(existeConcepto)

    departaento(existeDepartaento)i#a(geti#a)

    %A&DE'(I!E&$%A&DE', %A&DE'$IEE*+P*&IDP$*, %A&DE'$IEE*+P*&IDB*DEGA)

    'E()%*+(+,"'E&EE($ 'E&E)+&$ 'E&E!+((/(0

    '+ "E'+!%&'+$ E'+!!/((/0

    '(+EE&+("'&/E'(+$ &E,EE'(+0

    %'+&+4"E5%*E%'+&+4

    */(%+"E5%*E*/(%+$ /,%&/*/(%+$ 4/)!%+4,/E$ E*/(%+0

    *e borraron los siguientes proc almacenados

    - &elete barra

  • 8/19/2019 Pasos Para Aplicacion Comercial

    2/136

    - &elete4liente- E#iste!arra- E#iste4oncepto- E#iste&epartamento- E#isteipo&ocumento- E#istenidad)edida

    - et!odega'roducto!y%d!odega/nd%d'roducto- %nsert!arra- %nsert!odega'roducto- %nsert4liente- )antenimientoablas- pdate!odega'roducto- pdate4liente

    1. 6ase 1 creaci7n de la base de datos.2. 6ase 2 se realizara una aplicaci7n stand alone con arquitectura cliente servidor: una

    aplicaci7n local que se instala en cada m8quina.3. 6ase 3 /plicaci7n 9eb comparte capa con la fase 2.

    .;. 6ase aplicaci7n m7vil a trav

  • 8/19/2019 Pasos Para Aplicacion Comercial

    3/136

    Video 1.1 niciando

    1. 'ara quitar minimizar y ma#imizar propiedades  maximeBox  y minimeBox  en false y

    startpositon: center*creen2. Ejecutar proyecto.3. 4omenzar a darle funcionalidad primero el bot7n cancelar doble clic y escribir el siguiente

    c7digo

    t?is.4lose"0H para así cerrar el formulario actual

    . /l presionar aceptar escribiremos lo siguientea. alidar que se ?alla ingresado usuario y contrase@a para eso se agrega al formulario un

    error pro!iderb. ,o que se escribe es lo siguiente

    if  "t#tsuario.e#t II JJ0

    Kerror'rovider1.*etError"t#tsuario$ J&ebe ingresar un usuarioJ0Ht#tsuario.6ocus"0H

    returnHLerror'rovider1.*etError"t#tsuario$ JJ0H

    if  "t#t4lave.e#t II JJ0Kerror'rovider1.*etError"t#t4lave$ J&ebe ingresar una claveJ0Ht#t4lave.6ocus"0HreturnHLerror'rovider1.*etError"t#t4lave$ JJ0H

    ;. /?ora si vamos a la base de datos que la toca el 4/& agregamos en el proyecto 4/& >

    nuevo elemento > datos > conjunto de datos > llamamos ds/plicacion4omercial "ds es laabreviatura de dataset0 es el encargado de conectar a la bd$ se activa el e#plorador de

    servidoresA. Macer clic en el icono de conectar a bd > en nombre de servidor en este caso es &%/N/-

    '4O*P,E5'(E** "sin instancia seria solo .0 en nombre de la bd buscarla en la lista y

    probar cone#i7nC. /rrastrar tabla usuario y tabla rolD. 4rear una consulta > crear procedimiento almacenado > como se est8 preguntando si el

    usuario es v8lido o no eso es un select que devuelve un solo valor y colocar esto*E,E4 1 6(+) suaro =ME(E %dsuario I Q%dsuario /N& 4lave I Q4lave

    F. El nombre del procedimiento y de la consulta es alidasuario y finalizar 1G. *e prueba con clic derec?o > vista previa de datos.11. 4rear una clase para utilizar la consulta la clase llamada class1 la renombramos

    CA"#suario "para ?acer crud de usuario0 y en esa clase escribir lo siguiente

    'rivate static ds/plicacion4omercialable/dapters.suarioable/dapter 

    Video 1.$ lo%in

    1. 4ontinuamos con lo que se escribe en la clase para que no quede tan largo se deja así y

    como saca error clic en el cuadrito azul se le da ctrl. y darle en la 1ra opci7n

  • 8/19/2019 Pasos Para Aplicacion Comercial

    4/136

    'rivate static suarioable/dapter "un adaptador es un objeto muy importante en sql en el

    lado .net #q

  • 8/19/2019 Pasos Para Aplicacion Comercial

    5/136

    Video $ 'enus

    1. /rrastrar la ?mienta menustrip que tendr8 las siguientes opciones con sus diferentes

    opciones cada una

    • B/rc?ivo

    B!odegas B4lientes 4Bonceptos B'roductos "B&epartamentos$ B%/$ B'roductos$ Bnidades de medida0 'rBoveedores Bipo de documento Bsuarios

    Masta ac8 son las tablas maestras que son las que se les puede ?acer crud "separador 

    con -0

    4aBmbio de suario

    4amBbio de claveuion

    B*alir • B)ovimientos "no se pueden modificar$ afecta varias tablas mínimo tablas0

    B4ompras B&evoluciones "&e clientes$ / 'roveedores Braslados Bentas• B4onsultas

    BSarde#• B(eportes

    B%nventario Bentas•  /Byuda

     /Bcerca de  /Byuda

  • 8/19/2019 Pasos Para Aplicacion Comercial

    6/136

     /ntes de todo toca activarle un evento al formulario principal para cuando este se cierre la

    aplicaci7n tambi

  • 8/19/2019 Pasos Para Aplicacion Comercial

    7/136

    Kfrm4lientes mi6orm I ne9 frm4lientes"0Hmi6orm.)di'arent I t?isHmi6orm.*?o9"0HL

    2. )iramos en la table clientes los campos que tienen y de esos cuales son los obligatorio3. 4olocar los controles para ?acer el formulario label$ te#tbo#

    %dsuario "label0 no se modifica porque es autonumerico "e#tbo#0 su propiedad

    readonly: true

    %dipo&ocumento"label0 combobo# "tipo de documento0

    . ,o que se ?ace en el combobo# para que salga la lista de tipo de documentoa. %r al ds y arrastrar la tabla tipodocumentob. El ds de aplicaci7n comercial se tiene que crear al otro proyecto para ?acer las consultas

    en proyecto aplicaci7n comercial > agregar > nuevo elemento > llamamos

    ds/plicacion4omercial > arrastrar todas las tablas "utiliza para llenar gridvie9$ combos0

    c. En el control tipo de documento > usar elementos enlazados a datos > otros orígenes dedatos > &*/plicacion4omercial > llenar ori%en de datos:  tipodedocumento$ mostrar 

    miembro: &escripci7n "alor que se va a mostrar0 miembro de !alor: %dtipo&ocumento$

    !alor seleccionado: ninguno.d. 'robar y colocar la propiedad enabled del combobo# en falsee. &ocumento "te#tbo# y readonly true0f. Nombre comercial "aplica para las empresas0 en personas naturales nombre de contacto

    puede ser la misma empresa se ?aría lo mismo con todos los dem8s campos todos con

    label y te#tbo#

    Video $.* C(#"& clientes car%ar datos en %rid

    1. *eguir ?aciendo formulario clientes desde correo el campo aniversario se ?ace con

    control datetimepicVer colocarle enable en false y notas al te#tbo# se le coloca lapropiedad multiline en true y Scrolbals: vertical

    2. 4olocar abajo un datagridvie9 con nombre dgv&atos y definimos las siguientes

    propiedades anchor: seleccionar todas queden negrilla.3. amos a crear una clase 4/& que devuelva todos los clientes para llenarlos en la

    cuadricula. amos al ds del 4/& y arrastramos la tabla cliente ya se tiene una consulta getdata que

    devuelve todos los clientes pero no se puede usar si no se tiene clase para acceder a esa

    consulta;. 4rear clase que permita manipular clientesA. 'ara manipular los datos necesitamos un objeto que es un adaptador de la clase cliente

    que se crea con el siguiente c7digo en 4/&4lienteprivate static 4lienteable/dapter  adaptador I ne9 4lienteable/dapter "0Hpublic static ds/plicacion4omercial .4liente&ataable et&ata"0Kreturn adaptador.et&ata"0HL

  • 8/19/2019 Pasos Para Aplicacion Comercial

    8/136

    *e ?izo un m

  • 8/19/2019 Pasos Para Aplicacion Comercial

    9/136

    private void )ostrar(egistros"0 K a est8 antes de lo ingresado anteriormenteif  "dgv&atos.(o9s.4ount II G0 returnH

    . 'robar;. 47digo para bot7n siguiente

    private void tsb*iguienteT4licV"object sender$ Event/rgs e0Kif  "i ZI dgv&atos.(o9s.4ount - 10 returnHiWWH)ostrar(egistros"0HL

    A. 4odigo bot7n anterior 

    private void tsb/nteriorT4licV"object sender$ Event/rgs e0Kif  "i II G0 returnH

     i--H)ostrar(egistros"0HL

    C. 47digo para mostrar el primeroprivate void tsb'rmeroT4licV"object sender$ Event/rgs e0Ki I GH)ostrar(egistros"0HL

    D. 47digo para ir al Ultimo registro

    private void tsbltimoT4licV"object sender$ Event/rgs e0Ki I dgv&atos.(o9s.4ount - 1H)ostrar(egistros"0HL

    F. 4omo por fec?as puede molestar si esta es nula ?acemos lo siguiente con el

    dtpaniversario en load frm4lientes lo colocamos en un try

    try

    Kdtp/niversario.alue I 4onvert.o&ateime"dgv&atos.(o9sXiY.4ellsXJ/niversarioJY.alue0HL

    catc? "E#ception0Kdtp/niversario.alue I &ateime.No9HL

    1G. 'robar 

    Video * crud clientes botones editar y nue!o

    1. !ot7n guardar y cancelar colocar enable: false

  • 8/19/2019 Pasos Para Aplicacion Comercial

    10/136

    2. 'ara bot7n editar los botones de la barra de ?erramientas ?abilitados se des?abilitan y

    viceversa y lo mismo con los controles del formulario a e#cepci7n del %&4liente3. 4lic en l8piz"editar0 se ?ace este codigo se crea procedimiento ?abilitar4ampos"0

    private void tsb)odificarT4licV"object sender$ Event/rgs e0

    KMabilitar4ampos"0H ctl W .L'rivate void Mabilitar4ampos "0Ktsb'rmero.Enabled I falseHtsbltimo.Enabled I falseHtsb/nterior.Enabled I falseHtsb*iguiente.Enabled I falseHtsb)odificar.Enabled I falseHtsbNuevo.Enabled I falseHtsb!orrar.Enabled I falseHtsb!uscar.Enabled I falseHtsbuardar.Enabled I trueHtsb4ancelar.Enabled I trueH t#t&ocumento.(ead+nly I falseHt#tNombres4ontacto.(ead+nly I falseHt#t/pellidos4ontacto.(ead+nly I falseHt#tNombre4omercial.(ead+nly I falseHt#t&ireccion.(ead+nly I falseHt#telefono1.(ead+nly I falseHt#telefono2.(ead+nly I falseHt#t4orreo.(ead+nly I falseHt#tNotas.(ead+nly I falseHcmbipo&ocumento.Enabled I trueHdtp/niversario.Enabled I trueH

    cmbipo&ocumento.6ocus"0H

    . El bot7n cancelar se ?ace lo siguiente

    'rivate void  tsb4ancelarT4licV"object sender$ Event/rgs e0K&es?abilitar4ampos"0H ctl W .)ostrar(egistros"0HL

    'rivate void &es?abilitar4ampos"0Ktsb'rmero.Enabled I trueHtsbltimo.Enabled I trueHtsb/nterior.Enabled I trueHtsb*iguiente.Enabled I trueHtsb)odificar.Enabled I trueHtsbNuevo.Enabled I trueHtsb!orrar.Enabled I trueH

  • 8/19/2019 Pasos Para Aplicacion Comercial

    11/136

    tsb!uscar.Enabled I trueHtsbuardar.Enabled I falseHtsb4ancelar.Enabled I falseH

    t#t&ocumento.(ead+nly I trueHt#tNombres4ontacto.(ead+nly I trueH

    t#t/pellidos4ontacto.(ead+nly I trueHt#tNombre4omercial.(ead+nly I trueHt#t&ireccion.(ead+nly I trueHt#telefono1.(ead+nly I trueHt#telefono2.(ead+nly I trueHt#t4orreo.(ead+nly I trueHt#tNotas.(ead+nly I trueHcmbipo&ocumento.Enabled I falseHdtp/niversario.Enabled I falseHL

    ;. '(+!/(A. 'ara bot7n nuevo

    private void tsbNuevoT4licV"object sender$ Event/rgs e0KMabilitar4ampos"0H,impiar4ampos"0H ctl W.L

    private void ,impiar4ampos"0Kt#t%&4liente.e#t I JJHt#t&ocumento.e#t I JJHt#tNombres4ontacto.e#t I JJHt#t/pellidos4ontacto.e#t I JJH

    t#tNombre4omercial.e#t I JJHt#t&ireccion.e#t I JJHt#telefono1.e#t I JJHt#telefono2.e#t I JJHt#t4orreo.e#t I JJHt#tNotas.e#t I JJHcmbipo&ocumento.*elected%nde# I -1Hdtp/niversario.alue I &ateime.No9H

    LC. 'ara saber si se digito o no un registro nuevo "si no es nuevo era registro editado0D. En bot7n editar

    nuevo I falseHF. En el bot7n nuevo

    nuevo I trueHpara saber si al presionar guardar se le dio esta opci7n por ser registro nuevo omodificado

    Video *.1 crud clientes botón %uardar 

    1. 'ara ?acer el bot7n guardar primero ?ay que validar se debe utilizar un errorprovider arrastra a cualquier parte del formulario

  • 8/19/2019 Pasos Para Aplicacion Comercial

    12/136

    *e valida que los campos obligatorios no est

  • 8/19/2019 Pasos Para Aplicacion Comercial

    13/136

    3. oca saber si lo que se ?ace es un insert o un update. oca manipular datos;. %r al proyecto de datos y crear dos metodoss "insert$ update0A. El adaptador tiene insrt$ update y delete pero es mejor construir unas nuevas para asi

    tener controlC. 4rear procedimiento de insertar > agregar consulta > nuevo proc alm > insert

    %N*E( %N+ XdboY.X4lienteY "X%dipo&ocumentoY$ X&ocumentoY$ XNombre4omercialY$XNombres4ontactoY$ X/pellidos4ontactoY$ X&ireccionY$ Xelefono1Y$ Xelefono2Y$ X4orreoY$XNotasY$ X/niversarioY0 /,E* "Q%dipo&ocumento$ Q&ocumento$ QNombre4omercial$QNombres4ontacto$ Q/pellidos4ontacto$ Q&ireccion$ Qelefono1$ Qelefono2$Q4orreo$ QNotas$ Q/niversario0H,lamado %nsert4liente

    D. En la clase 4/&4liente creamos el m

  • 8/19/2019 Pasos Para Aplicacion Comercial

    14/136

    string elefono2$ string 4orreo$ string Notas$ &ateime /niversario$ int %d4liente0Kadaptador.pdate4liente"%dipo&ocumento$ &ocumento$ Nombre4omercial$Nombres4ontacto$

     /pellidos4ontacto$ &ireccion$ elefono1$ elefono2$ 4orreo$ Notas$ /niversario$ %d4liente0HL

    &eletepublic static void &elete4liente"int %d4liente0Kadaptador.&elete4liente"%d4liente0HL

    2. 4uando se diga guardar a?ora si se llenaif  "Ralidar4ampos"00 returnHif  "nuevo0K4/&4liente.%nsert4liente""int0cmbipo&ocumento.*electedalue$ t#t&ocumento.e#t$

    t#tNombre4omercial.e#t$ t#tNombres4ontacto.e#t$ t#t/pellidos4ontacto.e#t$t#t&ireccion.e#t$ t#telefono1.e#t$ t#telefono2.e#t$ t#t4orreo.e#t$t#tNotas.e#t$ dtp/niversario.alue0HLelseK4/&4liente.pdate4liente""int0cmbipo&ocumento.*electedalue$ t#t&ocumento.e#t$t#tNombre4omercial.e#t$ t#tNombres4ontacto.e#t$ t#t/pellidos4ontacto.e#t$t#t&ireccion.e#t$ t#telefono1.e#t$ t#telefono2.e#t$ t#t4orreo.e#t$ t#tNotas.e#t$dtp/niversario.alue$ 4onvert.o%nt32"t#t%&4liente.e#t00HL&es?abilitar4ampos"0H

    dgv&atos.&ata*ource I nullHdgv&atos.&ata*ource I 4/&4liente.et&ata"0Hif  "nuevo0 tsbltimoT4licV"sender$ e0H)ostrar(egistros"0H

    3. 'robar. Macer bot7n eliminar 

    private void tsb!orrarT4licV"object sender$ Event/rgs e0K&ialog(esult rta I )essage!o#.*?o9"JEsta seguro que desea borrar el registro actualJ$J4onfirmacionJ$ )essage!o#!uttons.esNo$ )essage!o#%con.Puestion$)essage!o#&efault!utton.!utton20H

    if  "rta II &ialog(esult.No0 returnH4/&4liente.&elete4liente"4onvert.o%nt32"t#t%&4liente.e#t00Hdgv&atos.&ata*ource I nullHdgv&atos.&ata*ource I 4/&4liente.et&ata"0Hif  "i RI G0 i--H)ostrar(egistros"0HL

  • 8/19/2019 Pasos Para Aplicacion Comercial

    15/136

    Video + C(#" ,ro!eedores parte 1

    1. /gregamos formulario para ?acer proveedores2. amos a la barra de ?erramientas que se llama orígenes de datos la sacamos de ver >

    otras ventanas > orígenes de datos3. 4ojo la tabla proveedores y se arrastra al formulario. 4olocarle propiedad anchor: todos grises;. amos al formulario principal y darle clic en proveedores y escribir 

    private void proveedoresool*trip)enu%temT4licV"object sender$ Event/rgs e0

    K

    frm'roveedores miform I ne9 frm'roveedores"0Hmiform.)di'arent I t?isHmiform.*?o9"0HL

    A. 'robar

    En caso de que no ?aya registros para que no saque error se ?ace una validaci7n debajo

    de

    private void )ostrar(egistros"0

      K a est8 antes de lo ingresado anteriormente  if  "dgv&atos.(o9s.4ount II G0 returnH solo para tener en cuenta aUn no se ?a

    ?ec?o

    C. +rganizar formulario y colocarle nombres y orden de tabulaci7n

    Video +.1 C(#" ,ro!eedores parte $

    1. /rreglarle a la cuadricula para colocarle las tilde con editar columnas en la propiedad

    ?eader te#t y ponerle c?ulito solo en ?abilitar reordenaci7n.

  • 8/19/2019 Pasos Para Aplicacion Comercial

    16/136

    2. Macer funcionar el combo bo#

    sar elementos enlazados a datos-r%enes de datos: tipodocumento'ostrar miembro: descripci7n'iembro de !alor: id tipodoc

    Valor seleccionado: ninguno*.  /ctivarle al combobo# la propiedad buscada por categoría databindin%  la opci7n

    selected!alue / proveedor!inding*ource > %dipo&ocumento y la opci7n text: ninguno+. 'ara que en la cuadricula no salga el codigo del tipo de documento si no que salga la

    descripci7n le damos en la flec?ita de la cuadricula > editar columnas > tipo &ocumento >en la opci7n column type > lo cambio por combo!o#4olumn y arriba sale la pesta@a datosdonde solicita el datasource: ipo&ocumento!inding*ource "isplay'ember:&escripci7n

    0. *eleccionar todos los te#tbo# y colocarle la propiedad readonly: true y el combobo# ybot7n guardar se le coloca la propiedad enabled: false

    Video +.$. C(#" ,ro!eedores parte *

    1. 4ambiarle los nombres a la barra de ?erramientas y agregar bot7n de editar y los otrosbotones y colocarle codigo de editar 

    private void bn)odificarT4licV"object sender$ Event/rgs e0KMabilitar4ampos"0H ctl W .L

    private void Mabilitar4ampos"0Kbn'rimero.Enabled I falseHbn/nterior.Enabled I falseH

    bn/ctual.Enabled I falseHbn4antidad(egistros.Enabled I falseHbn*iguiente.Enabled I falseHbnltimo.Enabled I falseHbn)odificar.Enabled I falseHbnNuevo.Enabled I falseHbn!orrar.Enabled I falseHbn4ancelar.Enabled I trueHbn!uscar.Enabled I falseHbnuardar.Enabled I trueH cmbipo&ocumento.Enabled I trueH

    t#t&ocumento.(ead+nly I falseHt#tNombres4ontacto.(ead+nly I falseHt#t/pellidos4ontacto.(ead+nly I falseHt#tNombre.(ead+nly I falseHt#t&ireccion.(ead+nly I falseHt#telefono1.(ead+nly I falseHt#telefono2.(ead+nly I falseHt#t4orreo.(ead+nly I falseHt#tNotas.(ead+nly I falseH

  • 8/19/2019 Pasos Para Aplicacion Comercial

    17/136

    L2. probar 3. En el bot7n guardar colocar el siguiente codigo debajo del que ya se coloc7

    autom8ticamente

    private void bnuardarT4licV"object sender$ Event/rgs e0

    Kt?is.alidate"0Ht?is.proveedor!inding*ource.EndEdit"0Ht?is.table/dapter)anager.pdate/ll"t?is.d*/plicacion4omercial0H&es?abilitar4ampos"0H ctl W .L

    private void &es?abilitar4ampos"0Kbn'rimero.Enabled I trueHbn/nterior.Enabled I trueHbn/ctual.Enabled I trueH

    bn4antidad(egistros.Enabled I trueHbn*iguiente.Enabled I trueHbnltimo.Enabled I trueHbn)odificar.Enabled I trueHbnNuevo.Enabled I trueHbn!orrar.Enabled I trueHbn4ancelar.Enabled I falseHbn!uscar.Enabled I trueHbnuardar.Enabled I falseH

    cmbipo&ocumento.Enabled I falseHt#t&ocumento.(ead+nly I trueH

    t#tNombres4ontacto.(ead+nly I trueHt#t/pellidos4ontacto.(ead+nly I trueHt#tNombre.(ead+nly I trueHt#t&ireccion.(ead+nly I trueHt#telefono1.(ead+nly I trueHt#telefono2.(ead+nly I trueHt#t4orreo.(ead+nly I trueHt#tNotas.(ead+nly I trueHL

    . 'robar ;. Macer bot7n de cancelar el c7digo es

    private void bn4ancelarT4licV"object sender$ Event/rgs e0Kt?is.proveedor!inding*ource.4ancelEdit"0H&es?abilitar4ampos"0HL

    A. 'robar

  • 8/19/2019 Pasos Para Aplicacion Comercial

    18/136

    Video 0 C(#" ,ro!eedores parte +

    1. 4ogemos el objeto llamado proveedor!indingNavigator de la parte de abajo del formulario

    y cambiamos dos propiedades para asi dejar esos botones sin opci7n y podemos

    nosotros tomar control de esos botones las propiedad Addewtem: ninguno y

    "eletetem: ninguno.2. (evisar en la base de datos en la tabla proveedor cuales datos son obligatorios para

    ?acerle las respectivas validaciones.3. /@adir un errorprovider. En doble clic guardar y seguir con el codigo

    private void bnuardarT4licV"object sender$ Event/rgs e0Kif  "Ralidar4ampos"00 returnHt?is.alidate"0Ht?is.proveedor!inding*ource.EndEdit"0H finaliza edici7n y graba los cambiost?is.table/dapter)anager.pdate/ll"t?is.d*/plicacion4omercial0H actualiza la cuadriculade abajo&es?abilitar4ampos"0H

    L

    private bool alidar4ampos"0Kif  "cmbipo&ocumento.*elected%nde# II -10Kerror'rovider1.*etError"cmbipo&ocumento$ J&ebe seleccionar un tipo de documentoJ0Hcmbipo&ocumento.6ocus"0Hreturn falseHLerror'rovider1.*etError"cmbipo&ocumento$ JJ0Hif  "t#t&ocumento.e#t II JJ0

    Kerror'rovider1.*etError"t#t&ocumento$ J&ebe ingresar un nUmero de documentoJ0Ht#t&ocumento.6ocus"0Hreturn falseHLerror'rovider1.*etError"t#t&ocumento$ JJ0Hif  "t#tNombres4ontacto.e#t II JJ0Kerror'rovider1.*etError"t#tNombres4ontacto$ J&ebe ingresar al menos un nombre decontactoJ0Ht#tNombres4ontacto.6ocus"0Hreturn falseH

    Lerror'rovider1.*etError"t#tNombres4ontacto$ JJ0Hif  "t#t/pellidos4ontacto.e#t II JJ0Kerror'rovider1.*etError"t#t/pellidos4ontacto$ J&ebe ingresar al menos un apellido decontactoJ0Ht#t/pellidos4ontacto.6ocus"0H return falseHL

  • 8/19/2019 Pasos Para Aplicacion Comercial

    19/136

      error'rovider1.*etError"t#t/pellidos4ontacto$ JJ0HL

    if  "t#tNombre.e#t II JJ0

    K

    error'rovider1.*etError"t#tNombre$ J&ebe ingresar un nombre de proveedorJ0Ht#tNombre.6ocus"0Hreturn falseHLerror'rovider1.*etError"t#tNombre$ JJ0Hreturn trueH

    Video 0.1 C(#" ,ro!eedores parte 0

    1. alidamos que el correo sea v8lido para eso toca agregar una clase llamada(ege#tilities en aplicaci7n comercial > agregar elemento e#istente > y buscar la claserege#tilities esta clase tiene un m

  • 8/19/2019 Pasos Para Aplicacion Comercial

    20/136

    K /rmaNombre"0H ctl W .L

    private void /rmaNombre"0K

    if  "cmbipo&ocumento.*elected%nde# II 10Kt#tNombre.e#t I t#tNombres4ontacto.e#t W J J W t#t/pellidos4ontacto.e#tH  LLprivate void t#t/pellidos4ontactoTe#t4?anged"object sender$ Event/rgs e0K

     /rmaNombre"0HL

    2. %ntervenir el bot7n eliminar 

    private void bn!orrarT4licV"object sender$ Event/rgs e0K&ialog(esult rta I )essage!o#.*?o9"JEst8 seguro que desea borrar el registro actualJ$J4onfirmaci7nJ$ )essage!o#!uttons.esNo$ )essage!o#%con.Puestion$)essage!o#&efault!utton.!utton20H

    if  "rta II &ialog(esult.No0 returnHproveedor!inding*ource.(emove/t"proveedor!inding*ource.'osition0Hthis-ta.leAdapteranager-UpdateAll(this-d!AplicacionCoercial)/

    falta validar que cuando un proveedor ya se le ?a ?ec?o una compra no se pueda borrarL%N*E( %N+ XdboY.X'roveedorY "X%dipo&ocumentoY$ X&ocumentoY$ XNombres4ontactoY$

    X/pellidos4ontactoY$ XNombreY$ X&ireccionY$ Xelefono1Y$ Xelefono2Y$ X4orreoY$ XNotasY0/,E* "QNombre$ Q%dipo&ocumento$ Q&ocumento$ QNombres4ontacto$Q/pellidos4ontacto$ Q&ireccion$ Qelefono1$ Qelefono2$ Q4orreo$ QNotas0H

    '&/E XdboY.X'roveedorY *E X%dipo&ocumentoY I Q%dipo&ocumento$ X&ocumentoY IQ&ocumento$ XNombres4ontactoY I QNombres4ontacto$ X/pellidos4ontactoY IQ/pellidos4ontacto$ XNombreY I QNombre$ X&ireccionY I Q&ireccion$ Xelefono1Y IQelefono1$ Xelefono2Y I Qelefono2$ X4orreoY I Q4orreo$ XNotasY I QNotas =ME(EX%d'roveedorY I Q%d'roveedor 

    &E,EE 6(+) XdboY.X'roveedorY =ME(E X%d'roveedorY I Q%d'roveedor 

    pu.lic class CADPro#eedor  0  pri#ate static  Pro#eedor$a.leAdapter adaptador 1 ne2 Pro#eedor$a.leAdapter()/

      pu.lic static  dsAplicacionCoercial -Pro#eedorData$a.le GetData()  0  return adaptador-GetData()/  3

      pu.lic static #oid UpdatePro#eedor( int Id$ipoDocuento, string Docuento,

  • 8/19/2019 Pasos Para Aplicacion Comercial

    21/136

      string o.resContacto, string ApellidosContacto, string o.re, string Direccion,string $ele4ono5,  string $ele4ono6, string Correo, string otas, Date$ie Ani#ersario, int IdPro#eedor)  0  adaptador-UpdatePro#eedor(Id$ipoDocuento, Docuento, o.resContacto,ApellidosContacto, o.re, Direccion,  $ele4ono5, $ele4ono6, Correo, otas, IdPro#eedor)/

      3

      pu.lic static #oid DeletePro#eedor(int IdPro#eedor)  0  adaptador-DeletePro#eedor(IdPro#eedor)/  3  3

    Video 2 B3s4ueda de pro!eedores parte 1

    1. 4rear un nuevo formulario para la bUsqueda de proveedores llamado

    frm!usqueda'roveedor 

  • 8/19/2019 Pasos Para Aplicacion Comercial

    22/136

    2. 4olocar una cuadricola donde se muestran todos los proveedores para eso arrastrar

    control dataridie9 llamarlo dgv!usqueda y en el triangulito en elegir orígenes de datos

    escogemos la tabla proveedor 3. 'ersonalizamos cuadricula los nombres de los campos y solo dejar ?abilitado opci7n de

    reordenaci7n.. %r al formulario de proveedores y clic en icono de buscar y colocar el siguiente codigo

    private void bn!uscarT4licV"object sender$ Event/rgs e0Kfrm!usqueda'roveedor  mi!usqueda I ne9 frm!usqueda'roveedor "0Hmi!usqueda.*?o9&ialog"0H abrir formulario como modal y es de dialogo por lo que no sepuede ?acer clic en otro ladoL

    ;. 4ambiar los c7digos de los tipos de documentos por la descripci7n desde la [gridvie9 en

    el triangulo colocar el columntype: combobo# en datos la opci7n datasource: tabla tipo

    de documento displaymenber:  descripci7n !aluemember:  idtipodoc y la propiedad

    anchor: esquinas.

    A. +tra vez en el triangulito > agregar consulta copiar lo siguiente

    *E,E4 %d'roveedor$ Nombre$ %dipo&ocumento$ &ocumento$ Nombres4ontacto$

     /pellidos4ontacto$ &ireccion$ elefono1$ elefono2$ 4orreo$ Notas

    6(+) dbo.'roveedor =ME(E &ocumento ,%SE Q&ocumento

     /N& Nombre ,%SE QNombre /N& Nombres4ontacto ,%SE QNombres4ontacto

     /N& /pellidos4ontacto ,%SE Q/pellidos4ontacto aceptar 

    C. 4ambiar el fiiby1 la propiedad displayStyle: %mage y colocarle una imagen y el

    tooltip5ext: /plica los criterios de bUsqueda seleccionados y cambiarle nombres a los

    te#tbo# que se crearonD. %ntervenir ese bot7n de bUsqueda

    Video 2.1 B3s4ueda pro!eedores parte $

    1. 4olocar un groupbo# llamarlo tipo criterio2. 4olocar radiobutton para los criterios de bUsqueda contenga\$ empiece por\$ termine

    en\$ igual a\ y seleccionamos contenga y colocamos propiedad chec6ed: true3. !otones de aceptar y cancelar del formulario login y la propiedad anchor: bottom$ rig?t y

    no olvidar colocarle nombres a los radiobutton. 'robar ;. 4ompletar el bot7n

    private void fill!yool*trip!uttonT4licV"object sender$ Event/rgs e0

    Kstring &ocumento$ Nombre$ Nombre4ontacto$ /pellido4ontactoH

    if  "rbt4ontenga.4?ecVed II true0K&ocumento I J]J W tst#t&ocumento.e#t W J]JHNombre I J]J W tst#tNombre.e#t W J]JHNombre4ontacto I J]J W tst#tNombres4ontacto.e#t W J]JH

     /pellido4ontacto I J]J W tst#t/pellidos4ontacto.e#t W J]JH

  • 8/19/2019 Pasos Para Aplicacion Comercial

    23/136

    Lelse if  "rbtEmpiece.4?ecVed II true0K&ocumento I tst#t&ocumento.e#t W J]JHNombre I tst#tNombre.e#t W J]JHNombre4ontacto I tst#tNombres4ontacto.e#t W J]JH

     /pellido4ontacto I tst#t/pellidos4ontacto.e#t W J]JHLelse if  "rbtermine.4?ecVed II true0K&ocumento I J]J W tst#t&ocumento.e#tHNombre I J]J W tst#tNombre.e#tHNombre4ontacto I J]J W tst#tNombres4ontacto.e#tH

     /pellido4ontacto I J]J W tst#t/pellidos4ontacto.e#tHLelseK&ocumento I tst#t&ocumento.e#tH

    Nombre I tst#tNombre.e#tHNombre4ontacto I tst#tNombres4ontacto.e#tH

     /pellido4ontacto I tst#t/pellidos4ontacto.e#tHL tryKt?is.proveedorable/dapter.6ill!y"t?is.d*/plicacion4omercial.'roveedor$&ocumento$ Nombre$ Nombre4ontacto$ /pellido4ontacto0HLcatc? "*ystem.E#ception e#0K

    *ystem.=indo9s.6orms.)essage!o#.*?o9"e#.)essage0HLL

    A. 'robar C. 4olocar bot7n para que quite los filtros con el siguiente c7digo

    private void btnPuitar6iltrosT4licV"object sender$ Event/rgs e0Ktst#t&ocumento.e#t I JJHtst#tNombre.e#t I JJHtst#tNombres4ontacto.e#t I JJHtst#t/pellidos4ontacto.e#t I JJH

    fill!yool*trip!uttonT4licV"sender$ e0HL

    Video 2.$ B3s4ueda pro!eedores parte *

    1. En el formulario de bUsqueda de proveedores crear un atributo privado y con esto

    comunicar el idcliente entre los dos formularios el de proveedor y el de bUsqueda

    public partial class frm!usqueda'roveedor  : 6ormK

  • 8/19/2019 Pasos Para Aplicacion Comercial

    24/136

    private int id'roveedorH 4, ( W Epublic int %&'roveedor Kget K return id'roveedorH LL

    2. !Usqueda de proveedor al presionar cancelar 

    private void btn4ancelarT4licV"object sender$ Event/rgs e0

    K

    id'roveedor I GHt?is.4lose"0HL

    3. *i se presiona el bot7n aceptar se debe validar 'ueden pasar 3 cosas cuando se ?ace bUsquedaPue este vacío

    Pue no se ?aya seleccionado ninguno y se asume que es el 1ro&e los registros buscados se ?aya seleccionado alguno de la gridvie94on este codigo en bot7n aceptar para que devuelva registro seleccionado o buscado al

    otro formulario

    private void btn/ceptarT4licV"object sender$ Event/rgs e0Kif  "dgv!usqueda.(o94ount II G0Kid'roveedorI GHLelse if  "dgv!usqueda.*elected(o9s.4ount RI G0K

    id4'roveedor I "int0dgv!usqueda.*elected(o9sXGY.4ellsXGY.alueHLElseKid'roveedorI "int0dgv!usqueda.(o9sXGY.4ellsXGY.alueHLt?is.4lose"0HL

    . 4lic buscar de proveedor y adicionar 

    mi!usqueda.*?o9&ialog"0H

    if  "mi!usqueda.%&'roveedor II G0 returnHint position I proveedor!inding*ource.6ind"J%&'roveedorJ$ mi!usqueda.%&'roveedor0Hproveedor!inding*ource.'osition I positionH

    ;. 'robar 

     Video 7 Validación de documento 3nico y C(#" ,roductos parte 1

    1. Para 7ue no se re#iente la aplicaci8n cuando se eten dos registros con eliso tipo de documento y el mismo documento ?acemos lo siguiente en bot7n guardar 

  • 8/19/2019 Pasos Para Aplicacion Comercial

    25/136

    if  "Ralidar4ampos"00 returnH

    t?is.alidate"0H

    t?is.proveedor!inding*ource.EndEdit"0HtryKt?is.table/dapter)anager.pdate/ll"t?is.d*/plicacion4omercial0HLcatc? "E#ception0Kerror'rovider1.*etError"t#t&ocumento$ JEse nUmero de documento ya esta asgnadoJ0Ht#t&ocumento.6ocus"0HreturnHLerror'rovider1.4lear"0H&es?abilitar4ampos"0H

    2. Macer crud clientes$ bodegas$ conceptos$ departamento$ unidades de medida$ tipo doc

    falta validaci7n de que no se repita una bodega$ departamento$ unidad de medida$ tipo

    doc

    3. /l ?acer el crud de productos en ese mismo crud se podr8 agregar los c7digos de barras

    asociados a ese producto y par8metros de bodega. /gregar formulario frm'roductos;. +rígenes de datos - tabla productos definirle propiedad anc?or

    Video 7.1 C(#" ,roductos parte $

    5- En el 4orulario principal en la opci8n productos colocar

    4rProductos i4or 1 ne2 4rProductos()/

    i4or-diParent 1 this/i4or-!ho2()/

    2. 4ambiarle nombre a la barra de ?erramientos$ los botones$ personalizar gridvie9

    departamento ponerle combobo# y definirle propiedades valor seleccionado

    "producto!inding*ource > id&epartamento0 y en las propiedades no olvidar en la

    propiedad te#t colocar ninguno y ?acer lo mismo con %/3. 'robar . 'ersonalizar todo eso en la gridvie9 tambi

  • 8/19/2019 Pasos Para Aplicacion Comercial

    26/136

    - o iso con par

  • 8/19/2019 Pasos Para Aplicacion Comercial

    27/136

    - Para .odega lo iso- clic a .odegaproducto.indingsource de los aparecen a.ao5- agregar consulta

    !EEC$ IdBodega, IdProducto, !toc", inio, axio, Dias&eposicion, CantidadiniaF&* d.o-BodegaProductoHE&E IdProducto 1 IdProducto

    55- crea el Jll.y nos sir#e codigo de guis clc ah? ca.iarlo por el de arri.a de .odega producto

    y o#erlo al e#ento llenargrillas 7uedando asipri#ate #oid lenarGrillas()0KK $*D*O esta l?nea de c8digo carga datos en la ta.la d!AplicacionCoercial-Barra Puedeo#erla o 7uitarla segQn sea necesario-this-.arra$a.leAdapter-FillBy5(this-d!AplicacionCoercial-Barra,Con#ert-$oInt96(txtIdProducto-$ext))/KK $*D*O esta l?nea de c8digo carga datos en la ta.lad!AplicacionCoercial-BodegaProducto Puede o#erla o 7uitarla segQn sea necesario-this-.odegaProducto$a.leAdapter-FillBy(this-d!AplicacionCoercial-BodegaProducto,Con#ert-$oInt96(txtIdProducto-$ext))/3

    56- .orrar .arra y codigo try del Jll.y59- pro.ar5:- personali>ar cuadricula de .arras idpto propiedad visible: 4alse y .arra alinearla

    iddleright y .arra colocarla as grande de 5;px5;- personali>ar cuadricula par

  • 8/19/2019 Pasos Para Aplicacion Comercial

    28/136

    6- Inter#enir el .ot8n odiJcar con el codigo 7ue se tiene en pro#eedores yodiJcarlo ade

  • 8/19/2019 Pasos Para Aplicacion Comercial

    29/136

    pri#ate #oid CargarIagen()0i4  (txtIagen-$ext 11 string-Epty)0p.xIagen-Iage 1 null/3else

    0i4  (File-Exists(txtIagen-$ext))0p.xIagen-oad(txtIagen-$ext)/33

    ;. En los botones de primero ultimo$ etc despuca una #entanaodal para adicionar c8digos de .arras y lo iso en eliinar

    6- Agregar 4orulario llaado 4rBarras colocarle un la.el llaado .arra y eltext.ox 7ue perita adicionar la .arra y .otones de aceptar y cancelar

    9- Para par

  • 8/19/2019 Pasos Para Aplicacion Comercial

    30/136

    0.arra 1 /this-Close()/3

    1G. 'ara el bot7n aceptar el siguiente codigo de validaciones vacio$ num

  • 8/19/2019 Pasos Para Aplicacion Comercial

    31/136

    $. 'ara poder accede a esta consulta se necesita una clase que pueda usar esa consulta en el

    proyecto 4/& agregamos la clase 4/&!arra a la clase que se crea toca colocarla publica y un

    m

  • 8/19/2019 Pasos Para Aplicacion Comercial

    32/136

    2. En el bot7n agregar barra que esta en formulario ptos despues de mostrar el formulario barra

    i4or-!ho2Dialog()/i4  (i4or-Barra 11 ) return/CADBarra-InsertBarra(Con#ert-$oInt96(txtIdProducto-$ext), i4or-Barra)/ this-.arra$a.leAdapter-FillBy5(this-d!AplicacionCoercial-Barra,Con#ert-$oInt96(txtIdProducto-$ext))/ KKeste ultio se coe de el Ntodo llenargirllas() la

    parte de .arra ya 7ue no se in#oca coo tal x7 el ta.iNn llena la ta.la .odegaProducto

    7. 'robar8. Macer bot7n eliminar 

    pri#ate #oid .tnEliinarBarraRClic"(o.ect sender, E#entArgs e)0Dialog&esult rta 1 essageBox-!ho2(Est< seguro 7ue desea .orrar la .arra,ConJraci8n, essageBoxButtons-Seso, essageBoxIcon-Luestion, essageBoxDe4aultButton-Button6)/i4  (rta 11 Dialog&esult-o) return/3

    9.  $oca ir al dataset para hacer la consulta de eliinar .arra llaa deleteBarraC

    1.En el CADBarra despues del insertBarra colocaospu.lic static #oid DeleteBarra(long Barra)0adapter-DeleteBarra(Barra)/3

    Video

  • 8/19/2019 Pasos Para Aplicacion Comercial

    33/136

    D. 4uando se carga formulario a@adimos este codigo para que no seleccione la primera opcion por

    defecto

    pri#ate #oid 4rParaetrosBodegaRoad(o.ect sender, E#entArgs e)0KK $*D*O esta l?nea de c8digo carga datos en la ta.la d!AplicacionCoercial-Bodega Puedeo#erla o 7uitarla segQn sea necesario-this-.odega$a.leAdapter-Fill( this-d!AplicacionCoercial-Bodega)/c.Bodegas-!electedIndex 1 5/3

    F. /@adimos los controles segUn campos de la tabla !odega'roducto con te#tbo# del stocV conreadonly y para los que son nUmeros un control llamado numericupdo9n

    1G. &emos doble clic en combobo# de bodega11. amos al ds y agregamos tabla bodega'roducto12. Magamos un m

  • 8/19/2019 Pasos Para Aplicacion Comercial

    34/136

    0CADBodegaProducto iBodegaProducto 1 null/dsAplicacionCoercial -BodegaProductoData$a.le i$a.la 1adapter-GetBodegaProductoByIdBodegaAndIdProducto(IdBodega, IdProducto)/

    i4  (i$a.la-&o2s-Count 11 ) return iBodegaProducto/dsAplicacionCoercial -BodegaProducto&o2 i&egistro 1

    (dsAplicacionCoercial -BodegaProducto&o2)i$a.la-&o2sYZ/ KKiregistro tiene lain4oracion de ese registro coo tal

    KKiregistro se con#ierte al o.eto asiiBodegaProducto 1 ne2 CADBodegaProducto()/

    KKC$I+A& P&*PIEDADE!iBodegaProducto-Cantidadinia 1 ([oat)i&egistro-Cantidadinia/iBodegaProducto-Dias&eposicion 1 i&egistro-Dias&eposicion/iBodegaProducto-IdBodega 1 i&egistro-IdBodega/iBodegaProducto-IdProducto 1 i&egistro-IdProducto/iBodegaProducto-axio 1 ([oat)i&egistro-axio/iBodegaProducto-inio 1 ([oat)i&egistro-inio/iBodegaProducto-!toc" 1 ([oat)i&egistro-!toc"/return iBodegaProducto/33

    ".   En el co.o.ox paraetrosBodega do.le clic para acti#ar ste e#entopri#ate #oid  BodegaCo.oBoxR!electedIndexChanged(o.ect sender, E#entArgs e)  0  CADBodegaProducto iBodegaProducto 1CADBodegaProducto-GetBodegaProductoByIdBodegaAndIdProducto  34omunicar formularios en par8metros bodega producto crear la propiedad

    pu.lic partial class 4rParaetrosBodega O For0

    pri#ate int idProducto/pu.lic int IDProducto0set 0 idProducto 1 #alue/ 33

    +. En boton agregar bodega de formulario product agregamos esta linea de codigo

    pri#ate #oid .tnAgregarBodegasRClic"(o.ect sender, E#entArgs e)04rParaetrosBodega iFor 1 ne2 4rParaetrosBodega()/iFor-IDProducto 1 Con#ert-$oInt96(txtIdProducto-$ext))iFor-!ho2Dialog()/3

    0.  /l darle clic en el combobo# se coloca

    pri#ate #oid  c.BodegasR!electedIndexChanged(o.ect sender, E#entArgs e)0i4  (c.Bodegas-!electedIndex 11 5) return/CADBodegaProducto iBodegaProducto 1CADBodegaProducto-GetBodegaProductoByIdBodegaAndIdProducto( (int)c.Bodegas-!elected+alue, idProducto)/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    35/136

    i4  (iBodegaProducto 11 null)0txt!toc"-$ext 1 string-Epty/nudCantidadinia*rdenar-+alue 1 5/nudaxio-+alue 1 5/nudinio-+alue 1 5/nudDias-+alue 1 5/

    33

    Video

  • 8/19/2019 Pasos Para Aplicacion Comercial

    36/136

    0CADBodegaProducto-UpdateBodegaProducto((int)c.Bodegas-!elected+alue, idProducto,(dou.le) nudinio-+alue, (dou.le)nudaxio-+alue, (int)nudDias-+alue,(dou.le)nudCantidadinia*rdenar-+alue)/this-Close()/3

    A. En el formulario productos actualizar grilla cogemos codigo llenargrilla de bodegas y secoloca en el bot7n de agregarbodega del formulario producto

    pri#ate #oid .tnAgregarBodegasRClic"(o.ect sender, E#entArgs e)04rParaetrosBodega iFor 1 ne2 4rParaetrosBodega()/iFor-IDProducto 1 Con#ert-$oInt96(txtIdProducto-$ext)/iFor-!ho2Dialog()/KK $*D*O esta l?nea de c8digo carga datos en la ta.lad!AplicacionCoercial-BodegaProducto Puede o#erla o 7uitarla segQn sea necesario-this-.odegaProducto$a.leAdapter-FillBy(this-d!AplicacionCoercial-BodegaProducto,Con#ert-$oInt96(txtIdProducto-$ext))/3

    C. /dicionar errorprovider en formulario par8metro bodega en el bot7n aceptar

    i4  (c.Bodegas-!electedIndex 11 5)0errorPro#ider5-!etError(c.Bodegas, De.e seleccionar una .odega)/c.Bodegas-Focus()/return/3errorPro#ider5-Clear()/

    CADBodegaProducto-UpdateBodegaProducto(

    D. 4omo ya ?ay varios procedimientos almacenados vamos a ?acer el !cV up de la base dedatos

    F. En sql > aplicacion4omercial&iana > clic derec?o > tareas > copias de seguridad y

    despu

  • 8/19/2019 Pasos Para Aplicacion Comercial

    37/136

    Video 1= C(#" #suarios parte 15- Agregaros g#, capos, odi4caos no.res, en la opci8n de cla#e al

    text.ox se le coloca propiedad passwordc#ar:\ y adicionar un la.el y text.oxllaado conJracion alcual ta.iNn se le coloca la propiedad pass2ordchar, alcapo 4echa en propiedad format: short

    6- El co.o.ox de idrol en #alorseleccionado colocaos usuario .inding rol @ idroly ta.iNn esta.leceos otro propiedad en los data.inding en la propiedadtext: ninguno

    9- En el 4orulario principal llaarlo:- Este codigo e#ento load y cada #e> 7ue el usuario se ue#a priero ultio, y

    en el actual pero ca.iando el e#ento en las propiedades por el llaadotextChanged etc

    pri#ate #oid 4rUsuariosRoad(o.ect sender, E#entArgs e)0  KK $*D*O esta l?nea de c8digo carga datos en la ta.la d!AplicacionCoercial-&ol Puedeo#erla o 7uitarla segQn sea necesario-this-rol$a.leAdapter-Fill(this-d!AplicacionCoercial-&ol)/  KK $*D*O esta l?nea de c8digo carga datos en la ta.la d!AplicacionCoercial-UsuarioPuede o#erla o 7uitarla segQn sea necesario-this-usuario$a.leAdapter-Fill(this-d!AplicacionCoercial-Usuario)/txtConJracion-$ext 1 txtCla#e-$ext/3

    Ese codigo escrito anteriorente se coloca ta.iNn en clic de cada uno de los .otones depriero, anterior, siguiente y ultio de la .arra de herraientas y en registro actual pero#aos a propiedades y ca.iaos el e#ento 7ue aparece por de4ecto por uno llaadotextChanged

    Video 1=.1 C(#" #suarios parte $

    5- o ol#idar desacti#ar en el usuario.indingna#igatorO ninguno cuando se haga eldelete y la operaci8n de addne2ite

    6- &e#i>ar orden de ta.lulacion

  • 8/19/2019 Pasos Para Aplicacion Comercial

    38/136

    9- Cargar errorpro#ider:- Inter#enir .ot8n editar (4echa de odiJcaci8n no se anipula nuca siepre

    estar< desa.ilitada solo se dea a anera de consulta;- Pro.ar=- Inter#enir .ot8n cancelar con ayuda de otro codigo de otro 4orulario

    7uedando asi

    pri#ate #oid .nCancelarRClic"(o.ect sender, E#entArgs e)0 Desha.ilitarCapos()/this-usuarioBinding!ource-CancelEdit()/txtConJracion-$ext 1 txtCla#e-$ext/errorPro#ider5-Clear()/

    pri#ate #oid Desha.ilitarCapos() KKsolo ha.ilitar capos es 7ue se da 4ocus0.nPriero-Ena.led 1 true/.nAnterior-Ena.led 1 true/.nActual-Ena.led 1 true/.nCantidad&egistros-Ena.led 1 true/

    .n!iguiente-Ena.led 1 true/

    .nUltio-Ena.led 1 true/

    .nodiJcar-Ena.led 1 true/

    .nBorrar-Ena.led 1 true/

    .nCancelar-Ena.led 1 4alse/

    .nBuscar-Ena.led 1 true/

    .nGuardar-Ena.led 1 4alse/

    txtIdUsuario-&ead*nly 1 true/c.Id&ol-Ena.led 1 4alse/txto.res-&ead*nly 1 true/txtCla#e-&ead*nly 1 true/txtConJracion-&ead*nly 1 true/txtCorreo-&ead*nly 1 true/3

    - Para .oton nue#o

    pri#ate #oid .nue#oRClic"(o.ect sender, E#entArgs e)0usuarioBinding!ource-Adde2()/Ha.ilitarCapos()/txtIdUsuario-&ead*nly 1 4alse/c.Id&ol-Focus()/i4txtConJracion-Clear()/dtp4echaodiJcaionCla#e-+alue 1 Date$ie-o2/3

    - ogica del guarder

    pri#ate #oid usuarioBindinga#igator!a#eIteRClic"(o.ect sender, E#entArgs e)0i4  (T+alidarCapos()) return/this-+alidate()/this-usuarioBinding!ource-EndEdit()/this-ta.leAdapteranager-UpdateAll(this-d!AplicacionCoercial)/Desha.ilitarCapos()/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    39/136

    3

    pri#ate .ool +alidarCapos()0

    i4  (nue#o)0i4  (txtIdUsuario-$ext 11 string-Epty)0 errorPro#ider5-!etError(txtIdUsuario, De.e ingresar un Id de usuario)/txtIdUsuario-Focus()/return 4alse/3errorPro#ider5-Clear()/3return true/3

    - Coo se de.e sa.er cuando se presiona nue#o al inicio del 4orulario deusuarios haceos lo siguiente

    pu.lic partial class 4rUsuarios O For0pri#ate .ool nue#o 1 4alse/ KKsir#e para cuando se le diga editar sa.e 7ue no es nue#opu.lic 4rUsuarios()

    5-En editar adicionaos esto

    Ha.ilitarCapos()/

    ue#o 1 4alse

    55-y en nue#o seria

    txtConJracion-Clear()/  

    nue#o 1 true/

    Esto sir#e para cuando se guarde se pueda #alidar si el usuario existe o noexiste por lo 7ue el codigo de guardar 7ueda asi

    56-Crear Ntodo #alidar usuario select 7ue de#uele solo #alor llaadoexisteUsuario

    !EEC$ 5 F&* Usuario HE&E IdUsuario 1 IdUsuario

    59-odicaos clase cadUsuario

    pu.lic static .ool ExisteUsuario(string IdUsuario)0i4  (adaptador-ExisteUsuario(IdUsuario) 11 null)0return 4alse/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    40/136

    3else0 return true/ 33

    Video 1=.$ C(#" #suarios parte * y se%uridad de la aplicación parte 1

    5- laaos Ntodo creado en .ot8n guardar y seguios #alidando

    errorPro#ider5-Clear()/i4  (CADUsuario-ExisteUsuario(txtIdUsuario-$ext)) 0errorPro#ider5-!etError(txtIdUsuario, Id de usuario ya est< siendo utili>ado por otrousuario)/txtIdUsuario-Focus()/return 4alse/3errorPro#ider5-Clear()/

    3return true/

    3

    6- !iendo o no nue#o se #alida lo siguiente

    i4  (CADUsuario-ExisteUsuario(txtIdUsuario-$ext))0errorPro#ider5-!etError(txtIdUsuario, Id de usuario ya est< siendo utili>ado por otrousuario)/txtIdUsuario-Focus()/return 4alse/3

    errorPro#ider5-Clear()/3i4  (c.Id&ol-!electedIndex 11 5)0errorPro#ider5-!etError(c.Id&ol, De.e seleccionar un rol para el usuario)/c.Id&ol-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txto.res-$ext 11 string-Epty)0errorPro#ider5-!etError(txto.res, De.e ingresar al enos un np.re de usuario)/txto.res-Focus()/return 4alse/

    3errorPro#ider5-Clear()/i4  (txtApellido-$ext 11 string-Epty)0errorPro#ider5-!etError(txtApellido, De.e ingresar al enos un apellido de usuario)/txtApellido-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txtApellido-$ext 11 string-Epty)

  • 8/19/2019 Pasos Para Aplicacion Comercial

    41/136

    0errorPro#ider5-!etError(txtApellido, De.e ingresar al enos un apellido de usuario)/txtApellido-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txtCla#e-$ext 11 string-Epty)

    0errorPro#ider5-!etError(txtCla#e, De.e ingresar una cla#e para el usuario)/txtCla#e-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txtConJracion-$ext 11 string-Epty)0errorPro#ider5-!etError(txtConJracion, De.e ingresar una conJraci8n para la cla#e deusuario)/txtConJracion-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txtCla#e-$ext T1 txtConJracion-$ext)0errorPro#ider5-!etError(txtCla#e, a cla#e y la conJraci8n no coinciden)/errorPro#ider5-!etError(txtConJracion, a cla#e y la conJraci8n no coinciden)/txtCla#e-Focus()/return 4alse/3errorPro#ider5-Clear()/i4  (txtCorreo-$ext T1 txtCorreo-$ext)0errorPro#ider5-!etError(txtCorreo, De.e ingresar una direcci8n de correo)/txtCorreo-Focus()/return 4alse/3errorPro#ider5-Clear()/

    &egexUtilities i+alidador 1 ne2 &egexUtilities()/i4  (Ti+alidador-Is+alidEail(txtCorreo-$ext))0errorPro#ider5-!etError(txtCorreo, De.e ingresar una direcci8n de correo #alida)/txtCorreo-Focus()/return 4alse/3errorPro#ider5-Clear()/return true/

    9- Pro.ar

    :- Hacer .orrarpri#ate #oid .nBorrarRClic"(o.ect sender, E#entArgs e)0Dialog&esult rta 1 essageBox-!ho2(Est< seguro 7ue desea .orrar el registro actual,ConJraci8n, essageBoxButtons-Seso, essageBoxIcon-Luestion,essageBoxDe4aultButton-Button6)/i4  (rta 11 Dialog&esult-o) return/usuarioBinding!ource-&eo#eAt(usuarioBinding!ource-Position)/this-ta.leAdapteranager-UpdateAll(this-d!AplicacionCoercial)/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    42/136

    3

    ;- +alida perisos segQn rol necesario sa.er con 7ue usuario se entro=- Creaos un epa7uetado con todo atri.utos de la clase usuario para crear

    o.etos de la clase usuario eso se hace en el CADUsuarios

    pu.lic class CADUsuario 0pu.lic string IdUsuario 0 get/ set/ 3pu.lic string o.res 0 get/ set/ 3pu.lic string Apellidos 0 get/ set/ 3pu.lic string Cla#e 0 get/ set/ 3pu.lic Date$ie FechaodiJcaionCla#e 0 get/ set/ 3pu.lic int Id&ol 0 get/ set/ 3pu.lic string Correo 0 get/ set/ 3pri#ate static Usuario$a.leAdapter adaptador 1 ne2 Usuario$a.leAdapter()/

    $$continua si%uiente video $$pendiente #acer consulta y m&todo para 'xiste(orreo

    Video 1=.* se%uridad de la aplicación parte $ >!ideo *7?5- Hareos un Ntodo 7ue de#uel#a un usuario con los datos de la .d6- Crear consulta en el D! seria un select 7ue de#uel#e Jlas

    !EEC$ IdUsuario, o.res, Apellidos, Cla#e, FechaodiJcaionCla#e, Id&ol, Correo F&*d.o-Usuario HE&E IdUsuario 1 IdUsuario Ntodo se llaa GetUsuario 7ue no rellenedatata.le si no 7ue solo de#uel#e y el Ntodo se llaar?a igua

    9- En clase usuario se hace un Ntodo 7 de#uel#a un o.eto de la clase CADUsuario y eseNtodo se usa en el 4orulario login para pasarlo al ppal para 7 este sepa 7uies es el 7 estalogueado

    pu.lic static CADUsuario GetUsuario(string IdUsuario) KKde#uel#e o.eto clase CADUsuario0

    CADUsuario iUsuario 1 null/ KK creaos o.eto #acioKK#aos a utili>ar la consulta 7ue de#uel#e ta.la del usuariodsAplicacionCoercial -UsuarioData$a.le i$a.la 1 adaptador-GetUsuario(IdUsuario)/KK#alidar 7ue de#ol#io regisstrosi4  (i$a.la-&o2s-Count 11 ) return iUsuario/dsAplicacionCoercial -Usuario&o2 i&egistro 1(dsAplicacionCoercial -Usuario&o2)i$a.la-&o2sYZ/KKo.tener JlaiUsuario 1 ne2 CADUsuario()/iUsuario-Apellidos 1 i&egistro-Apellidos/iUsuario-Cla#e 1 i&egistro-Cla#e/iUsuario-Correo 1 i&egistro-Correo/iUsuario-FechaodiJcaionCla#e 1 i&egistro-FechaodiJcaionCla#e/iUsuario-Id&ol 1 i&egistro-Id&ol/iUsuario-IdUsuario 1 i&egistro-IdUsuario/

    iUsuario-o.res 1 i&egistro-o.res/return iUsuario/3

    :- +aos al 4orulario principal creaos atri.uto pri#ado de la clase CADUsuario y locon#ertios en propiedad pu.lica en esto se hace para 7ue cuando nos logueaos paraantes de a.rir el 4orulario ya sa.er 7uien es la persona 7ue se loguea entonces se hace losiguiente

    pu.lic partial class 4rPrincipal O For

  • 8/19/2019 Pasos Para Aplicacion Comercial

    43/136

    0pri#ate CADUsuario usuarioogueado/pu.lic CADUsuario Usuarioogueado0get 0 return usuarioogueado/ 3set 0 usuarioogueado 1 #alue/ 33

     S en el login colocaos esto

    4rPrincipal iFor 1 ne2 4rPrincipal()/

    iFor-Usuarioogueado 1 CADUsuario-GetUsuario(txtUsuario-$ext)/iFor-!ho2()/this-Hide()/

    ;- Creaos .arra de estado en el 4orulario principal para sa.er 7uien es el7 esta logueado=- En .arra de hientas cogeos un statusstip y agregaos statusa.el se ca.ia no.re y

    en el text no poneos nada la idea es 7ue cuando el 4orulario cargue en esa .arra diga elno.re de usuario

    - En el load del 4orulario principal

    pri#ate #oid 4rPrincipalRoad(o.ect sender, E#entArgs e)0tsto.resUsuarios-$ext 1 UsuarioO  X usuarioogueado-o.resX  X usuarioogueado-Apellidos/3

    - Pro.ar

    Video 11 se%uridad de la aplicación parte *5- Para ca.io de cla#e creaos nue#o 4orulario llaado ca.io cla#e con 9text.ox 7ue se les coloca la propiedad passwordc#ar: \ 7ue no ca.ie detaaWo formBorderstile: FixedDialog minimeBox: 4alse maximeBox: 4alseacceptbuttonO .tnAcetar y cancelbutton: .tnCancelar ystartposition:Center!cre

    6- En el 4orulario principal llaarlo de 4ora odal

    pri#ate #oid ca.ioDeCla#e$ool!tripenuIteRClic"(o.ect sender, E#entArgs e)

  • 8/19/2019 Pasos Para Aplicacion Comercial

    44/136

    04rCa.ioCla#e i4or 1 ne2 4rCa.ioCla#e()/i4or-!ho2()/3

    9- Copiar atri.uto y propiedad CADUsuario del 4orulario principal al ca.io cla#e(se tiene7ue hacer en casi todos los 4orularios)

    pu.lic partial class 4rCa.ioCla#e O For0pri#ate CADUsuario usuarioogueado/pu.lic CADUsuario Usuarioogueado0get 0 return usuarioogueado/ 3set 0 usuarioogueado 1 #alue/ 33

    :- S en 4orulario ca.io cla#e aWadios esta l?nea4rCa.ioCla#e i4or 1 ne2 4rCa.ioCla#e()/i4or-Usuarioogueado 1 this-usuarioogueado/

    ;- En el .oton aceptarpri#ate #oid .tnAceptarRClic"(o.ect sender, E#entArgs e)0i4 (txtCla#eAnterior-$ext 11 string-Epty)0errorPro#ider5-!etError(txtCla#eAnterior, De.e ingresar la cla#e anterior)/txtCla#eAnterior-Focus()/return/3errorPro#ider5-Clear()/i4  (usuarioogueado-Cla#e T1 usuarioogueado-Cla#e)0errorPro#ider5-!etError(txtCla#eAnterior, Cla#e incorrecta)/txtCla#eAnterior-Focus()/return/3errorPro#ider5-Clear()/i4  (txtConJracionCla#e-$ext 11 string-Epty)0errorPro#ider5-!etError(txtConJracionCla#e, De.e ingresar una conJraci8n paracla#e)/txtConJracionCla#e-Focus()/  return/3errorPro#ider5-Clear()/i4 (txtue#aCla#e-$ext 11 string-Epty)0 errorPro#ider5-!etError(txtue#aCla#e, De.e ingresar una nue#a cla#e)/ txtue#aCla#e-Focus()/return/

    3errorPro#ider5-Clear()/i4  (txtue#aCla#e-$ext T1 txtConJracionCla#e-$ext)0errorPro#ider5-!etError(txtue#aCla#e, a cla#e y la conJraci8n no son iguales)/errorPro#ider5-!etError(txtConJracionCla#e, a cla#e y la conJraci8n no son iguales)/txtue#aCla#e-Focus()/return/3errorPro#ider5-Clear()/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    45/136

    3=- C&EA& P&*CEDIIE$* AACEAD* PA&A AC$UAI]ACI* DE CA+E

    UPDA$E Yd.oZ-YUsuarioZ !E$

    YCla#eZ 1 Cla#e,

    YFechaodiJcaionCla#eZ 1 FechaodiJcaionCla#e

    HE&E YIdUsuarioZ 1 IdUsuario

    llaaara ca.io cla#e

    Video 11.1 se%uridad de la aplicación parte +

    5- +aos a la claseCADUsuario para poder utili>ar la consulta6- Creaos un nue#o Ntodo para eecutar la consulta

    pu.lic static #oid Ca.ioCla#e(string Cla#e, string IdUsuario)0adaptador-Ca.ioCla#e(Cla#e, Date$ie-o2, IdUsuario)/3

    9- En el 4orulario de ca.io cla#e

    errorPro#ider5-!etError(txtConJracionCla#e, a cla#e y la conJraci8n no son iguales)/txtue#aCla#e-Focus()/return/3errorPro#ider5-Clear()/CADUsuario-Ca.ioCla#e(txtue#aCla#e-$ext, usuarioogueado-IdUsuario)/

    essageBox-!ho2(Ca.io de cla#e reali>ado con Nxito, ConJraci8n,essageBoxButtons-*%, essageBoxIcon-In4oration)/

     $his-Close()/

    :- Pro.ar;- Para o.ligar a ca.iar cla#e en el load del 4orulario principal haceos el ste

    Ntodo

    tslo.resUsuarios-$ext 1 UsuarioO  X usuarioogueado-o.res X  Xusuarioogueado-Apellidos/+eriJcaCa.ioCla#e(sender,e)/3pri#ate #oid +eriJcaCa.ioCla#e(o.ect sender, E#entArgs e)0i4   (usuarioogueado-FechaodiJcaionCla#e-Addonths(5) V Date$ie-o2)0

    ca.ioDeCla#e$ool!tripenuIteRClic"(sender, e)/33

    =- Para o.ligarlo a ca.iarla 7ue no sir#a darle en cancelar colocar el codigoanterior en el 4orulario ca.io cla#e

    Video 11.$ se%uridad de la aplicación parte 0

    En el 4orulario ca.iocla#e acti#ar e#ento 4orclosin y hay colocar codigo

  • 8/19/2019 Pasos Para Aplicacion Comercial

    46/136

    pri#ate #oid  4rCa.ioCla#eRForClosing(o.ect sender, ForClosingE#entArgs e)0i4   (usuarioogueado-FechaodiJcaionCla#e-Addonths(5) V Date$ie-o2)0errorPro#ider5-!etError(txtue#aCla#e, De.e ca.iar la cla#e)/txtue#aCla#e-Focus()/e-Cancel 1 true/

    return/errorPro#ider5-Clear()/33

    5- Colocar esto

    essageBox-!ho2(Ca.io de cla#e reali>ado con Nxito, ConJraci8n,essageBoxButtons-*%, essageBoxIcon-In4oration)/usuarioogueado-Cla#e 1 txtue#aCla#e-$ext/usuarioogueado-FechaodiJcaionCla#e 1 Date$ie-o2/this-Close()/

    6- Para la opci8n ca.io usuario creaos otro 4orulario copiaos los .otones del de logindeJnios prop de axieBox, inieBox, 4or.orderstile, accept.utton y cancel.utton

    9- Inter#enir .ot8n aceptar le colocaos la propiedad de ca.io de usuario y lo del .ot8naceptar del login todo preCoponent()/3pri#ate #oid .tnAceptarRClic"(o.ect sender, E#entArgs e)0i4  (txtCla#e-$ext 11 string-Epty)0errorPro#ider5-!etError(txtCla#e, De.e ingresar una cla#e)/txtCla#e-Focus()/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    47/136

    return/3errorPro#ider5-Clear()/i4  (TCADUsuario-+alidaUsuario(txtUsuario-$ext, txtCla#e-$ext))0essageBox-!ho2(Usuario o cla#e no #alido, Error, essageBoxButtons-*%,essageBoxIcon-Exclaation)/

    txtUsuario-$ext 1 /txtCla#e-$ext 1 /txtUsuario-Focus()/return/3usuarioogueado 1 CADUsuario-GetUsuario(txtUsuario-$ext)/this-Close()/3pri#ate #oid .tnCancelarRClic"(o.ect sender, E#entArgs e)0usuarioogueado 1 null/this-Close()/3

    :- En el 4orulario principal en e#ento de ca.ioUsuario colocaos lo siguiente

    pri#ate #oid ca.ioDeUsuario$ool!tripenuIteRClic"(o.ect sender, E#entArgs e)04rCa.ioUsuario iFor 1 ne2 4rCa.ioUsuario()/iFor-!ho2Dialog()/i4  (iFor-Usuarioogueado T1 null)0this-usuarioogueado 1 iFor-Usuarioogueado/tslo.resUsuarios-$ext 1 UsuarioO  Xusuarioogueado-o.res X  X usuarioogueado-Apellidos/33

    ;- Pro.ar

    Video 11.* se%uridad de la aplicación parte 2

    1. 'ara el manejo de la seguridad de la aplicacion ?ay dos tablas usuario y rol2. En la base de datos crear una nueva table con los stes campos %d'ermiso int "autonumerico0 y clave primaria %d(ol int no permite nulos

  • 8/19/2019 Pasos Para Aplicacion Comercial

    48/136

    6ormulario nvarc?ar")/50 no permite nulos "contiene el nombre de los formularios0 'uedeer boleano que en la base de datos se llama bit "no permite nnulos0 'uede)odificar bit 'uede!orrar bit

    Esta table toca mantenerla actualizando la llamamos 'ermiso(ol

    3. En el diagrama de base de datos en caso de que no tenga permisos para ingresar se

    ?ace la siguiente consulta /lter aut?orization on database: : nombre!ase&atos to sa "Nombresuario0

    . 4reamos un diagrama con las tablas rol$ usuario y permiso rol;. &efinemos la relacion de que un rol puede tener muc?os permisos y lo llamamos &E(A. ,a tabla permiso(ol editar las primeras 2GG filas &ar permiso a gerente que pueda ?acer de todo ejemplo con frm'roveedores

    id(ol 1 "gerente0formulario: frm'roveedores'uedeer: rue

    'uede)pdofocar: rue'uede!orrar: rue

    id(ol 2 "administrador de inventario0formulario: frm'roveedores'uedeer: rue'uede)pdofocar: rue'uede!orrar: false

    id(ol 3 "cajero0formulario: frm'roveedores'uedeer: false'uede)pdofocar: false'uede!orrar: false

    Macerlo con todos los formularios

    C. amos a la aplicaci7n para establecer los permisosD. amos al formulario principal en la opci7n proveedores > propiedades > visible: falseF. En load del principal crear un evento se ?ace como ejemplo para proveedores pero se

    tiene que ?acer con todos los formularioserificar'ermisos"0H ctl.

    pu.lic static .ool PuedeodiJcar(int Id&ol, string Forulario)0

    i4  (adaptador-PuedeodiJcar(Id&ol, Forulario) 11 null) return 4alse/return true/3

    pu.lic static .ool PuedeBorrar(int Id&ol, string Forulario)0i4  (adaptador-PuedeBorrar(Id&ol, Forulario) 11 null) return 4alse/return true/

    3

  • 8/19/2019 Pasos Para Aplicacion Comercial

    49/136

    Video 11.+ se%uridad de la aplicación parte 7

    5- +aos al 4orulario principal al Ntodo #eriJcarPerisos()/ hacer esto contodos los 4orularios excepto ca.ioUsuario y Ca.ioCla#e

    pri#ate #oid +eriJcarPerisos()0i4 (CADPeriso&ol-Puede+er(usuarioogueado-Id&ol, 4rPro#eedores))pro#eedores$ool!tripenuIte-+isi.le 1 true/elsepro#eedores$ool!tripenuIte-+isi.le 1 4alse/3

    6- En la opci8n ca.ioUsuario actuali>ar perisos

    usuarioogueado-o.res X  X usuarioogueado-Apellidos/+eriJcarPerisos()/

    9- pro.ar:- Ahora se ira si el usuario puede odiJcar y puede .orrar eeplo con

    pro#eedores

    ;- Entraos al 4orulario de pro#eedores y se le #ca a cargar el usuario logueadopu.lic partial class 4rPro#eedores O For0pri#ate CADUsuario usuarioogueado/pu.lic CADUsuario Usuarioogueado0get 0 return usuarioogueado/ 3set 0 usuarioogueado 1 #alue/ 33

    A. 4uando se llame proveedores desde el principal agregar

    i4or-diParent 1 this/

    i4or-Usuarioogueado 1 usuarioogueado/i4or-!ho2()/

    C. En load de proveedores colocar evento verificarpermisos"0

    this-pro#eedor$a.leAdapter-Fill(this-d!AplicacionCoercialDiana-Pro#eedor)/+eriJcaPerisos()/

    pri#ate #oid +eriJcarPerisos()0i4  (CADPeriso&ol-PuedeodiJcar(usuarioogueado-Id&ol, this-ae))0.indinga#igatorAdde2Ite-Ena.led 1 true/Bindinga#igatorEditIte-Ena.led 1 true/3else0.indinga#igatorAdde2Ite-Ena.led 1 4alse/Bindinga#igatorEditIte-Ena.led 1 4alse/3

    i4  (CADPeriso&ol-PuedeBorrar(usuarioogueado-Id&ol, this-ae))0.indinga#igatorDeleteIte-Ena.led 1 true/3

  • 8/19/2019 Pasos Para Aplicacion Comercial

    50/136

    else0.indinga#igatorDeleteIte-Ena.led 1 4alse/33

    - En guardar y cancelar adicionar despuNs de desha.ilitar

    Desha.ilitarCapos()/+eriJcarPerisos()/

    Video 1$ se%uridad de la aplicación parte 8

    5- lenar ta.la periso rol segQn los perisos ta.la de Excel6- Al 4orulario pro#eedores se l2e cargo propiedad de usuario logueado se le

    de.e de cargar a todos los 4orularios

    pri#ate CADUsuario usuarioogueado/

    pu.lic CADUsuario Usuarioogueado0get 0 return usuarioogueado/ 3set 0 usuarioogueado 1 #alue/ 33

    9- En el 4orulario principal al llaar .odegas y a todos los 4orularios colocar elsiguiente codigo

    4rBodegas i4or 1 ne2 4rBodegas()/i4or-diParent 1 this/i4or-Usuarioogueado 1 usuarioogueado/i4or-!ho2()/

    . ,o que se implement para proveedores en el metodo verificar'ermisos del formularioprincipal se ?ace con todos los formulariosi4  (CADPeriso&ol-Puede+er(usuarioogueado-Id&ol, 4rPro#eedores))  0  pro#eedores$ool!tripenuIte-+isi.le 1 true/  3  else  0  pro#eedores$ool!tripenuIte-+isi.le 1 4alse/  3

    ;. El metodo verifica permisos de proveedores se coge codigo y se copia el llamado y el

    desarrollo del metodo y se le copia en el load de cada formulario "por a?ora ?ec?o para

    los formularios ya dise@ados0  +eriJcarPerisos()/

      3

      pri#ate #oid +eriJcarPerisos()  0  i4  (CADPeriso&ol-PuedeodiJcar(usuarioogueado-Id&ol, this-ae))  0  .indinga#igatorAdde2Ite-Ena.led 1 true/  Bindinga#igatorEditIte-Ena.led 1 true/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    51/136

      3  else  0  .indinga#igatorAdde2Ite-Ena.led 1 4alse/  Bindinga#igatorEditIte-Ena.led 1 4alse/  3

      i4  (CADPeriso&ol-PuedeBorrar(usuarioogueado-Id&ol, this-ae))  0  .indinga#igatorDeleteIte-Ena.led 1 true/

      3  else  0  .indinga#igatorDeleteIte-Ena.led 1 4alse/  3

      3

    *e borro en clients

    A. ,as opciones q estan en la barra de ?mientas se valida tambien permisos en formularioprincipal en verificar permisos a@adir lo ste en ptos$ clients y proveedores

    i4  (CADPeriso&ol-Puede+er(usuarioogueado-Id&ol, 4rProductos))  0  productos$ool!tripenuIte5-+isi.le 1 true/  Productostool!tripButton-+isi.le 1 true/  3  else  0  productos$ool!tripenuIte5-+isi.le 1 4alse/  Productostool!tripButton-+isi.le 1 4alse/  3

    Video 1$.1 Compras parte 15- Colo7ueole iconos a las opciones de la .arra de herraientas con la

    propiedad iage 4orato -PG de 96 x 966- Colocarle iconos a los 4orularios los cuales de.en estar en 4orato -IC* 96 x

    969- Hacer los o#iientos con copras ya no se hace crud se ira ta.la copras

    y detalleCopras y odiJcaci8n de .odegaPto y la ta.la %ardex cada 7 sehaga o# de copra se hacen ca.ios en esas cuatro ta.las no solo en unregistro si no en #arios registros

    :- +aos hacer el layout de lo 7ue 7uiero 7ue sea i copra epe>aos con lata.la copra 7ue es el enca.e>ado

    ;- Cogeos un la.el llaaos 4echa y un datetiepic"er otro la.el parapro#eedor con su co.o .ox y un .ot8n para .uscar pro#eedores (utili>ar4orulario .us7uedaPro#eedor) y lo iso otro la.el para .odega a la cual sehace la copra con su co.o.ox y los co.o.ox enla>arlos con las ta.las laultia opci8n 7ueda en ninguno

    =- *rgani>ar orden en los co.o.ox en el el triangulo @de pro#eedor y .odega @agregar consulta

  • 8/19/2019 Pasos Para Aplicacion Comercial

    52/136

  • 8/19/2019 Pasos Para Aplicacion Comercial

    53/136

    pri#ate #oid Producto$extBoxR+alidating(o.ect sender, CancelE#entArgs e)  0  i4  (Producto$extBox-$ext 11 string-Epty)  0  errorPro#ider5-!etError(Producto$extBox, De.e ingresar un Id de producto o unc8digo de .arras)/  return/

      3  errorPro#ider5-Clear()/

      long producto/  i4  (Tlong-$ryParse(Producto$extBox-$ext, out producto))  0  errorPro#ider5-!etError(Producto$extBox, De.e ingresar un #alor nuNricoentero)/  return/  3  errorPro#ider5-Clear()/

      i4  (producto V1 )  0  errorPro#ider5-!etError(Producto$extBox, De.e ingresar un #alor ayor a )/  return/  3  errorPro#ider5-Clear()/  3

    D. Pro.arF. Cuando el 4orulario haga load ta.iNn de.e .lan7uear el la.el

    BodegaCo.oBox-!electedIndex 1 5/Productoa.el-$ext 1 string-Epty/

    1G. *tras #alidaciones de si existe o no existe- !sE ecesita ir a la .ase de datos para en casode 7ue exista lo digitado corresponde a un codigo de .arras o a un Id de producto para esose necesita hacer un etodo

    Video 1$.* Compras parte *

    5- !e de.e .uscar en pto y si no se encuentra .uscar en la ta.la .arra6- +aos a la aplicaci8n coercial y agregaos la ta.la producto para hacer un

    Ntodo 7ue de#uel#a la descripci8n si el pto existe coo ptoAgregar consulta @ sselect 7ue de#ul#e Jlas y lo iso en .arra

    9- Agregaos el CADProductos colocarla pu.lica y deJnirle adaptador y unaconsulta 7ue de#uel#a todos los datos del pto

    :- Este es la consuilta del proc alacenado!EEC$ IdProducto, Descripcion, IdDepartaento, IdI+A, Precio, otas, Iagen,Idedida, edida F&* d.o-ProductosHE&E IdProducto 1 IdProducto llaaos GetProductoByIdProducto no

    rellena un datata.le si no 7ue de#uel#e un datata.le;- +aos a utili>ar la consulta en la clase pto #aos a epa7uetar todos los

    atri.utos de la ta.la pto los colocaos coo propiedades en la claseProp (ta. ta.)!EEC$ IdProducto, Descripcion, IdDepartaento, IdI+A, Precio, otas, Iagen,Idedida, edidaF&* Barra IE& M*I Producto * Barra-IdProducto 1 Producto-IdProductoHE&E Barra 1 Barra

  • 8/19/2019 Pasos Para Aplicacion Comercial

    54/136

    pu.lic int IdProducto 0 get/ set/ 3  pu.lic string Descripcion 0 get/ set/ 3  pu.lic int IdDepartaento 0 get/ set/ 3pu.lic int IdI+A 0 get/ set/ 3  pu.lic decial Precio 0 get/ set/ 3  pu.lic string otas 0 get/ set/ 3  pu.lic string Iagen 0 get/ set/ 3

      pu.lic int Idedida 0 get/ set/ 3  pu.lic [oat edida 0 get/ set/ 3pri#ate static Productos$a.leAdapter adaptador 1 ne2 Productos$a.leAdapter()/

    =- Creaos Ntodo pu.lico 7ue de#uel#e o.eto de la clase productopri#ate static Productos$a.leAdapter adaptador 1 ne2 Productos$a.leAdapter()/

      pu.lic static CADProducto GetProductoByIdProducto(int IdProducto)  0  CADProducto iProducto 1 null/  KKhaceos consulta para 7ue de#uel#a datata.le  dsAplicacionCoercial -ProductosData$a.le i$a.la 1adaptador-GetProductoByIdProducto(IdProducto)/  KKpreguntar si de#uel#e Jlas o no

      i4  (i$a.la-&o2s-Count 11 ) return iProducto/  dsAplicacionCoercial -Productos&o2 i&egistro 1(dsAplicacionCoercial -Productos&o2)i$a.la-&o2sYZ/  KKregistro con#ertirlo en un o.eto producto  iProducto 1 ne2 CADProducto()/  iProducto-Descripcion 1 i&egistro-Descripcion/  iProducto-IdDepartaento 1 i&egistro-IdDepartaento/  iProducto-IdI+A 1 i&egistro-IdI+A/  iProducto-Idedida 1 i&egistro-Idedida/  iProducto-IdProducto 1 i&egistro-IdProducto/  iProducto-Iagen 1 i&egistro-Iagen/  iProducto-edida 1 ([oat) i&egistro-edida/  iProducto-otas 1 i&egistro-otas/  iProducto-Precio 1 i&egistro-Precio/  return iProducto/

      3C. 4omo no se sabe si se digito un codigo de barras o un id de pto se ?ace algo similar en

    barras en pto vamos a crear otra consulta agregar consultan- select que devuelve filas

    *E,E4 'roductos.%d'roducto$ &escripcion$ %d&epartamento$ %d%/$ 'recio$ Notas$

    %magen$ %d)edida$ )edida

    6(+) !arra %NNE( ^+%N 'roductos +N !arra.%d'roducto I 'roductos.%d'roducto

    =ME(E !arra I Q!arra

    Video 1$.+ Compras parte +

    5- +aos al Ntodo copiaos el codigo anterior y solo ca.ia no.re Ntodo laconsultapu.lic static CADProducto GetProductoByBarra(long Barra)  0  CADProducto iProducto 1 null/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    55/136

      dsAplicacionCoercial -ProductosData$a.le i$a.la 1adaptador-GetProductoByBarra(Barra)/  i4  (i$a.la-&o2s-Count 11 ) return iProducto/  dsAplicacionCoercial -Productos&o2 i&egistro 1(dsAplicacionCoercial -Productos&o2)i$a.la-&o2sYZ/  iProducto 1 ne2 CADProducto()/  iProducto-Descripcion 1 i&egistro-Descripcion/

      iProducto-IdDepartaento 1 i&egistro-IdDepartaento/  iProducto-IdI+A 1 i&egistro-IdI+A/  iProducto-Idedida 1 i&egistro-Idedida/  iProducto-IdProducto 1 i&egistro-IdProducto/  iProducto-Iagen 1 i&egistro-Iagen/  iProducto-edida 1 ([oat)i&egistro-edida/  iProducto-otas 1 i&egistro-otas/  iProducto-Precio 1 i&egistro-Precio/  return iProducto/

      36- En la clase del 4orulario copras se #alida si existe o no9- Crear un o.eto de la clase CADProducto asi

    errorPro#ider5-Clear()/  CADProducto iProducto 1 CADProducto-GetProductoByIdProducto((int)producto)/  i4  (iProducto 11 null) KK no lo encontro coo codigo de pto  0  iProducto 1 CADProducto-GetProductoByBarra(producto)/  3  i4  (iProducto 11 null) KK no esta en .d  0  errorPro#ider5-!etError(Producto$extBox, Producto no existe)/  Productoa.el-$ext 1 string-Epty/  3  else  0

      Productoa.el-$ext 1 iProducto-Descripcion/  3  3

    :- Coo saca error cuando no hay iagen y cuando no hay nada en el caponotas en ca.iar este codigo del dsaplicacioncoercial-designerpu.lic string Iagen 0  get 0  try 0  return ((string)(thisYthis-ta.leProductos-IagenColunZ))/  3  catch (glo.alOO!yste-In#alidCastException e) 0  thro2 ne2 glo.alOO!yste-Data-!trong$ypingException(El #alor de lacoluna ̂ Iagen^ de la ta.la ̂ Productos ̂ es DBull-, e)/ .orrar eso y colocarreturn _`/  3  3  set 0  thisYthis-ta.leProductos-IagenColunZ 1 #alue/  3  3

    ;- Pro.ar=- Codigo .ot8n de .Qs7ueda de pto y disparar e#ento #alidating

    pri#ate #oid BuscarProductoButtonRClic"(o.ect sender, E#entArgs e)

  • 8/19/2019 Pasos Para Aplicacion Comercial

    56/136

      0  4rBus7uedaProductos iBus7ueda 1 ne2 4rBus7uedaProductos()/  iBus7ueda-!ho2Dialog()/

      i4  (iBus7ueda-IDProducto 11 ) return/  Producto$extBox-$ext 1 iBus7ueda-IDProducto-$o!tring()/

    Producto$extBoxR+alidating(sender, ne2 CancelE#entArgs())/

      3- Pro.arD. 4olocar que salga imagen para los ptos que tienen imagen el picture bo# de ptos pegarlo

    en formulario de compras

      CADProducto iProducto 1 CADProducto-GetProductoByIdProducto((int)producto)/  i4  (iProducto 11 null) KK no lo encontro coo codigo de pto  0  iProducto 1 CADProducto-GetProductoByBarra(producto)/  3  i4  (iProducto 11 null) KK no esta en .d  0

      errorPro#ider5-!etError(Producto$extBox, Producto no existe)/  Productoa.el-$ext 1 string-Epty/  p.xIagen-Iage 1 null/  3  else  0  Productoa.el-$ext 1 iProducto-Descripcion/i4  (iProducto-Iagen T1 string-Epty)  0  i4  (File-Exists(Iages^^ X iProducto-Iagen))  0  p.xIagen-oad(Iages^^ X iProducto-Iagen)/  3  else 

    0  p.xIagen-Iage 1 null/  3  3  else  0  p.xIagen-Iage 1 null/  3  3  3

    F. 'robar 1G. *e necesita saber la cantidad de ptos a comprar11. Macemos label y te#tbo# para la cantidad y un boton para agregar le colocamos imagen y

    nombre12. /dicionar un datarid en donde se coloca los datos de lo que el usuario esta comprando

    Video 1$.0 Compras parte 0

    1. ,a cuadricola tiene una temporal de los ptos q se van comprando y para eso se debe

    crear una lista para almacenar ptos temporales que vamos comprando$. 'ara crear una lista se crea una clase llamada &etalle4ompra y se agrega en aplicaci7n

    comercial no en el 4/& que tendr8 los atributos que se quiere que vayan temporales en la

    compra

  • 8/19/2019 Pasos Para Aplicacion Comercial

    57/136

    class DetalleCopra  0  pu.lic int IdProducto 0 get/ set/ 3  pu.lic string Descripcion 0 get/ set/ 3  pu.lic decial Costo 0 get/ set/ 3  pu.lic [oat Cantidad 0 get/ set/ 3  pu.lic [oat PorcentaeI+A 0 get/ set/ 3

      pu.lic [oat PorcentaeDescuento 0 get/ set/ 3  3

    i. 4uando ?ace load en el

    formulario compras

    creamos un atributo

    generic que se llama

    mis&etallespu.lic partial class 4rCopras O For  0istVDetalleCopra isDetalles 1 ne2 istVDetalleCopra()/

    *. El list ta.iNn puede ser el origen de datos de la g# de copras le ca.iaos el no.re a

    esa g# por DetallaDataGrid+ie2 y cuando se entre al 4orulario y cuando haga load secopia lo steProductoa.el-$ext 1 string-Epty/DetalleDataGrid+ie2-Data!ource 1 isDetalles/

    +. Pro.ar0. Agregaos la.el y text.ox para costo2. Crear un atri.uto al principio del 4orulario copras de la clase prosucto llaado

    ultioProductoistVDetalleCopra isDetalles 1 ne2 istVDetalleCopra()/CADProducto ultioProducto 1 null/

    7.  S de.ao de (esto se hace para cuando se haga agregar se #alide 7ue si se haya digitado unultio ptoCADProducto iProducto 1 CADProducto-GetProductoByIdProducto((int)producto)/

      i4  (iProducto 11 null) KK no lo encontro coo codigo de pto  0  iProducto 1 CADProducto-GetProductoByBarra(producto)/  3  i4  (iProducto 11 null) KK no esta en .d  0  errorPro#ider5-!etError(Producto$extBox, Producto no existe)/  Productoa.el-$ext 1 string-Epty/  p.xIagen-Iage 1 null/  ultioProducto 1 null/  3

    else  0

      Productoa.el-$ext 1 iProducto-Descripcion/  ultioProducto 1 iProducto/

    8. El codigo del .ot8n agregarpri#ate #oid AgregarButtonRClic"(o.ect sender, E#entArgs e)  0  i4  (ultioProducto 11 null) KKsigniJca 7ue el ultio pto no existia o no han .uscadonigun pto  0  errorPro#ider5-!etError(Producto$extBox, De.e ingresar un producto)/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    58/136

      Producto$extBox-Focus()/  return/  3  errorPro#ider5-Clear()/  3

  • 8/19/2019 Pasos Para Aplicacion Comercial

    59/136

      0  errorPro#ider5-!etError(PorcentaeDescuento$extBox, De.e ingresar un #alornuNrico)/  return/  3  errorPro#ider5-Clear()/

      i4  (porcentaeDescuento V porcentaeDescuento5) )  0  errorPro#ider5-!etError(PorcentaeDescuento$extBox, De.e ingresar un #alorayor o igual a y ennor o igual a 5)/  return/  3  3

    11. 'robar 1$. ,o agregado aparezca en la gridvie9

     i4  (porcentaeDescuento V porcentaeDescuento5)  0  errorPro#ider5-!etError(PorcentaeDescuento$extBox, De.e ingresar un #alorayor o igual a y ennor o igual a 5)/  return/  3  errorPro#ider5-Clear()/  3

      DetalleCopra iDetalle 1 ne2 DetalleCopra()/  iDetalle-Cantidad 1 cantidad/  iDetalle-Costo 1 costo/  iDetalle-Descripcion 1 ultioProducto-Descripcion/  iDetalle-IdProducto 1 ultioProducto-IdProducto/  iDetalle-PorcentaeDescuento 1 porcentaeDescuento/  iDetalle-PorcentaeI+A 1 / KK*M* PEDIE$E

      isDetalles-Add(iDetalle)/DetalleDataGrid+ie2-Data!ource 1 null/  DetalleDataGrid+ie2-Data!ource 1 isDetalles/

    KKcodigo adicional agregado por i no en #ideop pero si aparece desuesultioProducto 1 null/Cantidad$extBox-$ext 1 string-Epty/  Costo$extBox-$ext 1 string-Epty/  PorcentaeDescuento$extBox-$ext 1 string-Epty/

     

    1*. Pro.ar 7ue lo pase a.ao

    Video 1* Compras parte 2

    1. 4rear opcion de compras para acceso rapido2. *olucionar lo del %/$ en la clase 4/& se crea un metodo que se le pase el codigo

    del %/ y que devuelva un objeto que tenga empaquetados todos los campos de la

    table %/3. amos al dataset y se arrastra table de %/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    60/136

    . Macer un metodo que devuelva una tarifa de %/$ ?ay un metodo get&ata ya pero

    ese nos devuelve toda la table de %/ agregar consula .- nuevo proc almac >

    select que devuelve filas*E,E4 %d%/$ &escripcion$ arifa 6(+) dbo.%/ =ME(E %d%/ I Q%d%/ el

    nombre del metodo sera et%/

    ;. 'ara poder accede a la clase se necesita consulta vamosA. agregar una nueva clase 4/&%/ colocarla publica

    pu.lic class CADI+A  0  pu.lic int IdI+A 0 get/ set/ 3  pu.lic string Descripcion 0 get/ set/ 3  pu.lic [oat $ari4a 0 get/ set/ 3

      pri#ate static I+A$a.leAdapter adaptador 1 ne2 I+A$a.leAdapter()/

      pu.lic static CADI+A GetI#a(int IdI+A)  0  CADI+A iI+A 1 null/  dsAplicacionCoercial -I+AData$a.le i$a.la 1 adaptador-GetI+A(IdI+A)/

      i4  (i$a.la-&o2s-Count 11 ) return iI+A/  dsAplicacionCoercial -I+A&o2 i&egistro 1 (dsAplicacionCoercial -I+A&o2)i$a.la-&o2sYZ/  iI+A 1 ne2 CADI+A()/  iI+A-Descripcion 1 i&egistro-Descripcion/  iI+A-IdI+A 1 i&egistro-IdI+A/  iI+A-$ari4a 1 ([oat)i&egistro-$ari4a/  return iI+A/  3  3

    C.errorPro#ider5-Clear()/

      3  CADI+A iI+A 1 CADI+A-GetI#a(ultioProducto-IdI+A)/

      DetalleCopra iDetalle 1 ne2 DetalleCopra()/  iDetalle-Cantidad 1 cantidad/  iDetalle-Costo 1 costo/  iDetalle-Descripcion 1 ultioProducto-Descripcion/  iDetalle-IdProducto 1 ultioProducto-IdProducto/  iDetalle-PorcentaeDescuento 1 porcentaeDescuento/  iDetalle-PorcentaeI+A 1 iI+A-$ari4a/ PA&A LUE $*E $A&IFA E DECIA

    D. 4omo el ] se maneja como decimal se ?ace lo steerror)rovider1.(lear*+,  porcenta-eDescuento $1,

      3

      CADI+A iI+A 1 CADI+A-GetI#a(ultioProducto-IdI+A)/

      DetalleCopra iDetalle 1 ne2 DetalleCopra()/F. ,o que se areglo anteriormete con respect al campo notas e imagen que se coloca

    return _` en vez del codigo largo se da@a cada vez que se agrega un metodo por lo

    tanto es necesario ?acer lo siguiente vamos al dataset del 4/& seleccionamos

  • 8/19/2019 Pasos Para Aplicacion Comercial

    61/136

  • 8/19/2019 Pasos Para Aplicacion Comercial

    62/136

      DetalleDataGrid+ie2-ColunsYPorcentaeI+AZ-idth 1 /  DetalleDataGrid+ie2-ColunsYPorcentaeDescuentoZ-Header$ext 1 PorcentaeDescuento/  DetalleDataGrid+ie2-ColunsYPorcentaeDescuentoZ-De4aultCell!tyle-Alignent 1DataGrid+ie2ContentAlignent -iddle&ight/  DetalleDataGrid+ie2-ColunsYPorcentaeDescuentoZ-De4aultCell!tyle-Forat 1P6/

      DetalleDataGrid+ie2-ColunsYPorcentaeDescuentoZ-idth 1 /  DetalleDataGrid+ie2-ColunsY+alorBrutoZ-Header$ext 1 +alor Bruto/  DetalleDataGrid+ie2-ColunsY+alorBrutoZ-De4aultCell!tyle-Alignent 1DataGrid+ie2ContentAlignent -iddle&ight/  DetalleDataGrid+ie2-ColunsY+alorBrutoZ-De4aultCell!tyle-Forat 1 C6/  DetalleDataGrid+ie2-ColunsY+alorBrutoZ-idth 1 /  DetalleDataGrid+ie2-ColunsY+alorI+AZ-Header$ext 1 +alor I+A/  DetalleDataGrid+ie2-ColunsY+alorI+AZ-De4aultCell!tyle-Alignent 1DataGrid+ie2ContentAlignent -iddle&ight/  DetalleDataGrid+ie2-ColunsY+alorI+AZ-De4aultCell!tyle-Forat 1 C6/  DetalleDataGrid+ie2-ColunsY+alorI+AZ-idth 1 /  DetalleDataGrid+ie2-ColunsY+alorDescuentoZ-Header$ext 1 +alor Descuento/  DetalleDataGrid+ie2-ColunsY+alorDescuentoZ-De4aultCell!tyle-Alignent 1DataGrid+ie2ContentAlignent -iddle&ight/  DetalleDataGrid+ie2-ColunsY+alorDescuentoZ-De4aultCell!tyle-Forat 1 C6/  DetalleDataGrid+ie2-ColunsY+alorDescuentoZ-idth 1 /  DetalleDataGrid+ie2-ColunsY+aloretoZ-Header$ext 1 +alor eto/  DetalleDataGrid+ie2-ColunsY+aloretoZ-De4aultCell!tyle-Alignent 1DataGrid+ie2ContentAlignent -iddle&ight/  DetalleDataGrid+ie2-ColunsY+aloretoZ-De4aultCell!tyle-Forat 1 C6/  DetalleDataGrid+ie2-ColunsY+aloretoZ-idth 1 / 3

    ;- LUI$A& K5 DE bI+A

    Video 1*.$ Compras parte 8

    1. /nc?or de bot7nes buscar bodega y proveedor y la imagen op$ (ig?t2. /nc?or de combobo# op$ (ig?t$ left

    3. Macer opci7n totalizar debajo de la gv colocamos un label llamar totales"valor bruto$ iva$ descuento y neto

    . &efinirle al formulario compras propiedades que ser8n esos totalesistVDetalleCopra isDetalles 1 ne2 istVDetalleCopra()/  CADProducto ultioProducto 1 null/

    pri#ate CADUsuario usuarioogueado/  pri#ate decial totalBruto 1 /  pri#ate decial totalDescuento 1 /  pri#ate decial totalI+A 1 /  pri#ate decial totaleto 1

    ;. 4uando el usuario adicione un pto aparte de que ingrese a la cuadricula se

    refrescan totalesiDetalle-PorcentaeI+A 1 iI+A-$ari4a/

      totalBruto X1 iDetalle-+alorBruto/  totalI+A X1 iDetalle-+alorI+A/  totalDescuento X1 iDetalle-+alorDescuento/  totaleto X1 iDetalle-+aloreto/ 7uitarlo de a7u?

    isDetalles-Add(iDetalle)/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    63/136

    A. Crear en el 4orulario : text.ox para ostrar totales con readonly en true y anchorBotto, &ight y colocarle no.res a los text.oxpri#ate #oid &e4rescaGrid() 

    0totalBruto 1 /  totalDescuento 1 /  totalI+A 1 /

      totaleto 1 /  DetalleDataGrid+ie2-Data!ource 1 null/  DetalleDataGrid+ie2-Data!ource 1 isDetalles/

    4oreach (DetalleCopra iDetalle in isDetalles)  0  totalBruto X1 iDetalle-+alorBruto/  totalI+A X1 iDetalle-+alorI+A/  totalDescuento X1 iDetalle-+alorDescuento/  totaleto X1 iDetalle-+aloreto/

      3

      $otalBruto$extBox-$ext 1 string-Forat(0OC63, totalBruto)/  $otalI+A$extBox-$ext 1 string-Forat(0OC63, totalI+A)/  $otalDescuento$extBox-$ext 1 string-Forat(0OC63, totalDescuento)/  $otaleto$extBox-$ext 1 string-Forat(0OC63, totaleto)/  Personali>aGrid()/  3

    - DeJnir propiedad textAlig de los text.ox en right- Pro.ar- Crear .ot8n para gra.ar copra eso a4ecta : ta.las copra, detallecopra,

    .odegapto, %ardex5-Crear dos .otones

    Video 1*.* Compras parte <

    5- Agregar .otones de gra.ar y cancelar6- Hacer codigo de guardar se #alida 7ue este un pro#eedor y .odega,

    inio haya un pto9- Codigo para cancelar

    pri#ate #oid CancelarButtonRClic"(o.ect sender, E#entArgs e)  0  this-Close()/  3

    :- Codigo para guardar

    pri#ate #oid Gra.arButtonRClic"(o.ect sender, E#entArgs e)  0  i4  (Pro#eedorCo.oBox-!electedIndex 11 5)  0  errorPro#ider5-!etError(Pro#eedorCo.oBox, De.e seleccionar unpro#eedor)/  Pro#eedorCo.oBox-Focus()/  return/  3  errorPro#ider5-Clear()/

  • 8/19/2019 Pasos Para Aplicacion Comercial

    64/136

      i4  (BodegaCo.oBox-!electedIndex 11 5)  0  errorPro#ider5-!etError(BodegaCo.oBox, De.e seleccionar una.odega)/  BodegaCo.oBox-Focus()/  return/

      3  errorPro#ider5-Clear()/

      i4  (isDetalles-Count11)  0  errorPro#ider5-!etError (Producto$extBox, De.e ingresar productos en lacopra)/  Producto$extBox-Focus()/  return/  3  errorPro#ider5-Clear()/  3

    ;- P&EGU$A& !I !E E!$A !EGU&* DE GUA&DA&errorPro#ider5-Clear()/

      Dialog&esult rta 1 essageBox-!ho2(Es< seguro 7ue 7uerer gra.ar lacopra,  ConJraci8n, essageBoxButtons-Seso, essageBoxIcon-Luestion,  essageBoxDe4aultButton-Button6)/  i4  (rta 11 Dialog&esult-o) return/

    =- Pro.ar- +aos al ds y arrastraos ta.la copra xopradetalle y %ardex- Agregar un registro a la ta.la copra con la 4echa de la copra y con el

    pro#eedor y .odega seleccionada, el da un nu de copra 7ue tocaguardarlo ya 7ue se liga a copraDetalle agregar consulta @ insert

    Video 1*.+ Compras parte 1=

    5- I!E&$ I$* Yd.oZ-YCopraZ (YFechaZ, YIdPro#eedorZ, YIdBodegaZ) +AUE!(Fecha, IdPro#eedor, IdBodega)/!EEC$ IdCopra, Fecha, IdPro#eedor, IdBodega F&* Copra HE&E(IdCopra 1 !C*PERIDE$I$S()) ese scope signiJca 7ue de#uel#e elultio registro insertado

    6- Creaos el CADCopra 7ue la colocaos pu.licpu.lic class CADCopra  0  pri#ate static Copra$a.leAdapter adaptador 1 ne2 Copra$a.leAdapter()/

      pu.lic static int InsertCopra(Date$ie Fecha, int IdPro#eedor, int IdBodega)

      0  return (int) adaptador-InsertCopra(Fecha, IdPro#eedor, IdBodega)/  3  3

    9- +aos a opci8n gra.ar

    int IDBodega 1 (int)BodegaCo.oBox-!elected+alue/int IDPro#eedor 1 (int) Pro#eedorCo.oBox-!elected+alue/ KK se hace para no estarlocasteando a cada rato

  • 8/19/2019 Pasos Para Aplicacion Comercial

    65/136

     KKgra.aos cenca.e>ado de la copra  int IDCopra 1 CADCopra-InsertCopra(FechaDate$iePic"er-+alue,IDPro#eedor, IDBodega)/

    KKgra.aos detalle de la copra recorrer la lista4oreach (DetalleCopra iDetalle in isDetalles)0

      KKconsultar saldo de pto en una .odega hacer un etodo 7ue nos de#uel#a detallede un pto en una .odega con el etodo get.odegaProductoBIdpto 7ue nos de#uel#ael dellae en esa .odega de un ptoCADBodegaProducto iBodegaProducto 1 CADBodegaProducto-GetBodegaProductoByIdBodegaAndIdProducto(IDBodega,iDetalle-IdProducto)/

     i4 (iBodegaProducto T1 null) KKactuali>aos .odegaPto

      0 

    stoc" 1 iBodegaProducto-!toc"/

      3 KK CABIA A! ABAM*Video 1*.0 Compras parte 11

    5- En la ta.la .odegapto hay un Ntodo update 7ue actuali>a todos loscapos pero yo no 7uiero 7ue e actualice todos si no solo el stoc"entonces creaos un nue#o Ntodo ta.iNn de update 7ue actualice elstoc" con lo 7ue tenga en el oento as el nue#o stoc"UPDA$E Yd.oZ-YBodegaProductoZ !E$Y!toc"Z 1 Y!toc"Z X CantidadHE&E YIdBodegaZ 1 IdBodega AD YIdProductoZ 1 IdProductollaado auentar!toc"

    6- En el CADBodegaProducto colocaospu.lic static #oid Auentar!toc"(dou.le Cantidad,int IdBodega, int IdProducto)  0  adapter-Auentar!toc"(Cantidad,IdBodega,IdProducto)/  3

    9- En la ta.la copras en gra.ari4  (iBodegaProducto 11 null) KKactuali>aos .odegaPto  0CADBodegaProducto-UpdateBodegaProducto(IDBodega, iDetalle-IdProducto, 5, 5,5, 5)/3CADBodegaProducto-Auentar!toc"(iDetalle-Cantidad, IDBodega,iDetalle-IdProducto)/ KKHUB* CABI*! C* &E!PEC$* A E!$E C*DIG*

    :- P&*BA& I&A& $ABA DE P$* *! PA&AE$&*! B*DEGA S UEG* HACE& C*P&AG&ABA&A S +*+E& A I&A& *! UE+*! PA&AE$&*! B*DEGA 

    Video 1+ Compras parte 1$

    5- $a.la Excel explicar costo pro

    Fecha Producto entrada !alida !aldo Ultiocosto

    Costoproedio

  • 8/19/2019 Pasos Para Aplicacion Comercial

    66/136

  • 8/19/2019 Pasos Para Aplicacion Comercial

    67/136

      pu.lic int IdProducto 0 get/ set/ 3  pu.lic Date$ie Fecha 0 get/ set/ 3  pu.lic string Docuento 0 get/ set/ 3  pu.lic [oat Entrada 0 get/ set/ 3  pu.lic [oat !alida 0 get/ set/ 3  pu.lic [oat !aldo 0 get/ set/ 3  pu.lic decial UltioCosto 0 get/ set/ 3

      pu.lic decial CostoProedio 0 get/ set/ 3

    pri#ate static %ardex$a.leAdapter adaptador 1 ne2 %ardex$a.leAdapter()/

      pu.lic static CAD%ardex Ultio%ardex(int IdBodega, int IdProducto)  0  CAD%ardex i%ardex 1 null/  dsAplicacionCoercial -%ardexData$a.le i$a.la 1adaptador-Ultio%ardex(IdBodega, IdProducto)/  i4  (i$a.la-&o2s-Count 11 ) return i%ardex/  dsAplicacionCoercial -%ardex&o2 i&egistro 1(dsAplicacionCoercial -%ardex&o2)i$a.la-&o2sYZ/  i%ardex 1 ne2 CAD%ardex()/  i%ardex-CostoProedio 1 i&egistro-CostoProedio/  i%ardex-Docuento 1 i&egistro-Docuento/  i%ardex-Entrada 1 ([oat)i&egistro-Entrada/  i%ardex-Fecha 1 i&egistro-Fecha/  i%ardex-IdBodega 1 i&egistro-IdBodega/  i%ardex-Id%ardex 1 i&egistro-Id%ardex/  i%ardex-IdProducto 1 i&egistro-IdProducto/  i%ardex-!aldo 1 ([oat)i&egistro-!aldo/  i%ardex-!alida 1([oat) i&egistro-!alida/  i%ardex-UltioCosto 1 i&egistro-UltioCosto/  return i%ardex/

      3

    /. En la opci8n gra.ar del 4orulario copras

    CADBodegaProducto-Auentar!toc"(iDetalle-Cantidad, IDBodega,iDetalle-IdProducto)/

      KK actuali>aos el "ardex  CAD%ardex i%ardex 1 CAD%ardex-Ultio%ardex(IDBodega,iDetalle-IdProducto)/  i4  (i%ardex 11 null)  0

      3

    Video 1+.$ Compras parte 1+

    5- Continuando con lo anterior agregando Ntodo de insert en %ardex

    agregar consulta @ insert llaaos Insert%ardex esta consulta inserta elregistro y luego de#uel#e codigo de %ardexI!E&$ I$* Yd.oZ-Y%ardexZ (YIdBodegaZ, YIdProductoZ, YFechaZ,YDocuentoZ, YEntradaZ, Y!alidaZ, Y!aldoZ, YUltioCostoZ,YCostoProedioZ) +AUE! (IdBodega, IdProducto, Fecha,Docuento, Entrada, !alida, !aldo, UltioCosto,CostoProedio)/!EEC$ Id%ardex F&* %ardex HE&E (Id%ardex 1 !C*PERIDE$I$S())

  • 8/19/2019 Pasos Para Aplicacion Comercia