Пример #1
0
        public IHttpActionResult PostManualComparables(string subjectBBL, [FromBody] BAL.ManualCMASelection manualCMA)
        {
            if (manualCMA == null)
            {
                return(this.BadRequest("Malformed body"));
            }

            if (String.IsNullOrEmpty(manualCMA.username))
            {
                return(this.BadRequest("Username cannot be null or empty"));
            }

            if (!BAL.BBL.IsValidFormat(subjectBBL))
            {
                return(this.BadRequest("Incorrect BBL - Borough Block Lot number"));
            }
            if (manualCMA.comparables == null || manualCMA.comparables.Count == 0)
            {
                return(this.BadRequest("No sales selected. Please select one or more sales"));
            }

            if (manualCMA.additionalFilter != null)
            {
                if ((manualCMA.additionalFilter.gLAMin == null) && (manualCMA.additionalFilter.gLAMax != null))
                {
                    manualCMA.additionalFilter.gLAMin = manualCMA.additionalFilter.gLAMax;
                }
                if ((manualCMA.additionalFilter.gLAMin != null) && (manualCMA.additionalFilter.gLAMax == null))
                {
                    manualCMA.additionalFilter.gLAMax = manualCMA.additionalFilter.gLAMin;
                }

                if ((manualCMA.additionalFilter.lotAreaMin == null) && (manualCMA.additionalFilter.lotAreaMax != null))
                {
                    manualCMA.additionalFilter.lotAreaMin = manualCMA.additionalFilter.lotAreaMax;
                }
                if ((manualCMA.additionalFilter.lotAreaMin != null) && (manualCMA.additionalFilter.lotAreaMax == null))
                {
                    manualCMA.additionalFilter.lotAreaMax = manualCMA.additionalFilter.lotAreaMin;
                }
            }
            else
            {
                Common.Logs.log().Warn(string.Format("Additional Filter for Manual CMA for {0} by {1} is NULL", subjectBBL, manualCMA.username));
            }

            if (manualCMA.basicFilter == null)
            {
                Common.Logs.log().Warn(string.Format("Basic Filter for Manual CMA for {0} by {1} is NULL", subjectBBL, manualCMA.username));
            }

            try
            {
                var result = BAL.CMA.SaveManualComparables(subjectBBL, manualCMA);
                if (result == null)
                {
                    throw new Exception("Internal Error function should not return null");
                }
                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"));
            }
        }
Пример #2
0
        public static long SaveCMARun(string subjectBBL, BAL.ManualCMASelection manualCMA)
        {
            using (NYCMAEntities nycmaE = new NYCMAEntities())
            {
                using (var nycmaEntitiestransaction = nycmaE.Database.BeginTransaction())
                {
                    NYCMADB.CMARun cmaRun = new NYCMADB.CMARun();

                    cmaRun.UserName    = manualCMA.username;
                    cmaRun.RunDateTime = DateTime.UtcNow;
                    cmaRun.RunType     = (int)CMARunType.Manual;
                    cmaRun.CMAType     = manualCMA.intent;
                    cmaRun.BBL         = subjectBBL;

                    cmaRun.AlgorithmType = "F";
                    if (manualCMA.basicFilter != null)
                    {
                        cmaRun.MonthsOffset       = manualCMA.basicFilter.monthOffset;
                        cmaRun.BuildingClassMatch = manualCMA.basicFilter.classMatchType;
                        cmaRun.MinSalePrice       = Convert.ToDecimal(manualCMA.basicFilter.minSalePrice);
                        cmaRun.MaxSalePrice       = Convert.ToDecimal(manualCMA.basicFilter.maxSalePrice);
                        cmaRun.SameNeighborhood   = manualCMA.basicFilter.sameNeighborhood;
                        cmaRun.SameSchoolDistrict = manualCMA.basicFilter.sameSchoolDistrict;
                        cmaRun.SameZip            = manualCMA.basicFilter.sameZip;
                        cmaRun.SameStreet         = manualCMA.basicFilter.sameStreet;
                        cmaRun.SameBlock          = manualCMA.basicFilter.sameBlock;
                        cmaRun.IsNotIntraFamily   = manualCMA.basicFilter.isNotIntraFamily;
                        cmaRun.BuyerIsCompany     = manualCMA.basicFilter.isBuyeraCompany;
                        cmaRun.SellerIsCompany    = manualCMA.basicFilter.isSelleraCompany;
                    }

                    if (manualCMA.additionalFilter != null)
                    {
                        cmaRun.Distance                = Convert.ToDecimal(manualCMA.additionalFilter.distance);
                        cmaRun.GLAHiPercentage         = manualCMA.additionalFilter.gLAMax;
                        cmaRun.GLALoPercentage         = manualCMA.additionalFilter.gLAMin;
                        cmaRun.LAHiPercentage          = manualCMA.additionalFilter.lotAreaMax;
                        cmaRun.LALoPercentage          = manualCMA.additionalFilter.lotAreaMin;
                        cmaRun.BuildingFrontageHiRange = manualCMA.additionalFilter.buildingFrontageMax;
                        cmaRun.BuildingFrontageLoRange = manualCMA.additionalFilter.buildingFrontageMin;
                        cmaRun.BuildingDepthHiRange    = manualCMA.additionalFilter.buildingDepthMax;
                        cmaRun.BuildingDepthLoiRange   = manualCMA.additionalFilter.buildingDepthMin;
                        cmaRun.LotFrontageHiRange      = manualCMA.additionalFilter.lotFrontageMax;
                        cmaRun.LotFrontageLoRange      = manualCMA.additionalFilter.lotFrontageMin;
                        cmaRun.LotDepthHiRange         = manualCMA.additionalFilter.lotDepthMax;
                        cmaRun.LotDepthLoRange         = manualCMA.additionalFilter.lotDepthMin;
                    }

                    try
                    {
                        cmaRun = nycmaE.CMARuns.Add(cmaRun);
                        nycmaE.SaveChanges();

                        foreach (var comp in manualCMA.comparables)
                        {
                            NYCMADB.CMAComparable cmaComp = new NYCMADB.CMAComparable();

                            cmaComp.CMARunId      = cmaRun.CMARunId;
                            cmaComp.ComparableBBL = comp.BBLE;
                            cmaComp.SaleDate      = comp.DeedDate.GetValueOrDefault();
                            cmaComp = nycmaE.CMAComparables.Add(cmaComp);
                        }
                        nycmaE.SaveChanges();

                        nycmaEntitiestransaction.Commit();

                        return(cmaRun.CMARunId);
                    }
                    catch (DbEntityValidationException dbEx)
                    {
                        foreach (var validationErrors in dbEx.EntityValidationErrors)
                        {
                            foreach (var validationError in validationErrors.ValidationErrors)
                            {
                                Common.Logs.log().Error(string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
                            }
                        }
                        return(0);
                    }
                    catch (Exception e)
                    {
                        nycmaEntitiestransaction.Rollback();
                        Common.Logs.log().Error(string.Format("Exception encountered saving manual CMARun for {} run by {2}", subjectBBL, manualCMA.username, Common.Logs.FormatException(e)));
                        return(0);
                    }
                }
            }
        }