4 changed files with 113 additions and 2 deletions
@ -0,0 +1,101 @@ |
|||||
|
import { Injectable } from '@angular/core'; |
||||
|
import { CardInfo } from '../models/card.model'; |
||||
|
|
||||
|
interface CSVInfo |
||||
|
{ |
||||
|
Set: string; |
||||
|
CardNumber: string; |
||||
|
Count: string; |
||||
|
IsFoil: boolean; |
||||
|
} |
||||
|
|
||||
|
@Injectable({ |
||||
|
providedIn: 'root', |
||||
|
}) |
||||
|
|
||||
|
export class SWUDBService { |
||||
|
|
||||
|
GenerateCSVForCards(cards: Array<CardInfo>) |
||||
|
{ |
||||
|
let exportInfo = new Array<any>(); |
||||
|
for(let index in cards) |
||||
|
{ |
||||
|
let card = cards[index] as CardInfo; |
||||
|
|
||||
|
if(card.setNumber != -1 && (card.standardQuantity != undefined &&card.standardQuantity > 0)) |
||||
|
{ |
||||
|
let info = {} as CSVInfo; |
||||
|
info.Set = card.setCode; |
||||
|
info.CardNumber = card.setNumber.toString(); |
||||
|
info.Count = card.standardQuantity.toString(); |
||||
|
info.IsFoil = false; |
||||
|
exportInfo.push(info); |
||||
|
} |
||||
|
|
||||
|
if(card.setNumber != -1 && (card.foilQuantity != undefined &&card.foilQuantity > 0)) |
||||
|
{ |
||||
|
let info = {} as CSVInfo; |
||||
|
info.Set = card.setCode; |
||||
|
info.CardNumber = card.setNumber.toString(); |
||||
|
info.Count = card.foilQuantity.toString(); |
||||
|
info.IsFoil = true; |
||||
|
exportInfo.push(info); |
||||
|
} |
||||
|
|
||||
|
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceQuantity != undefined &&card.hyperspaceQuantity > 0)) |
||||
|
{ |
||||
|
let info = {} as CSVInfo; |
||||
|
info.Set = card.setCode; |
||||
|
info.CardNumber = card.hyperspaceSetNumber.toString(); |
||||
|
info.Count = card.hyperspaceQuantity.toString(); |
||||
|
info.IsFoil = false; |
||||
|
exportInfo.push(info); |
||||
|
} |
||||
|
|
||||
|
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceFoilQuantity != undefined &&card.hyperspaceFoilQuantity > 0)) |
||||
|
{ |
||||
|
let info = {} as CSVInfo; |
||||
|
info.Set = card.setCode; |
||||
|
info.CardNumber = card.hyperspaceSetNumber.toString(); |
||||
|
info.Count = card.hyperspaceFoilQuantity.toString(); |
||||
|
info.IsFoil = true; |
||||
|
exportInfo.push(info); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
let separator: string = ','; |
||||
|
|
||||
|
let keys = Object.keys(exportInfo[0]); |
||||
|
let csvContent = |
||||
|
keys.join(separator) + |
||||
|
'\n' + |
||||
|
exportInfo.map(row => |
||||
|
{ |
||||
|
return keys.map(k => |
||||
|
{ |
||||
|
let cell = row[k] === null || row[k] === undefined ? '' : row[k]; |
||||
|
cell = cell instanceof Date ? cell.toLocaleString() : cell.toString().replace(/"/g, '""'); |
||||
|
if (cell.search(/("|,|\n)/g) >= 0) |
||||
|
{ |
||||
|
cell = `"${cell}"`; |
||||
|
} |
||||
|
return cell; |
||||
|
}).join(separator); |
||||
|
}).join('\n'); |
||||
|
|
||||
|
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); |
||||
|
const link = document.createElement('a'); |
||||
|
if (link.download !== undefined) |
||||
|
{ |
||||
|
let now = new Date(Date.now()); |
||||
|
// Browsers that support HTML5 download attribute
|
||||
|
const url = URL.createObjectURL(blob); |
||||
|
link.setAttribute('href', url); |
||||
|
link.setAttribute('download', "swu_export_" + cards[0].setCode + "_" + now.toISOString()+".csv"); |
||||
|
link.style.visibility = 'hidden'; |
||||
|
document.body.appendChild(link); |
||||
|
link.click(); |
||||
|
document.body.removeChild(link); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue