Ejemplo n.º 1
0
        public Sale GetSale()
        {
            if (allOperations.Count == 0)
            {
                KeyValuePair <int, OperationType> [] operations;
                if (operationType == (int)Data.OperationType.Sale)
                {
                    operations = GetOperationsByIssuedNumber(Number);
                }
                else if (operationType == (int)Data.OperationType.Purchase)
                {
                    operations = GetOperationsByReceivedNumber(Number);
                }
                else
                {
                    return(null);
                }

                allOperations.AddRange(operations.Select(o => Operation.GetById(o.Value, o.Key)));
            }

            Operation last         = allOperations.LastOrDefault();
            Sale      lastSale     = last as Sale;
            Purchase  lastPurchase = last as Purchase;

            Sale ret;

            if (lastSale != null)
            {
                ret = lastSale.CloneOperationBody <Sale> ();
            }
            else if (lastPurchase != null)
            {
                ret = lastPurchase.CloneOperationBody <Sale> ();
            }
            else
            {
                return(null);
            }

            List <SaleDetail> details = new List <SaleDetail> ();

            foreach (var oper in allOperations)
            {
                Sale s = oper as Sale;
                if (s != null)
                {
                    if (s.Details.Count == 0)
                    {
                        s.LoadDetails();
                    }

                    details.AddRange(s.Details);
                    continue;
                }

                Purchase p = oper as Purchase;
                if (p != null)
                {
                    if (p.Details.Count == 0)
                    {
                        p.LoadDetails();
                    }

                    details.AddRange(p.Details.Select(pd => pd.Clone <SaleDetail> ()));
                }
            }
            ret.Details.Clear();
            ret.Details.AddRange(details);

            return(ret);
        }