Beispiel #1
0
        /// <summary>
        /// Get all files for the transaction type and import date.
        /// </summary>
        /// <param name="type">trasnaction type</param>
        /// <param name="reportDate">import date</param>
        /// <returns>the list of files</returns>
        public NameValueCollection GetFileList(FtpTransactionType type, DateTime reportDate)
        {
            var fileList = new NameValueCollection();

            try
            {
                var folderUrl = string.Empty;
                if (type == FtpTransactionType.Completed)
                {
                    folderUrl = AirbnbFtpConfig.CompletedFtpUrl + "/" + reportDate.ToString("MMMM d yyyy");
                }
                else if (type == FtpTransactionType.Future)
                {
                    folderUrl = AirbnbFtpConfig.FutureFtpUrl + "/Future Transactions - " + reportDate.ToString("MMMM d yyyy");
                }
                else
                {
                    folderUrl = AirbnbFtpConfig.GrossEarningsFtpUrl + "/" + reportDate.ToString("MMMM d yyyy");
                }

                string ftpUrl = folderUrl;
                if (!folderUrl.StartsWith("ftp://"))
                {
                    ftpUrl = Path.Combine(_FtpServerUrl, folderUrl);
                }
                var files = GetDataList(ftpUrl);

                //Loop through the resulting file names.
                foreach (var fileName in files)
                {
                    if (Path.HasExtension(fileName))
                    {
                        fileList.Add(fileName, ftpUrl + "/" + fileName);
                    }
                }
            }
            catch
            {
                // no file available
            }

            return(fileList);
        }
