public IHttpActionResult GetComparables(string subjectBBL, BAL.AutomatedCMAFilters filters)
        {
            if (!BAL.BBL.IsValidFormat(subjectBBL))
            {
                return(this.BadRequest("Incorrect BBL - Borough Block Lot number"));
            }

            try
            {
                var result = DAL.CMA.GetComparables(filters.algorithmType, subjectBBL, filters.basicFilter.maxRecords, filters.basicFilter.sameNeighborhood,
                                                    filters.basicFilter.sameSchoolDistrict, filters.basicFilter.sameZip, filters.basicFilter.sameBlock,
                                                    filters.basicFilter.sameStreet, filters.basicFilter.monthOffset, filters.basicFilter.minSalePrice,
                                                    filters.basicFilter.maxSalePrice, filters.basicFilter.classMatchType, filters.basicFilter.isNotIntraFamily,
                                                    filters.basicFilter.isSelleraCompany, filters.basicFilter.isBuyeraCompany, filters.basicFilter.minSimilarity);
                if (result == null)
                {
                    return(NotFound());
                }
                return(Ok(result));
            }
            catch (Exception e)
            {
                Common.Logs.log().Error(string.Format("Exception encountered for BBL: {0}{1}", subjectBBL, Common.Logs.FormatException(e)));
                return(Common.HttpResponse.InternalError(Request, "Internal Error in processing request"));
            }
        }
        public IHttpActionResult RunAutomatedCMA(string subjectBBL, BAL.AutomatedCMAFilters filters)
        {
            if (!BAL.BBL.IsValidFormat(subjectBBL))
            {
                return(this.BadRequest("Incorrect BBL - Borough Block Lot number"));
            }

            if (filters == null)
            {
                return(this.BadRequest("Malformed filter - Check the api body"));
            }

            try
            {
                BAL.AutomatedCMAResults result = null;
                switch (filters.intent)
                {
                case (int)CMAType.Regular:
                    result = BAL.CMA.GetAutomatedCMA(filters.algorithmType, subjectBBL, filters.basicFilter.maxRecords, filters.basicFilter.sameNeighborhood,
                                                     filters.basicFilter.sameSchoolDistrict, filters.basicFilter.sameZip, filters.basicFilter.sameBlock,
                                                     filters.basicFilter.sameStreet, filters.basicFilter.monthOffset, filters.basicFilter.minSalePrice,
                                                     filters.basicFilter.maxSalePrice, filters.basicFilter.classMatchType, filters.basicFilter.isNotIntraFamily,
                                                     filters.basicFilter.isSelleraCompany, filters.basicFilter.isBuyeraCompany, filters.basicFilter.minSimilarity);
                    break;

                case (int)CMAType.ShortSale:
                    result = BAL.CMA.GetAutomatedShortSaleCMA(subjectBBL, filters);
                    break;

                case (int)CMAType.Rehab:
                    result = BAL.CMA.GetAutomatedRehabCMA(subjectBBL, filters);
                    break;

                default:
                    return(this.BadRequest("Incorrect Type of CMA request - Valid values for intent are 1, 2, 3"));;
                }
                if (result == null)
                {
                    return(NotFound());
                }
                return(Ok(result));
            }
            catch (Exception e)
            {
                Common.Logs.log().Error(string.Format("Exception encountered while running automated for BBL: {0}{1}", subjectBBL, Common.Logs.FormatException(e)));
                return(Common.HttpResponse.InternalError(Request, "Internal Error in processing request"));
            }
        }