6 use FS::Record qw(qsearch dbh);
9 getopts('p:'); # pkgpart
10 $FS::UID::AutoCommit = 0;
13 die "Usage: part_pkg-clone_fix_options -p pkgpart[,pkgpart...] user\n\n";
16 my @pkgpart = split(',',$opt{p}) or usage();
17 foreach my $base_pkgpart (@pkgpart) {
18 my $base_part_pkg = FS::part_pkg->by_key($base_pkgpart);
19 warn "Base package '".$base_part_pkg->pkg."'\n";
20 my @children = qsearch('part_pkg', { 'family_pkgpart' => $base_pkgpart });
24 my %base_options = $base_part_pkg->options;
25 my %report_classes = map { $_ => $base_options{$_} }
26 grep /^report_option_/, keys %base_options;
27 if (!keys %report_classes) {
28 warn "No report classes.\n";
32 foreach my $part_pkg (@children) {
33 my $pkgpart = $part_pkg->pkgpart;
34 next if $pkgpart == $base_pkgpart;
37 # don't do this if it has report options already
38 my %options = $part_pkg->options;
39 if (grep /^report_option_/, keys %options) {
40 warn "#$pkgpart has report classes; skipped\n";
42 %options = ( %options, %report_classes );
43 my $error = $part_pkg->replace(options => \%options);
44 die "#$pkgpart: $error\n" if $error;
48 warn "Updated $n_upd / $n_pkg child packages.\n";