Esempio n. 1
0
        /* Handles a model request */
        public async Task HandleRequest(EIA.Repository.CModelRequest Request)
        {
            /* Create Return */
            CModelResponse nResponse = new CModelResponse();

            /* Set default */
            nResponse.ResponseData = null;

            /* Step 1. Get a handle of the requested model */
            var wHandle = GetWorkBook(Request);
            var wTemplate = GetTemplate(Request);

            /* Step 2. Fill in details */
            FillWorkSheetWithTemplate(wHandle.Worksheets[0], wTemplate.Worksheets[0]);

            /* Step 3. Run requested macros/functions */
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCP))
                Macros.CalculateCP(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCX))
                Macros.CalculateCX(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDF))
                Macros.CalculateDF(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDX))
                Macros.CalculateDX(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateGP))
                Macros.CalculateGP(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOP))
                Macros.CalculateOP(ref wHandle);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOX))
                Macros.CalculateOX(ref wHandle);

            /* Step 4. Extract results */
            SpreadsheetGear.IWorkbookSet _OutWbSet =
                    SpreadsheetGear.Factory.GetWorkbookSet();
            SpreadsheetGear.IWorkbook _WriteWB =
                _OutWbSet.Workbooks.Add();

            /* Reverse Order */
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOX))
            {
                wHandle.Worksheets["NPV&IRR(OX)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(OX)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOP))
            {
                wHandle.Worksheets["NPV&IRR(OP)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(OP)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateGP))
            {
                wHandle.Worksheets["NPV&IRR(GP)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(GP)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDX))
            {
                wHandle.Worksheets["NPV&IRR(DX)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(DX)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDF))
            {
                wHandle.Worksheets["NPV&IRR(DF)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(DF)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCX))
            {
                wHandle.Worksheets["NPV&IRR(CX)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(CX)";
            }
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCP))
            {
                wHandle.Worksheets["NPV&IRR(CP)"].CopyAfter(_WriteWB.Worksheets[0]);
                _WriteWB.Worksheets[1].Name = "NPV&IRR(CP)";
            }

            /* Copy Values */
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCP))
                CopySheet(wHandle.Worksheets["NPV&IRR(CP)"], _WriteWB.Worksheets["NPV&IRR(CP)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateCX))
                CopySheet(wHandle.Worksheets["NPV&IRR(CX)"], _WriteWB.Worksheets["NPV&IRR(CX)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDF))
                CopySheet(wHandle.Worksheets["NPV&IRR(DF)"], _WriteWB.Worksheets["NPV&IRR(DF)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateDX))
                CopySheet(wHandle.Worksheets["NPV&IRR(DX)"], _WriteWB.Worksheets["NPV&IRR(DX)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateGP))
                CopySheet(wHandle.Worksheets["NPV&IRR(GP)"], _WriteWB.Worksheets["NPV&IRR(GP)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOP))
                CopySheet(wHandle.Worksheets["NPV&IRR(OP)"], _WriteWB.Worksheets["NPV&IRR(OP)"]);
            if (Request.Parameters.HasFlag(RequestParameters.CalculateOX))
                CopySheet(wHandle.Worksheets["NPV&IRR(OX)"], _WriteWB.Worksheets["NPV&IRR(OX)"]);

            /* Remove left-owers */
            _WriteWB.Worksheets[0].Delete();
            
            /* Save */
            nResponse.ResponseData = _WriteWB.SaveToMemory(SpreadsheetGear.FileFormat.OpenXMLWorkbook);

            /* Step 5. Cleanup */
            _WriteWB.Close();
            _OutWbSet.Dispose();
            wHandle.Close();

            /* Step 6. Encode/proxy results */
            nResponse.Model = Request.Model;

            /* Step 7. Insert into database and return */
            using (RequestRepository rRepo = new RequestRepository())
            {
                await rRepo.Response(Request.Guid, nResponse);
            }
        }
        /* PARSER - Create Response */
        public async Task<OpObject> Response(String RequestId, CModelResponse Response)
        {
            /* Lookup request id */
            Int64 uRequestId = Int64.Parse(RequestId);

            /* Proxy data */
            TransactionRespons tResponse = new TransactionRespons()
            {
                Guid = Guid.NewGuid(),
                RequestId = uRequestId,
                ResultCode = 0,
                Data = Response.ResponseData,
                Created = DateTime.Now
            };

            /* Create the request in database */
            Database.TransactionResponses.Add(tResponse);
            Database.Entry(tResponse).State = System.Data.Entity.EntityState.Added;

            /* Save */
            await Database.SaveChangesAsync();

            /* Done */
            return new OpObject(StatusCode.Ok);
        }