Hola Edgar,

Gracias por la explicacion, aparentemente en tu pais las cuestiones
impositivas son distintas (o yo no conozco bien las del mio). Yo tengo
entendido que en mi pais las retenciones se hacen al momento del pago.

De todas maneras esto no es importate para el concepto, te cuendo como
resolveria yo tu escenario en el modelo.

public class Factura {
    public Factura() {
    }

    public void AplicarRetencion() {
        retencion = new Retencion(Total);
    }

    private Retencion retencion;
    public Retencion Retencion {
        get {
            if (retencion == null)
                // una subclase de retencion que devuelva un importe de cero
                return new SinRentecion();

            return retencion;
        }
    }

    public decimal SaldoAPagar {
        get { Total - Retencion.Importe; }
    }
}

Una mejor opcion seria inicializar en el constructor la variable retencion
= new SinRentecion() lo cual evitaria el if del getter y seria mejor desde
el punto de vista del modelo, pero se me ocurre ahora como hacer para
persistir esa relacion, seguramente con un UserType pero no estoy seguro.

----------------------------------
Carlos Peix

2011/6/29 Edgar Ramos <[email protected]>

> Gracias a todos por sus comentarios.
>
> Como dice Carlos son todos excelentes consejos.
>
> Carlos, mis apreciaciones
> ----
>
> en mi opinion no deberias tener una referencia desde la Factura a la
> Retencion.
> ---
>
> Esta logica me ha estado sonando bastante desde ayer.
>
> -----
>
> Pregunta: si la factura no tiene retencion, sigue siendo una factura? si la
> respuesta es SI, entonces no es correcto colocar esa referencia.
> -----
>
> Efectivamente la respuesta es si, pero mi duda de principiante, por que no
> es correcto colocar esta referencia aqui ?
> Este es síntoma de un mal analisis de mi parte ?, el por que me ayudaría a
> enteder mejor mi problema
>
> ----
>
> Lo mismo para la retencion: si la retencion no tiene factura, sigue siendo
> una retencion? creo que la respuesta es NO, no puede existir retencion sin
> el comprobante asociado (sea factura u otro).
> ----
>
> Nuevamente es correcta esta apreciacion, la respuesta es no
>
> Pero
> ---
>
> Otro punto seria: la factura necesita la retencion para algun calculo? que
> pasa cuando no la hay? como funciona ese calculo?
> ---
>
> Si la factura no necesita retencion, los calculos son iguales, hay un
> subtotal+impuestos, lo que nos da un total
> Si la factura requiere una retencion, los calculos cambian.
>
> Retencion = PorcentajeDeRetencion * Subtotal
> SaldoApagar = total-Retencion
>
> El nuevo total de factura es igual a SaldoAPagar.
> Aqui, para efectos de mis calculos, que posiblemente mi analisis preliminar
> este mal planteado.
>
> Verificaba que si mi objeto Factura.Retencion == null, SaldoAPagar = Total,
> caso contrario, efectuaba los calculos anteriormente expuestos
>
> Gracias por sus comentarios
>
> Saludos
>
> Edgar
>
> El 29 de junio de 2011 04:55, Carlos Peix <[email protected]>escribió:
>
> Hola Edgar,
>>
>> Advertencia: esta es una respuesta disruptiva con el hilo.
>>
>> Como dice el tano, cuanto mejor es tu modelo de objetos, mas facil es
>> mapearlo con un ORM.
>>
>> Tu dignostico es correcto: "Me he liado un poco con la relacion de estos
>> objetos" pero creo que estas buscando la solucion en el lugar equivocado.
>>
>> Al margen de los excelentes consejos que te estan dando, en mi opinion no
>> deberias tener una referencia desde la Factura a la Retencion.
>>
>> Pregunta: si la factura no tiene retencion, sigue siendo una factura? si
>> la respuesta es SI, entonces no es correcto colocar esa referencia.
>>
>> Lo mismo para la retencion: si la retencion no tiene factura, sigue siendo
>> una retencion? creo que la respuesta es NO, no puede existir retencion sin
>> el comprobante asociado (sea factura u otro).
>>
>> Otro punto seria: la factura necesita la retencion para algun calculo? que
>> pasa cuando no la hay? como funciona ese calculo?
>>
>> ----------------------------------
>> Carlos Peix
>>
>> 2011/6/28 Edgar Ramos <[email protected]>
>>
>>>  Gente un Saludo
>>>
>>> Me he liado un poco con la relacion de estos objetos
>>>
>>> Factura y Retencion
>>>
>>> A una Factura le corresponde una retencion, siempre y cuando el cliente
>>> lo exija, caso contrario no aplica, para este efecto
>>>
>>>
>>> Mis clases
>>>
>>> public class Factura
>>> {
>>>        .......
>>>         public virtual RetencionFuenteVenta Retencion { get; set; }
>>>        .......
>>> }
>>>
>>>  public class RetencionFuenteVenta
>>>  {
>>>          ........
>>>           public virtual Factura FacturaAplicada { get; set; }
>>>          ......
>>>  }
>>>
>>> Mis mappings
>>>
>>> <class name="RetencionFuenteVenta">
>>>     <id name="Id">
>>>       <generator class="hilo"/>
>>>     </id>
>>>
>>>    .........
>>>    <many-to-one name="FacturaAplicada" class="Factura" column="FacturaId"
>>> />
>>>   </class>
>>>
>>> <class name="Factura">
>>>     <id name="Id">
>>>       <generator class="hilo"/>
>>>     </id>
>>>
>>>    <many-to-one name="Retencion" class="RetencionFuenteVenta"
>>> column="RetencionId" cascade="all" />
>>>   </class>
>>>
>>> En el esquema de la bdd, la tabla Factura tiene el campo RetencionId como
>>> permitir valores nulos, que para mi
>>> caso es lo que requiero.
>>> Por otro lado La tabla RetencionFuenteVenta, campo FacturaId, tiene
>>> tambien permitir valores nulos, no me parece
>>> que sea lo correcto, pero lo puesto asi para que nh persista estas
>>> entidades y lo hace sin problemas
>>>
>>> Pero al quitar de RetencionFuenteVenta, campo FacturaID el permitir
>>> valores nulos, nh me tira un error
>>> -------------------------------
>>> {"No se puede insertar el valor NULL en la columna 'FacturaID', tabla
>>> 'RetencionFuenteVenta'. La columna no admite valores NULL. INSERT falla.\r\n
>>> Se terminó la instrucción."}
>>> ---------------------------------
>>>
>>> Cualquier comentario o sugerencia les estoy muy agradecido
>>>
>>> Saludos
>>>
>>> Edgar
>>>
>>>
>>>
>>>  --
>>> Para escribir al Grupo, hágalo a esta dirección:
>>> [email protected]
>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>>
>>
>>  --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>
>
>  --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a