Ejemplo n.º 1
0
        public ImportResponse ImportScheduledTaxRates(string fullFilePath)
        {
            var response = new ImportResponse();

            if (string.IsNullOrWhiteSpace(fullFilePath))
            {
                response.AddError("No file specified");
                return(response);
            }
            if (!fullFilePath.EndsWith(".csv"))
            {
                response.AddError("file must be in .csv format");
                return(response);
            }
            if (!File.Exists(fullFilePath))
            {
                response.AddError("File does not exist");
                return(response);
            }
            var lines = File.ReadAllLines(fullFilePath);

            for (int i = 1; i < lines.Length; i++)
            {
                var lineParts = lines[i].Split(';');
                if (lineParts.Length != 4)
                {
                    response.AddFailedLine(i, "Not able to find all elements");
                    continue;
                }
                var municipality  = lineParts[0];
                var partsAreValid = true;
                if (string.IsNullOrWhiteSpace(municipality))
                {
                    response.AddFailedLine(i, "No municipality name specified");
                    partsAreValid = false;
                }
                if (!decimal.TryParse(lineParts[1], out decimal rate))
                {
                    response.AddFailedLine(i, $"Unable to parse rate {lineParts[1]} to a decimal");
                    partsAreValid = false;
                }
                var frequencyParses = Enum.TryParse(lineParts[2], true, out Frequency frequency) && Enum.IsDefined(typeof(Frequency), frequency);
                if (!frequencyParses)
                {
                    response.AddFailedLine(i, $"Unable to parse {lineParts[2]} to a valid frequency");
                    partsAreValid = false;
                }

                if (frequencyParses)
                {
                    var(Success, ErrorMessage, Ranges) = ParseDateRanges(lineParts[3], frequency);
                    if (!Success)
                    {
                        partsAreValid = false;
                        response.AddFailedLine(i, ErrorMessage);
                    }

                    if (!partsAreValid)
                    {
                        continue;
                    }

                    foreach (var(Start, End) in Ranges)
                    {
                        var scheduledTaxRate = _scheduledTaxRateFactory.Create(municipality, rate, frequency, Start, End);
                        _municipalityRepository.SaveScheduledTaxRate(scheduledTaxRate);
                    }
                }
            }

            return(response);
        }