Upload
diana-carolina-russi
View
218
Download
0
Embed Size (px)
Citation preview
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