Beispiel #2
0
        public ActionResult ImportAirbnb(AirbnbImportFormModel form)
        {
            if (!AuthorizationProvider.IsDataImporter())
            {
                return(Forbidden());
            }

            try
            {
                List <ImportFile>  completedTransactionFiles = JsonConvert.DeserializeObject <List <ImportFile> >(form.CompletedTransactionFiles);
                List <ImportFile>  futureTransactionFiles    = JsonConvert.DeserializeObject <List <ImportFile> >(form.FutureTransactionFiles);
                List <ImportFile>  grossTransactionFiles     = JsonConvert.DeserializeObject <List <ImportFile> >(form.GrossTransactionFiles);
                FtpTransactionType FileTransactionType       = form.TransactionFileType;

                ProcessResult result = new ProcessResult();
                if (FileTransactionType == FtpTransactionType.Completed)
                {
                    result = ImportAirbnbTrasactions(completedTransactionFiles, form.ReportDate, FileTransactionType);
                }
                else if (FileTransactionType == FtpTransactionType.Future)
                {
                    result = ImportAirbnbTrasactions(futureTransactionFiles, form.ReportDate, FileTransactionType);
                }
                else if (FileTransactionType == FtpTransactionType.Gross)
                {
                    result = ImportAirbnbTrasactions(grossTransactionFiles, form.ReportDate, FileTransactionType);
                }
                else if (FileTransactionType == FtpTransactionType.LogMissingTransactions)
                {
                    var logDate = new DateTime(2017, 12, 30);
                    result = LogMissingAirbnbTrasactions(completedTransactionFiles, logDate, FileTransactionType);
                }

                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                ProcessResult result = new ProcessResult();
                result.Count   = -1;
                result.Message = ex.Message;
                return(Json(-1, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #3
0
        public JsonResult GetImportFileList(DateTime reportDate, FtpTransactionType reportType)
        {
            List <SelectListItem> fileList = new List <SelectListItem>();

            try
            {
                var fptService = new AirbnbFtpService();
                NameValueCollection urlList;
                if (reportType == FtpTransactionType.Completed)
                {
                    urlList = fptService.GetFileList(FtpTransactionType.Completed, reportDate);
                }
                else if (reportType == FtpTransactionType.Future)
                {
                    urlList = fptService.GetFileList(FtpTransactionType.Future, reportDate);
                }
                else
                {
                    urlList = fptService.GetFileList(FtpTransactionType.Gross, reportDate);
                }

                // map NameValueCollection to SelectListItem
                foreach (var key in urlList.AllKeys)
                {
                    fileList.Add(new SelectListItem
                    {
                        Text  = key,
                        Value = key + ";" + urlList[key] // js uses this format to parse out the filename and url
                    });
                }

                return(Json(fileList, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                DojoLogger.Error(ex.Message, typeof(OwnerPayoutController));
                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; // code = 500
                return(Json(fileList, JsonRequestBehavior.AllowGet));
            }
        }
Beispiel #4
0
        private ProcessResult LogMissingAirbnbTrasactions(List <ImportFile> importFiles, DateTime logDate, FtpTransactionType fileTransactionType)
        {
            var    result    = new ProcessResult();
            string localFile = string.Empty;

            try
            {
                // speed up bulk insertion
                _dbContext.Configuration.AutoDetectChangesEnabled = false;
                _dbContext.Configuration.ValidateOnSaveEnabled    = false;

                string tempFolder    = GetDownloadFolder();
                var    ftpService    = new AirbnbFtpService();
                var    importService = new AirbnbImportService();

                var payoutProvider = new OwnerPayoutService(_dbContext);
                foreach (var importFile in importFiles)
                {
                    result.Count++;

                    // download file from ftp site
                    string csvFileUrl = importFile.Id;
                    localFile = Path.Combine(tempFolder, importFile.Name);
                    ftpService.Download(csvFileUrl, localFile);
                    //DojoLogger.Info(string.Format("Download file {0} completed.", localFile));

                    // process only those data that is later than the most recent imported payout date in db
                    DateTime?startPayoutDate = payoutProvider.GetMostRecentPayoutDate(importFile.Name);
                    var      count           = importService.LogMissingCompletedAirbnbTransactions(
                        localFile, logDate.ToString("yyyy-MM-dd"), startPayoutDate);

                    if (count == -1)
                    {
                        result.Skip++;
                    }
                    else
                    {
                        result.Bad += count;
                    }

                    importService.DeleteFileIfAllowed(localFile);
                }
            }
            catch (Exception ex)
            {
                DojoLogger.Error(string.Format("Import file {0} fails. Exception: {1}", localFile, ex.Message));
                // fall through
            }

            result.Good = result.Count - result.Bad - result.Skip;
            return(result);
        }
Beispiel #5
0
        private ProcessResult ImportAirbnbTrasactions(List <ImportFile> importFiles, DateTime importDate, FtpTransactionType fileTransactionType)
        {
            var    result    = new ProcessResult();
            string localFile = string.Empty;

            try
            {
                // speed up bulk insertion
                _dbContext.Configuration.AutoDetectChangesEnabled = false;
                _dbContext.Configuration.ValidateOnSaveEnabled    = false;

                string tempFolder    = GetDownloadFolder();
                var    ftpService    = new AirbnbFtpService();
                var    importService = new AirbnbImportService();

                DojoLogger.Info(string.Format("Temporary download folder is {0} for {1} files from FTP server.", tempFolder, importFiles.Count.ToString()));

                if (fileTransactionType == FtpTransactionType.Completed)
                {
                    var payoutProvider = new OwnerPayoutService(_dbContext);
                    foreach (var importFile in importFiles)
                    {
                        result.Count++;

                        // download file from ftp site
                        string csvFileUrl = importFile.Id;
                        localFile = Path.Combine(tempFolder, importFile.Name);
                        ftpService.Download(csvFileUrl, localFile);
                        //DojoLogger.Info(string.Format("Download file {0} completed.", localFile));

                        // process only those data that is later than the most recent imported payout date in db
                        DateTime?startPayoutDate = payoutProvider.GetMostRecentPayoutDate(importFile.Name);
                        var      count           = importService.ImportCompletedAirbnbTransactions(
                            localFile, importDate.ToString("yyyy-MM-dd"), startPayoutDate);

                        if (count == -1)
                        {
                            result.Skip++;
                        }
                        else
                        {
                            result.Bad += count;
                        }

                        importService.DeleteFileIfAllowed(localFile);
                    }
                }
                else if (fileTransactionType == FtpTransactionType.Future)
                {
                    var    reservationProvider  = new ReservationService(_dbContext);
                    string mostRecentDateString = reservationProvider.GetMostRecentFutureDate();

                    foreach (var importFile in importFiles)
                    {
                        result.Count++;

                        //string sortableDate = importService.ParseDateFromTransactionFileUrl(importFile.Id);
                        //if (string.Compare(sortableDate, mostRecentDateString) > 0)
                        //{
                        // download file from ftp site
                        string csvFileUrl = importFile.Id;
                        localFile = Path.Combine(tempFolder, importFile.Name);
                        ftpService.Download(csvFileUrl, localFile);
                        var count = importService.ImportFutureAirbnbTransactions(localFile, importDate.ToString("yyyy-MM-dd"));

                        if (count == -1)
                        {
                            result.Skip++;
                        }
                        else
                        {
                            result.Bad += count;
                        }

                        importService.DeleteFileIfAllowed(localFile);

                        //}
                        //else
                        //    result.Skip++;
                    }
                }
                else
                {
                    var    reservationProvider  = new ReservationService(_dbContext);
                    string mostRecentDateString = reservationProvider.GetMostRecentGrossDate();

                    foreach (var importFile in importFiles)
                    {
                        result.Count++;

                        //string sortableDate = importService.ParseDateFromTransactionFileUrl(importFile.Id);
                        //if (string.Compare(sortableDate, mostRecentDateString) > 0)
                        //{
                        // download file from ftp site
                        string csvFileUrl = importFile.Id;
                        localFile = Path.Combine(tempFolder, importFile.Name);
                        ftpService.Download(csvFileUrl, localFile);
                        var count = importService.ImportGrossEarningTransactions(localFile, importDate.ToString("yyyy-MM-dd"));

                        if (count == -1)
                        {
                            result.Skip++;
                        }
                        else
                        {
                            result.Bad += count;
                        }

                        importService.DeleteFileIfAllowed(localFile);
                    }
                }
            }
            catch (Exception ex)
            {
                DojoLogger.Error(string.Format("Import file {0} fails. Exception: {1}", localFile, ex.Message));
                // fall through
            }

            result.Good = result.Count - result.Bad - result.Skip;
            return(result);
        }